from sfa.util.xrn import Xrn, urn_to_hrn
from sfa.util.version import version_core
from sfa.util.callids import Callids
-
from sfa.server.threadmanager import ThreadManager
-
from sfa.rspecs.rspec_converter import RSpecConverter
from sfa.rspecs.version_manager import VersionManager
from sfa.rspecs.rspec import RSpec
from sfa.client.client_helper import sfa_to_pg_users_arg
+from sfa.client.return_value import ReturnValue
class SliceManager:
def __init__ (self):
# self.caching=False
self.caching=True
-
def _options_supported(self, api, server):
"""
Returns true if server support the optional call_id arg, false otherwise.
try:
version = api.get_cached_server_version(server)
# force ProtoGENI aggregates to give us a v2 RSpec
- if 'sfa' not in version.keys():
+ if 'sfa' in version.keys():
+ my_opts['rspec_version'] = version_manager.get_version('SFA 1').to_dict()
+ else:
my_opts['rspec_version'] = version_manager.get_version('ProtoGENI 2').to_dict()
rspec = server.ListResources(*args)
return {"aggregate": aggregate, "rspec": rspec, "elapsed": time.time()-tStart, "status": "success"}
# 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())
+ version_string = "rspec_%s" % (rspec_version)
# look in cache first
if self.caching and api.cache and not xrn:
self.add_slicemgr_stat(rspec, "ListResources", result["aggregate"], result["elapsed"], result["status"], result.get("exc_info",None))
if result["status"]=="success":
try:
- rspec.version.merge(result["rspec"])
+ rspec.version.merge(ReturnValue.get_value(result["rspec"]))
except:
api.logger.log_exc("SM.ListResources: Failed to merge aggregate rspec")
self.add_slicemgr_stat(result_rspec, "CreateSliver", result["aggregate"], result["elapsed"], result["status"], result.get("exc_info",None))
if result["status"]=="success":
try:
- result_rspec.version.merge(result["rspec"])
+ result_rspec.version.merge(ReturnValue.get_value(result["rspec"]))
except:
api.logger.log_exc("SM.CreateSliver: Failed to merge aggregate rspec")
return result_rspec.toxml()
server = api.server_proxy(interface, cred)
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)
+ results = [ReturnValue.get_value(result) for result in threads.get_results()]
+ return reduce (lambda x,y: x and y, results , True)
def DeleteSliver(self, api, xrn, creds, options={}):
def _DeleteSliver(server, xrn, creds, options={}):
interface = api.aggregates[aggregate]
server = api.server_proxy(interface, cred)
threads.run (_SliverStatus, server, slice_xrn, [cred], call_id)
- results = threads.get_results()
+ 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 {}
results = [ result for result in results if result and result['geni_resources']]
threads.run(_ListSlices, server, [cred], options)
# combime results
- results = threads.get_results()
+ results = [ReturnValue.get_value(result) for result in threads.get_results()]
slices = []
for result in results:
slices.extend(result)