return version
- def server_supports_call_id_arg(self, server):
+ def server_supports_options_arg(self, server):
"""
Returns true if server support the optional call_id arg, false otherwise.
"""
version_parts = code_tag_parts[0].split(".")
major, minor = version_parts[0], version_parts[1]
rev = code_tag_parts[1]
- if int(major) > 1:
- if int(minor) > 0 or int(rev) > 20:
+ if int(major) >= 1:
+ if int(minor) >= 2:
return True
return False
-
+
#
# Get various credential and spec files
#
delegated_cred = self.delegate_cred(user_cred, get_authority(self.authority))
creds.append(delegated_cred)
server = self.server_proxy_from_opts(opts)
- #results = server.ListSlices(creds, unique_call_id())
- results = server.ListSlices(creds)
+ call_args = [creds]
+ if self.server_supports_options_arg(server):
+ options = {'call_id': unique_call_id()}
+ call_args.append(options)
+ results = server.ListSlices(*call_args)
display_list(results)
return
def resources(self, opts, args):
user_cred = self.get_user_cred().save_to_string(save_parents=True)
server = self.slicemgr
- call_options = {}
server = self.server_proxy_from_opts(opts)
if args:
cred = self.get_slice_cred(args[0]).save_to_string(save_parents=True)
hrn = args[0]
- call_options = {'geni_slice_urn': hrn_to_urn(hrn, 'slice')}
+ options = {'geni_slice_urn': hrn_to_urn(hrn, 'slice')}
else:
cred = user_cred
hrn = None
server_version = self.get_cached_server_version(server)
if 'sfa' in server_version:
# just request the version the client wants
- call_options['rspec_version'] = version_manager.get_version(opts.rspec_version).to_dict()
+ options['rspec_version'] = version_manager.get_version(opts.rspec_version).to_dict()
else:
# this must be a protogeni aggregate. We should request a v2 ad rspec
# regardless of what the client user requested
- call_options['rspec_version'] = version_manager.get_version('ProtoGENI 2').to_dict()
+ options['rspec_version'] = version_manager.get_version('ProtoGENI 2').to_dict()
#panos add info options
if opts.info:
- call_options['info'] = opts.info
+ options['info'] = opts.info
- call_args = [creds, call_options]
- if self.server_supports_call_id_arg(server):
- call_args.append(unique_call_id())
+ call_args = [creds]
+ if self.server_supports_options_arg(server):
+ options = {'call_id': unique_call_id()}
+ call_args.append(options)
result = server.ListResources(*call_args)
if opts.file is None:
display_rspec(result, opts.format)
if delegated_cred:
creds.append(delegated_cred)
call_args = [slice_urn, creds, rspec, users]
- if self.server_supports_call_id_arg(server):
- call_args.append(unique_call_id())
-
+ if self.server_supports_options_arg(server):
+ options = {'call_id': unique_call_id()}
+ call_args.append(options)
result = server.CreateSliver(*call_args)
if opts.file is None:
print result
delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority))
creds.append(delegated_cred)
server = self.server_proxy_from_opts(opts)
-
call_args = [slice_urn, creds]
- if self.server_supports_call_id_arg(server):
- call_args.append(unique_call_id())
+ if self.server_supports_options_arg(server):
+ options = {'call_id': unique_call_id()}
+ call_args.append(options)
return server.DeleteSliver(*call_args)
# start named slice
time = args[1]
call_args = [slice_urn, creds, time]
- if self.server_supports_call_id_arg(server):
- call_args.append(unique_call_id())
+ if self.server_supports_options_arg(server):
+ options = {'call_id': unique_call_id()}
+ call_args.append(options)
return server.RenewSliver(*call_args)
creds.append(delegated_cred)
server = self.server_proxy_from_opts(opts)
call_args = [slice_urn, creds]
- if self.server_supports_call_id_arg(server):
- call_args.append(unique_call_id())
+ if self.server_supports_options_arg(server):
+ options = {'call_id': unique_call_id()}
+ call_args.append(options)
result = server.SliverStatus(*call_args)
print result
if opts.file:
#self.caching=True
self.caching=False
- def GetVersion(self, api):
+ def GetVersion(self, api, options={}):
version_manager = VersionManager()
ad_rspec_versions = []
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)
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)
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)
# 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 = option.get('call_id')
if Callids().already_handled(call_id): return ""
(hrn, _) = urn_to_hrn(xrn)
slicename = hrn_to_pl_slicename(hrn)
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 = option.get('call_id')
if Callids().already_handled(call_id): return []
# look in cache first
if self.caching and api.cache:
return slice_urns
- def ListResources(self, api, creds, options, call_id):
+ def ListResources(self, api, creds, options={}):
+ call_id = option.get('call_id')
if Callids().already_handled(call_id): return ""
# get slice's hrn from options
xrn = options.get('geni_slice_urn', None)
return rspec
- def GetTicket(self, api, xrn, creds, rspec, users):
+ def GetTicket(self, api, xrn, creds, rspec, users, options={}):
(slice_hrn, _) = urn_to_hrn(xrn)
slices = Slices(api)
port=eucaPort,
path=srvPath)
- def ListResources(api, creds, options, call_id):
+ def ListResources(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', '')
"""
Hook called via 'sfi.py create'
"""
- def CreateSliver(api, slice_xrn, creds, xml, users, call_id):
+ def CreateSliver(api, slice_xrn, creds, xml, users, options={}):
+ call_id = options.get('call_id')
if Callids().already_handled(call_id): return ""
logger = logging.getLogger('EucaAggregate')
f.write("%s %s %s\n" % (instId, ipaddr, hrn))
f.close()
- def GetVersion(api):
+ def GetVersion(api, options={}):
version_manager = VersionManager()
ad_rspec_versions = []
### GENI AM API Methods
- 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 {}
return self.slice_status(api, slice_xrn, creds)
- def CreateSliver(self, api, slice_xrn, creds, rspec_string, users, call_id):
+ def CreateSliver(self, api, slice_xrn, creds, rspec_string, users, options={}):
+ call_id = options.get('call_id')
if Callids().already_handled(call_id): return ""
#TODO: create real CreateSliver response rspec
ret = self.create_slice(api, slice_xrn, creds, rspec_string, users)
else:
return "<?xml version=\"1.0\" ?> <RSpec type=\"SFA\"> Error! </RSpec>"
- 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 ""
return self.delete_slice(api, xrn, creds)
# no caching
- 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 ""
# version_string = "rspec_%s" % (rspec_version.get_version_name())
slice_urn = options.get('geni_slice_urn')
self.caching=True
- def _call_id_supported(self, api, server):
+ def _options_supported(self, api, server):
"""
Returns true if server support the optional call_id arg, false otherwise.
"""
version_parts = code_tag_parts[0].split(".")
major, minor = version_parts[0:2]
rev = code_tag_parts[1]
- if int(major) > 1:
- if int(minor) > 0 or int(rev) > 20:
+ if int(major) >= 1:
+ if int(minor) >= 2:
return True
return False
logger.warning("GetVersion, falling back to xmlrpclib.ServerProxy internals")
return server._ServerProxy__host + server._ServerProxy__handler
- def GetVersion(self, api):
+ def GetVersion(self, api, options={}):
# peers explicitly in aggregates.xml
peers =dict ([ (peername,self.get_serverproxy_url(v)) for (peername,v) in api.aggregates.iteritems()
if peername != api.hrn])
except Exception, e:
logger.warn("add_slicemgr_stat failed on %s: %s" %(aggname, str(e)))
- def ListResources(self, api, creds, options, call_id):
+ def ListResources(self, api, creds, options={}):
version_manager = VersionManager()
- def _ListResources(aggregate, server, credential, opts, call_id):
+ def _ListResources(aggregate, server, credential, opts={}):
my_opts = copy(opts)
args = [credential, my_opts]
tStart = time.time()
try:
- if self._call_id_supported(api, server):
- args.append(call_id)
version = api.get_cached_server_version(server)
# force ProtoGENI aggregates to give us a v2 RSpec
if 'sfa' not in version.keys():
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()}
-
+ call_id = options.get('call_id')
if Callids().already_handled(call_id): return ""
# get slice's hrn from options
return rspec.toxml()
- def CreateSliver(self, api, xrn, creds, rspec_str, users, call_id):
+ def CreateSliver(self, api, xrn, creds, rspec_str, users, options={}):
version_manager = VersionManager()
- def _CreateSliver(aggregate, server, xrn, credential, rspec, users, call_id):
+ def _CreateSliver(aggregate, server, xrn, credential, rspec, users, options={}):
tStart = time.time()
try:
# Need to call GetVersion at an aggregate to determine the supported
rspec = rspec.toxml()
requested_users = sfa_to_pg_users_arg(users)
args = [xrn, credential, rspec, requested_users]
- if self._call_id_supported(api, server):
- args.append(call_id)
+ if self._options_supported(api, server):
+ args.append(options)
rspec = server.CreateSliver(*args)
return {"aggregate": aggregate, "rspec": rspec, "elapsed": time.time()-tStart, "status": "success"}
except:
logger.log_exc('Something wrong in _CreateSliver with URL %s'%server.url)
return {"aggregate": aggregate, "elapsed": time.time()-tStart, "status": "exception", "exc_info": sys.exc_info()}
-
+
+ call_id = option.get('call_id')
if Callids().already_handled(call_id): return ""
# Validate the RSpec against PlanetLab's schema --disabled for now
# The schema used here needs to aggregate the PL and VINI schemas
api.logger.log_exc("SM.CreateSliver: Failed to merge aggregate rspec")
return result_rspec.toxml()
- def RenewSliver(self, api, xrn, creds, expiration_time, call_id):
- def _RenewSliver(server, xrn, creds, expiration_time, call_id):
+ def RenewSliver(self, api, xrn, creds, expiration_time, options={}):
+ def _RenewSliver(server, xrn, creds, expiration_time, options={}):
server_version = api.get_cached_server_version(server)
- args = [xrn, creds, expiration_time, call_id]
- if self._call_id_supported(api, server):
- args.append(call_id)
+ args = [xrn, creds, expiration_time]
+ if self._options_supported(api, server):
+ args.append(options)
return server.RenewSliver(*args)
+ call_id = option.get('call_id')
if Callids().already_handled(call_id): return True
(hrn, type) = urn_to_hrn(xrn)
# '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):
+ def DeleteSliver(self, api, xrn, creds, options={}):
+ def _DeleteSliver(server, xrn, creds, options={}):
server_version = api.get_cached_server_version(server)
args = [xrn, creds]
- if self._call_id_supported(api, server):
- args.append(call_id)
+ if self._options_supported(api, server):
+ args.append(options)
return server.DeleteSliver(*args)
-
+
+ call_id = option.get('call_id')
if Callids().already_handled(call_id): return ""
(hrn, type) = urn_to_hrn(xrn)
# get the callers hrn
# first draft at a merging SliverStatus
- def SliverStatus(self, api, slice_xrn, creds, call_id):
- def _SliverStatus(server, xrn, creds, call_id):
+ def SliverStatus(self, api, slice_xrn, creds, options={}):
+ def _SliverStatus(server, xrn, creds, options={}):
server_version = api.get_cached_server_version(server)
args = [xrn, creds]
- if self._call_id_supported(api, server):
- args.append(call_id)
+ if self._options_supported(api, server):
+ args.append(options)
return server.SliverStatus(*args)
-
+
+ call_id = options.get('call_id')
if Callids().already_handled(call_id): return {}
# attempt to use delegated credential first
cred = api.getDelegatedCredential(creds)
return overall
- def ListSlices(self, api, creds, call_id):
- def _ListSlices(server, creds, call_id):
+ def ListSlices(self, api, creds, options={}):
+ def _ListSlices(server, creds, options={}):
server_version = api.get_cached_server_version(server)
args = [creds]
- if self._call_id_supported(api, server):
- args.append(call_id)
+ if self._options_supported(api, server):
+ args.append(options)
return server.ListSlices(*args)
-
+
+ call_id = options.get('call_id')
if Callids().already_handled(call_id): return []
# look in cache first
continue
interface = api.aggregates[aggregate]
server = api.server_proxy(interface, cred)
- threads.run(_ListSlices, server, [cred], call_id)
+ threads.run(_ListSlices, server, [cred], call_id, options)
# combime results
results = threads.get_results()
return slices
- def GetTicket(self, api, xrn, creds, rspec, users):
+ def GetTicket(self, api, xrn, creds, rspec, users, options={}):
slice_hrn, type = urn_to_hrn(xrn)
# get the netspecs contained within the clients rspec
aggregate_rspecs = {}
interface = api.aggregates[aggregate]
server = api.server_proxy(interface, cred)
- threads.run(server.GetTicket, xrn, [cred], aggregate_rspec, users)
+ threads.run(server.GetTicket, xrn, [cred], aggregate_rspec, users, options)
results = threads.get_results()
Parameter(type([str]), "List of credentials")),
Parameter(str, "RSpec"),
Parameter(type([]), "List of user information"),
- Parameter(str, "call_id"),
+ Parameter(dict, "options"),
]
returns = Parameter(str, "Allocated RSpec")
- def call(self, slice_xrn, creds, rspec, users, call_id=""):
+ def call(self, slice_xrn, creds, rspec, users, options={}):
hrn, type = urn_to_hrn(slice_xrn)
self.api.logger.info("interface: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, hrn, self.name))
rspec = run_sfatables(chain_name, hrn, origin_hrn, rspec)
slivers = RSpec(rspec).version.get_nodes_with_slivers()
if slivers:
- result = self.api.manager.CreateSliver(self.api, slice_xrn, creds, rspec, users, call_id)
+ result = self.api.manager.CreateSliver(self.api, slice_xrn, creds, rspec, users, options)
else:
result = rspec
return result
Parameter(str, "Human readable name of slice to delete (hrn or urn)"),
Mixed(Parameter(str, "Credential string"),
Parameter(type([str]), "List of credentials")),
- Parameter(str, "call_id"),
+ Parameter(dict, "options"),
]
returns = Parameter(int, "1 if successful")
- def call(self, xrn, creds, call_id=""):
+ def call(self, xrn, creds, options={}):
(hrn, type) = urn_to_hrn(xrn)
valid_creds = self.api.auth.checkCredentials(creds, 'deletesliver', hrn)
origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn()
self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name))
- self.api.manager.DeleteSliver(self.api, xrn, creds, call_id)
+ self.api.manager.DeleteSliver(self.api, xrn, creds, options)
return 1
Mixed(Parameter(str, "Credential string"),
Parameter(type([str]), "List of credentials")),
Parameter(str, "Resource specification (rspec)"),
- Parameter(type([]), "List of user information")
+ Parameter(type([]), "List of user information"),
+ Parameter(dict, "Options")
]
returns = Parameter(str, "String representation of a ticket object")
- def call(self, xrn, creds, rspec, users):
+ def call(self, xrn, creds, rspec, users, options={}):
hrn, type = urn_to_hrn(xrn)
# Find the valid credentials
valid_creds = self.api.auth.checkCredentials(creds, 'getticket', hrn)
rspec = run_sfatables(chain_name, hrn, origin_hrn, rspec)
# remove nodes that are not available at this interface from the rspec
- return self.api.manager.GetTicket(self.api, xrn, creds, rspec, users)
+ return self.api.manager.GetTicket(self.api, xrn, creds, rspec, users, options)
@return version
"""
interfaces = ['registry','aggregate', 'slicemgr', 'component']
- accepts = []
+ accepts = [Parameter(dict, "Options")]
returns = Parameter(dict, "Version information")
- def call(self):
+ def call(self, options={}):
self.api.logger.info("interface: %s\tmethod-name: %s" % (self.api.interface, self.name))
- return self.api.manager.GetVersion(self.api)
+ return self.api.manager.GetVersion(self.api, options)
accepts = [
Mixed(Parameter(str, "Credential string"),
Parameter(type([str]), "List of credentials")),
- Parameter(dict, "Options"),
- Parameter(str, "call_id"),
+ Parameter(dict, "Options")
]
returns = Parameter(str, "List of resources")
- def call(self, creds, options, call_id=""):
+ def call(self, creds, options={}):
self.api.logger.info("interface: %s\tmethod-name: %s" % (self.api.interface, self.name))
# get slice's hrn from options
origin_hrn = options.get('origin_hrn', None)
if not origin_hrn:
origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn()
- rspec = self.api.manager.ListResources(self.api, creds, options, call_id)
+ rspec = self.api.manager.ListResources(self.api, creds, options, options)
# filter rspec through sfatables
if self.api.interface in ['aggregate']:
accepts = [
Mixed(Parameter(str, "Credential string"),
Parameter(type([str]), "List of credentials")),
- Parameter(str, "call_id"),
+ Parameter(dict, "options"),
]
returns = Parameter(list, "List of slice names")
- def call(self, creds, call_id=""):
+ def call(self, creds, options={}):
valid_creds = self.api.auth.checkCredentials(creds, 'listslices')
#log the call
origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn()
self.api.logger.info("interface: %s\tcaller-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, self.name))
- return self.api.manager.ListSlices(self.api, creds, call_id)
+ return self.api.manager.ListSlices(self.api, creds, options)
Parameter(str, "Slice URN"),
Parameter(type([str]), "List of credentials"),
Parameter(str, "Expiration time in RFC 3339 format"),
- Parameter(str, "call_id"),
+ Parameter(dict, "Options"),
]
returns = Parameter(bool, "Success or Failure")
- def call(self, slice_xrn, creds, expiration_time, call_id=""):
+ def call(self, slice_xrn, creds, expiration_time, options={}):
(hrn, type) = urn_to_hrn(slice_xrn)
raise InsufficientRights('Renewsliver: Credential expires before requested expiration time')
if requested_time > datetime.datetime.utcnow() + datetime.timedelta(days=max_renew_days):
raise Exception('Cannot renew > %s days from now' % max_renew_days)
- return self.api.manager.RenewSliver(self.api, slice_xrn, valid_creds, expiration_time, call_id)
+ return self.api.manager.RenewSliver(self.api, slice_xrn, valid_creds, expiration_time, options)
Parameter(str, "Slice URN"),
Mixed(Parameter(str, "Credential string"),
Parameter(type([str]), "List of credentials")),
- Parameter(str, "call_id"),
+ Parameter(dict, "Options")
]
returns = Parameter(dict, "Status details")
- def call(self, slice_xrn, creds, call_id=""):
+ def call(self, slice_xrn, creds, options={}):
hrn, type = urn_to_hrn(slice_xrn)
valid_creds = self.api.auth.checkCredentials(creds, 'sliverstatus', hrn)
self.api.logger.info("interface: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, hrn, self.name))
- status = self.api.manager.SliverStatus(self.api, hrn, valid_creds, call_id)
+ status = self.api.manager.SliverStatus(self.api, hrn, valid_creds, options)
return status
Parameter(type([str]), "List of credentials")),
Parameter(str, "RSpec"),
Parameter(type([]), "List of user information"),
- Parameter(str, "call_id"),
+ Parameter(dict, "options"),
]
returns = Parameter(str, "Allocated RSpec")
- def call(self, slice_xrn, creds, rspec, users, call_id=""):
+ def call(self, slice_xrn, creds, rspec, users, options={}):
- return CreateSliver.call(self, slice_xrn, creds, rspec, users, call_id)
+ return CreateSliver.call(self, slice_xrn, creds, rspec, users, options)