def ListResources(api, creds, options, call_id): if Callids().already_handled(call_id): return "" # get slice's hrn from options xrn = options.get('geni_slice_urn', None) (hrn, type) = 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()) #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 caching and api.cache and not xrn: rspec = api.cache.get(version_string) if rspec: api.logger.info("aggregate.ListResources: returning cached value for hrn %s"%hrn) return rspec #panos: passing user-defined options #print "manager options = ",options aggregate = Aggregate(api, options) rspec = aggregate.get_rspec(slice_xrn=xrn, version=rspec_version) # cache the result if caching and api.cache and not xrn: api.cache.add(version_string, rspec) return rspec
def CreateSliver(api, slice_xrn, creds, rspec_string, users, call_id): """ Create the sliver[s] (slice) at this aggregate. Verify HRN and initialize the slice record in PLC if necessary. """ if Callids().already_handled(call_id): return "" aggregate = Aggregate(api) slices = Slices(api) (hrn, type) = urn_to_hrn(slice_xrn) peer = slices.get_peer(hrn) sfa_peer = slices.get_sfa_peer(hrn) slice_record=None if users: slice_record = users[0].get('slice_record', {}) # parse rspec rspec = RSpec(rspec_string) requested_attributes = rspec.version.get_slice_attributes() # ensure site record exists site = slices.verify_site(hrn, slice_record, peer, sfa_peer) # ensure slice record exists slice = slices.verify_slice(hrn, slice_record, peer, sfa_peer) # ensure person records exists persons = slices.verify_persons(hrn, slice, users, peer, sfa_peer) # ensure slice attributes exists 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()] slices.verify_slice_nodes(slice, requested_slivers, peer) # hanlde MyPLC peer association. # only used by plc and ple. slices.handle_peer(site, slice, persons, peer) return aggregate.get_rspec(slice_xrn=slice_xrn, version=rspec.version)