- def slicemgr (self):
- if not hasattr (self, 'slicemgr_proxy'):
- self.logger.info("Contacting Slice Manager at: %s"%self.sm_url)
- self.slicemgr_proxy = SfaServerProxy(self.sm_url, self.private_key, self.my_gid,
- timeout=self.options.timeout, verbose=self.options.debug)
- return self.slicemgr_proxy
-
- # all this c... messing with hosts and urls and other -a -c -p options sounds just plain wrong
- # couldn't we just have people select their slice API url with -s no matter what else ?
- def server_proxy(self, host, port, keyfile, certfile):
- """
- Return an instance of an xmlrpc server connection
- """
- # port is appended onto the domain, before the path. Should look like:
- # http://domain:port/path
- host_parts = host.split('/')
- host_parts[0] = host_parts[0] + ":" + str(port)
- url = "http://%s" % "/".join(host_parts)
- return SfaServerProxy(url, keyfile, certfile, timeout=self.options.timeout,
- verbose=self.options.debug)
-
- # xxx opts could be retrieved in self.options
- def server_proxy_from_opts(self, opts):
- """
- Return instance of an xmlrpc connection to a slice manager, aggregate
- or component server depending on the specified opts
- """
- # direct connection to the nodes component manager interface
- if hasattr(opts, 'component') and opts.component:
- server = self.component_proxy_from_hrn(opts.component)
- # direct connection to an aggregate
- elif hasattr(opts, 'aggregate') and opts.aggregate:
- server = self.server_proxy(opts.aggregate, opts.port, self.private_key, self.my_gid)
- else:
- server = self.slicemgr()
- return server
-
- def component_proxy_from_hrn(self, hrn):
- # direct connection to the nodes component manager interface
- records = self.registry.Resolve(hrn, self.my_credential_string)
- records = filter_records('node', records)
- if not records:
- self.logger.warning("No such component:%r"% hrn)
- record = records[0]
-
- return self.server_proxy(record['hostname'], CM_PORT, self.private_key, self.my_gid)
-
+ def sliceapi (self):
+ # cache the result
+ if not hasattr (self, 'sliceapi_proxy'):
+ # if the command exposes the --component option, figure it's hostname and connect at CM_PORT
+ if hasattr(self.command_options,'component') and self.command_options.component:
+ # resolve the hrn at the registry
+ node_hrn = self.command_options.component
+ records = self.registry().Resolve(node_hrn, self.my_credential_string)
+ records = filter_records('node', records)
+ if not records:
+ self.logger.warning("No such component:%r"% opts.component)
+ record = records[0]
+ cm_url = "http://%s:%d/"%(record['hostname'],CM_PORT)
+ self.sliceapi_proxy=SfaServerProxy(cm_url, self.private_key, self.my_gid)
+ else:
+ # otherwise use what was provided as --sliceapi, or SFI_SM in the config
+ self.logger.info("Contacting Slice Manager at: %s"%self.sm_url)
+ self.sliceapi_proxy = SfaServerProxy(self.sm_url, self.private_key, self.my_gid,
+ timeout=self.options.timeout, verbose=self.options.debug)
+ return self.sliceapi_proxy