try:
version = api.get_cached_server_version(server)
# force ProtoGENI aggregates to give us a v2 RSpec
- if 'sfa' in version.keys():
- forward_options['rspec_version'] = version_manager.get_version('SFA 1').to_dict()
- else:
- forward_options['rspec_version'] = version_manager.get_version('GENI 3').to_dict()
- forward_options['geni_rspec_version'] = {'type': 'geni', 'version': '3.0'}
- rspec = server.ListResources(credential, forward_options)
- return {"aggregate": aggregate, "rspec": rspec, "elapsed": time.time()-tStart, "status": "success"}
+ forward_options['geni_rspec_version'] = options.get('geni_rspec_version')
+ result = server.ListResources(credential, forward_options)
+ return {"aggregate": aggregate, "result": result, "elapsed": time.time()-tStart, "status": "success"}
except Exception, e:
api.logger.log_exc("ListResources failed at %s" %(server.url))
return {"aggregate": aggregate, "elapsed": time.time()-tStart, "status": "exception", "exc_info": sys.exc_info()}
self.add_slicemgr_stat(rspec, "ListResources", result["aggregate"], result["elapsed"],
result["status"], result.get("exc_info",None))
if result["status"]=="success":
+ res = result['result']['value']
try:
- rspec.version.merge(ReturnValue.get_value(result["rspec"]))
+ rspec.version.merge(ReturnValue.get_value(res))
except:
api.logger.log_exc("SM.ListResources: Failed to merge aggregate rspec")
result['aggregate'] = aggregate
return result
except:
- logger.log_exc('Something wrong in _RenewSliver with URL %s'%server.url)
+ logger.log_exc('Something wrong in _Renew with URL %s'%server.url)
return {'aggregate': aggregate, 'exc_info': traceback.format_exc(),
'code': {'geni_code': -1},
'value': False, 'output': ""}
continue
interface = api.aggregates[aggregate]
server = api.server_proxy(interface, cred)
- threads.run(_RenewSliver, aggregate, server, xrn, [cred], expiration_time, options)
+ threads.run(_Renew, aggregate, server, xrn, [cred], expiration_time, options)
results = threads.get_results()
def _Delete(server, xrn, creds, options):
return server.Delete(xrn, creds, options)
- (hrn, type) = urn_to_hrn(xrn)
+ (hrn, type) = urn_to_hrn(xrn[0])
# get the callers hrn
valid_cred = api.auth.checkCredentials(creds, 'deletesliver', hrn)[0]
caller_hrn = Credential(cred=valid_cred).get_gid_caller().get_hrn()
continue
interface = api.aggregates[aggregate]
server = api.server_proxy(interface, cred)
- threads.run(_DeleteSliver, server, xrn, [cred], options)
+ threads.run(_Delete, server, xrn, [cred], options)
threads.get_results()
return 1
for result in results:
try:
geni_urn = result['geni_urn']
- geni_slivers.extend(result['result']['geni_slivers'])
+ geni_slivers.extend(result['geni_slivers'])
except:
api.logger.log_exc("SM.Provision: Failed to merge aggregate rspec")
return {
}
- def Describe(self, api, xrns, creds, options):
+ def Describe(self, api, creds, xrns, options):
def _Describe(server, xrn, creds, options):
return server.Describe(xrn, creds, options)
for aggregate in api.aggregates:
interface = api.aggregates[aggregate]
server = api.server_proxy(interface, cred)
- threads.run (_Describe, server, slice_xrn, [cred], options)
+ threads.run (_Describe, server, xrns, [cred], options)
results = [ReturnValue.get_value(result) for result in threads.get_results()]
# get rid of any void result - e.g. when call_id was hit, where by convention we return {}
if not results : return {}
# otherwise let's merge stuff
+ version_manager = VersionManager()
manifest_version = version_manager._get_version('GENI', '3', 'manifest')
result_rspec = RSpec(version=manifest_version)
geni_slivers = []
for result in results:
try:
geni_urn = result['geni_urn']
- result_rspec.version.merge(ReturnValue.get_value(result['result']['geni_rspec']))
- geni_slivers.extend(result['result']['geni_slivers'])
+ result_rspec.version.merge(ReturnValue.get_value(result['geni_rspec']))
+ geni_slivers.extend(result['geni_slivers'])
except:
api.logger.log_exc("SM.Provision: Failed to merge aggregate rspec")
return {
'geni_slivers': geni_slivers
}
- def ListSlices(self, api, creds, options):
- call_id = options.get('call_id')
- if Callids().already_handled(call_id): return []
-
- def _ListSlices(server, creds, options):
- return server.ListSlices(creds, options)
-
- # look in cache first
- # xxx is this really frequent enough that it is worth being cached ?
- if self.cache:
- slices = self.cache.get('slices')
- if slices:
- api.logger.debug("SliceManager.ListSlices returns from cache")
- return slices
-
- # get the callers hrn
- valid_cred = api.auth.checkCredentials(creds, 'listslices', None)[0]
- caller_hrn = Credential(cred=valid_cred).get_gid_caller().get_hrn()
-
- # attempt to use delegated credential first
- cred= api.getDelegatedCredential(creds)
- if not cred:
- cred = api.getCredential()
- threads = ThreadManager()
- # fetch from aggregates
- for aggregate in api.aggregates:
- # prevent infinite loop. Dont send request back to caller
- # unless the caller is the aggregate's SM
- if caller_hrn == aggregate and aggregate != api.hrn:
- continue
- interface = api.aggregates[aggregate]
- server = api.server_proxy(interface, cred)
- threads.run(_ListSlices, server, [cred], options)
-
- # combime results
- results = [ReturnValue.get_value(result) for result in threads.get_results()]
- slices = []
- for result in results:
- slices.extend(result)
-
- # cache the result
- if self.cache:
- api.logger.debug("SliceManager.ListSlices caches value")
- self.cache.add('slices', slices)
-
- return slices
-
def GetTicket(self, api, xrn, creds, rspec, users, options):
slice_hrn, type = urn_to_hrn(xrn)
ticket.sign()
return ticket.save_to_string(save_parents=True)
- def start_slice(self, api, xrn, creds):
- hrn, type = urn_to_hrn(xrn)
-
+ def PerformOperationalAction(self, api, xrn, creds, action, options):
# get the callers hrn
- valid_cred = api.auth.checkCredentials(creds, 'startslice', hrn)[0]
+ valid_cred = api.auth.checkCredentials(creds, 'createsliver', xrn)[0]
caller_hrn = Credential(cred=valid_cred).get_gid_caller().get_hrn()
# attempt to use delegated credential first
continue
interface = api.aggregates[aggregate]
server = api.server_proxy(interface, cred)
- threads.run(server.Start, xrn, cred)
+ threads.run(server.PerformOperationalAction, xrn, cred, action, options)
threads.get_results()
return 1