from sfa.util.sfaticket import SfaTicket
from sfa.util.record import SfaRecord, UserRecord, SliceRecord, NodeRecord, AuthorityRecord
from sfa.util.xrn import Xrn, get_leaf, get_authority, hrn_to_urn
-from sfa.util.xmlrpcprotocol import ServerException
import sfa.util.xmlrpcprotocol as xmlrpcprotocol
from sfa.util.config import Config
from sfa.util.version import version_core
return record
+import uuid
+def unique_call_id(): return uuid.uuid4().urn
class Sfi:
default="all")
# display formats
if command in ("resources"):
+ parser.add_option("-r", "--rspec-version", dest="rspec_version", default="sfa 1",
+ help="schema type and version of resulting RSpec")
parser.add_option("-f", "--format", dest="format", type="choice",
help="display format ([xml]|dns|ip)", default="xml",
choices=("xml", "dns", "ip"))
help="delegate slice credential", metavar="HRN", default=None)
if command in ("version"):
+ parser.add_option("-a", "--aggregate", dest="aggregate",
+ default=None, help="aggregate host")
+ parser.add_option("-p", "--port", dest="port",
+ default=AGGREGATE_PORT, help="aggregate port")
parser.add_option("-R","--registry-version",
action="store_true", dest="version_registry", default=False,
help="probe registry version instead of slicemgr")
if (os.path.isfile(file)):
return file
else:
- self.logger.critical("No such rspec file"%rspec)
+ self.logger.critical("No such rspec file %s"%rspec)
sys.exit(1)
def get_record_file(self, record):
elif record['type'] in ["slice"]:
try:
cred = self.get_slice_cred(record.get_name()).save_to_string(save_parents=True)
- except ServerException, e:
+ except xmlrpcprotocol.ServerException, e:
# XXX smbaker -- once we have better error return codes, update this
# to do something better than a string compare
if "Permission error" in e.args[0]:
else:
server = self.get_server_from_opts(opts)
version=server.GetVersion()
- for (k,v) in version.items():
+ for (k,v) in version.iteritems():
print "%-20s: %s"%(k,v)
# list instantiated slices
delegated_cred = self.delegate_cred(user_cred, get_authority(self.authority))
creds.append(delegated_cred)
server = self.get_server_from_opts(opts)
+ #results = server.ListSlices(creds, unique_call_id())
results = server.ListSlices(creds)
display_list(results)
return
creds = [cred]
if opts.delegate:
delegated_cred = self.delegate_cred(cred, get_authority(self.authority))
- creds.append(delegated_cred)
- result = server.ListResources(creds, call_options)
+ creds.append(delegated_cred)
+ if opts.rspec_version:
+ call_options['rspec_version'] = opts.rspec_version
+ result = server.ListResources(creds, call_options,unique_call_id())
format = opts.format
if opts.file is None:
display_rspec(result, format)
creds.append(delegated_cred)
rspec_file = self.get_rspec_file(args[1])
rspec = open(rspec_file).read()
+
+ # TODO: need to determine if this request is going to a ProtoGENI aggregate. If so
+ # we need to obtain the keys for all users in the slice
+ # e.g.
+ # users = [
+ # { urn: urn:publicid:IDN+emulab.net+user+alice
+ # keys: [<ssh key A>, <ssh key B>]
+ # }]
+ users = []
server = self.get_server_from_opts(opts)
- result = server.CreateSliver(slice_urn, creds, rspec, [])
+ result = server.CreateSliver(slice_urn, creds, rspec, users, unique_call_id())
print result
return result
delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority))
creds.append(delegated_cred)
server = self.get_server_from_opts(opts)
- return server.DeleteSliver(slice_urn, creds)
+ return server.DeleteSliver(slice_urn, creds, unique_call_id())
# start named slice
def start(self, opts, args):
delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority))
creds.append(delegated_cred)
time = args[1]
- return server.RenewSliver(slice_urn, creds, time)
+ return server.RenewSliver(slice_urn, creds, time, unique_call_id())
def status(self, opts, args):
delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority))
creds.append(delegated_cred)
server = self.get_server_from_opts(opts)
- print server.SliverStatus(slice_urn, creds)
+ print server.SliverStatus(slice_urn, creds, unique_call_id())
def shutdown(self, opts, args):