X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Faggregate_manager.py;h=2fbdf3d39dfd0ac8a8be0d5810f4f4422c85b72e;hb=d58bbc6238ee07a3e386b2627aa64ccb2dce352f;hp=fb49cb68a120f51b98ba7166e6ee0f36ca2ec054;hpb=39eaf6379f4082c0b2d624b9bbbd64cf262f4bc8;p=sfa.git diff --git a/sfa/managers/aggregate_manager.py b/sfa/managers/aggregate_manager.py index fb49cb68..2fbdf3d3 100644 --- a/sfa/managers/aggregate_manager.py +++ b/sfa/managers/aggregate_manager.py @@ -2,6 +2,7 @@ import datetime import time import sys +from sfa.util.sfalogging import logger from sfa.util.faults import RecordNotFound, SliverDoesNotExist from sfa.util.xrn import get_authority, hrn_to_urn, urn_to_hrn, Xrn, urn_to_sliver_id from sfa.util.plxrn import slicename_to_hrn, hrn_to_pl_slicename @@ -24,10 +25,10 @@ class AggregateManager: def __init__ (self): # xxx Thierry : caching at the aggregate level sounds wrong... - #self.caching=True - self.caching=False + self.caching=True + #self.caching=False - def GetVersion(self, api): + def GetVersion(self, api, options={}): version_manager = VersionManager() ad_rspec_versions = [] @@ -37,14 +38,14 @@ class AggregateManager: ad_rspec_versions.append(rspec_version.to_dict()) if rspec_version.content_type in ['*', 'request']: request_rspec_versions.append(rspec_version.to_dict()) - default_rspec_version = version_manager.get_version("sfa 1").to_dict() xrn=Xrn(api.hrn) version_more = {'interface':'aggregate', + 'sfa': 2, + 'geni_api': api.config.SFA_AGGREGATE_API_VERSION, 'testbed':'myplc', 'hrn':xrn.get_hrn(), - 'request_rspec_versions': request_rspec_versions, - 'ad_rspec_versions': ad_rspec_versions, - 'default_ad_rspec': default_rspec_version + 'geni_request_rspec_versions': request_rspec_versions, + 'geni_ad_rspec_versions': ad_rspec_versions, } return version_core(version_more) @@ -107,7 +108,8 @@ class AggregateManager: return reg_objects - def SliverStatus(self, api, slice_xrn, creds, call_id): + def SliverStatus(self, api, slice_xrn, creds, options={}): + call_id = options.get('call_id') if Callids().already_handled(call_id): return {} (hrn, _) = urn_to_hrn(slice_xrn) @@ -157,11 +159,12 @@ class AggregateManager: result['geni_resources'] = resources return result - def CreateSliver(self, api, slice_xrn, creds, rspec_string, users, call_id): + def CreateSliver(self, api, slice_xrn, creds, rspec_string, users, options={}): """ Create the sliver[s] (slice) at this aggregate. Verify HRN and initialize the slice record in PLC if necessary. """ + call_id = options.get('call_id') if Callids().already_handled(call_id): return "" aggregate = Aggregate(api) @@ -187,11 +190,10 @@ class AggregateManager: slices.verify_slice_attributes(slice, requested_attributes) # add/remove slice from nodes - requested_slivers = [str(host) for host in rspec.version.get_nodes_with_slivers()] + requested_slivers = [node.get('component_name') for node in rspec.version.get_nodes_with_slivers()] slices.verify_slice_nodes(slice, requested_slivers, peer) - - aggregate.prepare_nodes({'hostname': requested_slivers}) - aggregate.prepare_interfaces({'node_id': aggregate.nodes.keys()}) + + # add/remove links links slices.verify_slice_links(slice, rspec.version.get_link_requests(), aggregate) # handle MyPLC peer association. @@ -201,7 +203,8 @@ class AggregateManager: return aggregate.get_rspec(slice_xrn=slice_xrn, version=rspec.version) - def RenewSliver(self, api, xrn, creds, expiration_time, call_id): + def RenewSliver(self, api, xrn, creds, expiration_time, options={}): + call_id = options.get('call_id') if Callids().already_handled(call_id): return True (hrn, _) = urn_to_hrn(xrn) slicename = hrn_to_pl_slicename(hrn) @@ -250,7 +253,8 @@ class AggregateManager: # XX not implemented at this interface return 1 - def DeleteSliver(self, api, xrn, creds, call_id): + def DeleteSliver(self, api, xrn, creds, options={}): + call_id = options.get('call_id') if Callids().already_handled(call_id): return "" (hrn, _) = urn_to_hrn(xrn) slicename = hrn_to_pl_slicename(hrn) @@ -270,7 +274,8 @@ class AggregateManager: api.driver.BindObjectToPeer('slice', slice['slice_id'], peer, slice['peer_slice_id']) return 1 - def ListSlices(self, api, creds, call_id): + def ListSlices(self, api, creds, options={}): + call_id = options.get('call_id') if Callids().already_handled(call_id): return [] # look in cache first if self.caching and api.cache: @@ -289,23 +294,25 @@ class AggregateManager: return slice_urns - def ListResources(self, api, creds, options, call_id): + def ListResources(self, api, creds, options={}): + call_id = options.get('call_id') if Callids().already_handled(call_id): return "" # get slice's hrn from options xrn = options.get('geni_slice_urn', None) + cached = options.get('cached', True) (hrn, _) = urn_to_hrn(xrn) version_manager = VersionManager() # get the rspec's return format from options - rspec_version = version_manager.get_version(options.get('rspec_version')) - version_string = "rspec_%s" % (rspec_version.to_string()) + rspec_version = version_manager.get_version(options.get('geni_rspec_version')) + version_string = "rspec_%s" % (rspec_version) #panos adding the info option to the caching key (can be improved) if options.get('info'): version_string = version_string + "_"+options.get('info', 'default') # look in cache first - if self.caching and api.cache and not xrn: + if self.caching and api.cache and not xrn and cached: rspec = api.cache.get(version_string) if rspec: api.logger.info("aggregate.ListResources: returning cached value for hrn %s"%hrn) @@ -313,8 +320,8 @@ class AggregateManager: #panos: passing user-defined options #print "manager options = ",options - aggregate = Aggregate(api, options) - rspec = aggregate.get_rspec(slice_xrn=xrn, version=rspec_version) + aggregate = Aggregate(api) + rspec = aggregate.get_rspec(slice_xrn=xrn, version=rspec_version, options=options) # cache the result if self.caching and api.cache and not xrn: @@ -323,7 +330,7 @@ class AggregateManager: return rspec - def get_ticket(self, api, xrn, creds, rspec, users): + def GetTicket(self, api, xrn, creds, rspec, users, options={}): (slice_hrn, _) = urn_to_hrn(xrn) slices = Slices(api) @@ -341,7 +348,7 @@ class AggregateManager: for tmp_record in records: if tmp_record['type'] == 'slice' and \ not tmp_record['peer_authority']: - #Error (E0602, get_ticket): Undefined variable 'SliceRecord' + #Error (E0602, GetTicket): Undefined variable 'SliceRecord' record = SliceRecord(dict=tmp_record) if not record: raise RecordNotFound(slice_hrn)