default="all")
# display formats
if command in ("resources"):
- parser.add_option("-r", "--rspec-version", dest="rspec_version", default="sfa 1",
+ 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"))
+ #panos: a new option to define the type of information about resources a user is interested in
+ parser.add_option("-i", "--info", dest="info",
+ help="optional component information", default=None)
+
if command in ("resources", "show", "list"):
parser.add_option("-o", "--output", dest="file",
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')}
+ call_options = {'geni_slice_urn': hrn_to_urn(hrn, 'slice')}
else:
cred = user_cred
hrn = None
creds.append(delegated_cred)
if opts.rspec_version:
call_options['rspec_version'] = opts.rspec_version
+ #panos add info options
+ if opts.info:
+ call_options['info'] = opts.info
result = server.ListResources(creds, call_options,unique_call_id())
format = opts.format
if opts.file is None:
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)
+ version = server.GetVersion()
+ if 'sfa' not in version:
+ # need to pass along user keys if this request is going to a ProtoGENI aggregate
+ # ProtoGeni Aggregates will only install the keys of the user that is issuing the
+ # request. So we will only pass in one user that contains the keys for all
+ # users of the slice
+ user = {'urn': user_cred.get_gid_caller().get_urn(),
+ 'keys': []}
+ slice_record = self.registry.Resolve(slice_urn, creds)
+ if slice_record and 'researchers' in slice_record:
+ user_hrns = slice_record['researchers']
+ user_urns = [hrn_to_urn(hrn, 'user') for hrn in user_hrns]
+ user_records = self.registry.Resolve(user_urns, creds)
+ for user_record in user_records:
+ if 'keys' in user_record:
+ user['keys'].extend(user_record['keys'])
+ users.append(user)
result = server.CreateSliver(slice_urn, creds, rspec, users, unique_call_id())
print result
return result