- threads.run(_RenewSliver, server, xrn, [cred], expiration_time, call_id)
- # 'and' the results
- return reduce (lambda x,y: x and y, threads.get_results() , True)
-
- def DeleteSliver(self, api, xrn, creds, call_id):
- def _DeleteSliver(server, xrn, creds, call_id):
- server_version = api.get_cached_server_version(server)
- args = [xrn, creds]
- if self._call_id_supported(api, server):
- args.append(call_id)
- return server.DeleteSliver(*args)
-
- if Callids().already_handled(call_id): return ""
- (hrn, type) = urn_to_hrn(xrn)
+ # Just send entire RSpec to each aggregate
+ multiclient.run(_Provision, aggregate,
+ server, xrn, [cred], options)
+
+ results = multiclient.get_results()
+ manifest_version = version_manager._get_version(
+ 'GENI', '3', 'manifest')
+ result_rspec = RSpec(version=manifest_version)
+ geni_slivers = []
+ geni_urn = None
+ for result in results:
+ self.add_slicemgr_stat(result_rspec, "Provision", result["aggregate"], result["elapsed"],
+ result["status"], result.get("exc_info", None))
+ if result["status"] == "success":
+ try:
+ res = result['result']['value']
+ geni_urn = res['geni_urn']
+ result_rspec.version.merge(
+ ReturnValue.get_value(res['geni_rspec']))
+ geni_slivers.extend(res['geni_slivers'])
+ except:
+ api.logger.log_exc(
+ "SM.Provision: Failed to merge aggregate rspec")
+ return {
+ 'geni_urn': geni_urn,
+ 'geni_rspec': result_rspec.toxml(),
+ 'geni_slivers': geni_slivers
+ }
+
+ def Renew(self, api, xrn, creds, expiration_time, options):
+ call_id = options.get('call_id')
+ if Callids().already_handled(call_id):
+ return True
+
+ def _Renew(aggregate, server, xrn, creds, expiration_time, options):
+ try:
+ result = server.Renew(xrn, creds, expiration_time, options)
+ if type(result) != dict:
+ result = {'code': {'geni_code': 0}, 'value': result}
+ result['aggregate'] = aggregate
+ return result
+ except:
+ 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': ""}
+