action="store_true", dest="version_local", default=False,
help="display version of the local client")
- if canonical in ("version", "trusted"):
+ if canonical in ("version", "trusted", "introspect"):
parser.add_option("-R","--registry_interface",
action="store_true", dest="registry_interface", default=False,
help="target the registry interface instead of slice interface")
api_options['cached'] = False
else:
api_options['cached'] = True
- if options.rspec_version:
- version_manager = VersionManager()
- server_version = self.get_cached_server_version(server)
- if 'sfa' in server_version:
- # just request the version the client wants
- api_options['geni_rspec_version'] = version_manager.get_version(options.rspec_version).to_dict()
- else:
- api_options['geni_rspec_version'] = {'type': options.rspec_version}
- else:
- api_options['geni_rspec_version'] = {'type': 'geni', 'version': '3'}
+ version_manager = VersionManager()
+ api_options['geni_rspec_version'] = version_manager.get_version(options.rspec_version).to_dict()
list_resources = server.ListResources (creds, api_options)
value = ReturnValue.get_value(list_resources)
for auth_hrn in my_auths:
hrn_credentials.append ( (auth_hrn, 'auth', self.authority_credential_string(auth_hrn),) )
for slice_hrn in my_slices:
- hrn_credentials.append ( (slice_hrn, 'slice', self.slice_credential_string (slice_hrn),) )
+ try:
+ hrn_credentials.append ( (slice_hrn, 'slice', self.slice_credential_string (slice_hrn),) )
+ except:
+ print("WARNING: could not get slice credential for slice {}"
+ .format(slice_hrn))
# (e) check for the delegated version of these
# xxx todo add an option -a/-A? like for 'sfi delegate' for when we ever
print("Certificate:\n{}\n\n".format(trusted_cert))
# xxx should analyze result
return 0
+
+ @declare_command("", "")
+ def introspect(self, options, args):
+ """
+ If remote server supports XML-RPC instrospection API, allows
+ to list supported methods
+ """
+ if options.registry_interface:
+ server = self.registry()
+ else:
+ server = self.sliceapi()
+ results = server.serverproxy.system.listMethods()
+ # at first sight a list here means it's fine,
+ # and a dict suggests an error (no support for introspection?)
+ if isinstance(results, list):
+ results = [ name for name in results if 'system.' not in name ]
+ results.sort()
+ print("== methods supported at {}".format(server.url))
+ if 'Discover' in results:
+ print("== has support for 'Discover' - most likely a v3")
+ else:
+ print("== has no support for 'Discover' - most likely a v2")
+ for name in results:
+ print(name)
+ else:
+ print("Got return of type {}, expected a list".format(type(results)))
+ print("This suggests the remote end does not support introspection")
+ print(results)