From f8934f852d6f200f10c0c07ee98ef5730f67b886 Mon Sep 17 00:00:00 2001 From: Mohamed Larabi Date: Fri, 3 May 2013 16:22:37 +0200 Subject: [PATCH] clean up --- sfa/client/sfi.py | 126 +++------------------------------- sfa/managers/slice_manager.py | 67 ------------------ 2 files changed, 11 insertions(+), 182 deletions(-) diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index d2eecac7..3e632b41 100644 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -271,8 +271,6 @@ class Sfi: ("status", "slice_hrn"), ("renew", "slice_hrn time"), ("shutdown", "slice_hrn"), - ("get_ticket", "slice_hrn rspec"), - ("redeem_ticket", "ticket"), ("delegate", "to_hrn"), ("gid", "[name]"), ("trusted", "cred"), @@ -333,7 +331,7 @@ class Sfi: # user specifies remote aggregate/sm/component if command in ("resources", "describe", "allocate", "provision", "delete", "allocate", "provision", - "action", "shutdown", "get_ticket", "renew", "status"): + "action", "shutdown", "renew", "status"): parser.add_option("-d", "--delegate", dest="delegate", default=None, action="store_true", help="Include a credential delegated to the user's root"+\ @@ -1001,8 +999,7 @@ or version information about sfi itself # show rspec for named slice def resources(self, options, args): """ - discover available resources -or with an slice hrn, shows currently provisioned resources + discover available resources (ListResources) """ server = self.sliceapi() @@ -1052,7 +1049,7 @@ or with an slice hrn, shows currently provisioned resources def describe(self, options, args): """ - Shows currently provisioned resources. + shows currently allocated/provisioned resources of the named slice or set of slivers (Describe) """ server = self.sliceapi() @@ -1091,7 +1088,7 @@ or with an slice hrn, shows currently provisioned resources def delete(self, options, args): """ - delete named slice (DeleteSliver) + de-allocate and de-provision all or named slivers of the slice (Delete) """ server = self.sliceapi() @@ -1117,6 +1114,9 @@ or with an slice hrn, shows currently provisioned resources return value def allocate(self, options, args): + """ + allocate resources to the named slice (Allocate) + """ server = self.sliceapi() server_version = self.get_cached_server_version(server) slice_hrn = args[0] @@ -1156,6 +1156,9 @@ or with an slice hrn, shows currently provisioned resources def provision(self, options, args): + """ + provision already allocated resources of named slice (Provision) + """ server = self.sliceapi() server_version = self.get_cached_server_version(server) slice_hrn = args[0] @@ -1212,7 +1215,7 @@ or with an slice hrn, shows currently provisioned resources def status(self, options, args): """ - retrieve slice status (SliverStatus) + retrieve the status of the slivers belonging to tne named slice (Status) """ server = self.sliceapi() @@ -1236,47 +1239,6 @@ or with an slice hrn, shows currently provisioned resources else: print value - def start(self, options, args): - """ - start named slice (Start) - """ - server = self.sliceapi() - - # the slice urn - slice_hrn = args[0] - slice_urn = hrn_to_urn(slice_hrn, 'slice') - - # cred - slice_cred = self.slice_credential_string(args[0]) - creds = [slice_cred] - # xxx Thierry - does this not need an api_options as well ? - result = server.Start(slice_urn, creds) - value = ReturnValue.get_value(result) - if self.options.raw: - save_raw_to_file(result, self.options.raw, self.options.rawformat, self.options.rawbanner) - else: - print value - return value - - def stop(self, options, args): - """ - stop named slice (Stop) - """ - server = self.sliceapi() - # slice urn - slice_hrn = args[0] - slice_urn = hrn_to_urn(slice_hrn, 'slice') - # cred - slice_cred = self.slice_credential_string(args[0]) - creds = [slice_cred] - result = server.Stop(slice_urn, creds) - value = ReturnValue.get_value(result) - if self.options.raw: - save_raw_to_file(result, self.options.raw, self.options.rawformat, self.options.rawbanner) - else: - print value - return value - # reset named slice def action(self, options, args): """ @@ -1352,72 +1314,6 @@ or with an slice hrn, shows currently provisioned resources return value - def get_ticket(self, options, args): - """ - get a ticket for the specified slice - """ - server = self.sliceapi() - # slice urn - slice_hrn, rspec_path = args[0], args[1] - slice_urn = hrn_to_urn(slice_hrn, 'slice') - # creds - slice_cred = self.slice_credential_string(slice_hrn) - creds = [slice_cred] - # rspec - rspec_file = self.get_rspec_file(rspec_path) - rspec = open(rspec_file).read() - # options and call_id when supported - api_options = {} - api_options['call_id']=unique_call_id() - # get ticket at the server - ticket_string = server.GetTicket(slice_urn, creds, rspec, *self.ois(server,api_options)) - # save - file = os.path.join(self.options.sfi_dir, get_leaf(slice_hrn) + ".ticket") - self.logger.info("writing ticket to %s"%file) - ticket = SfaTicket(string=ticket_string) - ticket.save_to_file(filename=file, save_parents=True) - - def redeem_ticket(self, options, args): - """ - Connects to nodes in a slice and redeems a ticket -(slice hrn is retrieved from the ticket) - """ - ticket_file = args[0] - - # get slice hrn from the ticket - # use this to get the right slice credential - ticket = SfaTicket(filename=ticket_file) - ticket.decode() - ticket_string = ticket.save_to_string(save_parents=True) - - slice_hrn = ticket.gidObject.get_hrn() - slice_urn = hrn_to_urn(slice_hrn, 'slice') - #slice_hrn = ticket.attributes['slivers'][0]['hrn'] - slice_cred = self.slice_credential_string(slice_hrn) - - # get a list of node hostnames from the RSpec - tree = etree.parse(StringIO(ticket.rspec)) - root = tree.getroot() - hostnames = root.xpath("./network/site/node/hostname/text()") - - # create an xmlrpc connection to the component manager at each of these - # components and gall redeem_ticket - connections = {} - for hostname in hostnames: - try: - self.logger.info("Calling redeem_ticket at %(hostname)s " % locals()) - cm_url="http://%s:%s/"%(hostname,CM_PORT) - server = SfaServerProxy(cm_url, self.private_key, self.my_gid) - server = self.server_proxy(hostname, CM_PORT, self.private_key, - timeout=self.options.timeout, verbose=self.options.debug) - server.RedeemTicket(ticket_string, slice_cred) - self.logger.info("Success") - except socket.gaierror: - self.logger.error("redeem_ticket failed on %s: Component Manager not accepting requests"%hostname) - except Exception, e: - self.logger.log_exc(e.message) - return - def gid(self, options, args): """ Create a GID (CreateGid) diff --git a/sfa/managers/slice_manager.py b/sfa/managers/slice_manager.py index 952bfadd..f8dfbea6 100644 --- a/sfa/managers/slice_manager.py +++ b/sfa/managers/slice_manager.py @@ -483,73 +483,6 @@ class SliceManager: 'geni_rspec': result_rspec.toxml(), 'geni_slivers': geni_slivers } - - - 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 = {} - tree= etree.parse(StringIO(rspec)) - elements = tree.findall('./network') - for element in elements: - aggregate_hrn = element.values()[0] - aggregate_rspecs[aggregate_hrn] = rspec - - # get the callers hrn - valid_cred = api.auth.checkCredentials(creds, 'getticket', slice_hrn)[0] - caller_hrn = Credential(cred=valid_cred).get_gid_caller().get_hrn() - - # attempt to use delegated credential first - cred = api.getDelegatedCredential(creds) - if not cred: - cred = api.getCredential() - threads = ThreadManager() - for (aggregate, aggregate_rspec) in aggregate_rspecs.iteritems(): - # xxx sounds like using call_id here would be safer - # prevent infinite loop. Dont send request back to caller - # unless the caller is the aggregate's SM - if caller_hrn == aggregate and aggregate != api.hrn: - continue - - interface = api.aggregates[aggregate] - server = api.server_proxy(interface, cred) - threads.run(server.GetTicket, xrn, [cred], aggregate_rspec, users, options) - - results = threads.get_results() - - # gather information from each ticket - rspec = None - initscripts = [] - slivers = [] - object_gid = None - for result in results: - agg_ticket = SfaTicket(string=result) - attrs = agg_ticket.get_attributes() - if not object_gid: - object_gid = agg_ticket.get_gid_object() - if not rspec: - rspec = RSpec(agg_ticket.get_rspec()) - else: - rspec.version.merge(agg_ticket.get_rspec()) - initscripts.extend(attrs.get('initscripts', [])) - slivers.extend(attrs.get('slivers', [])) - - # merge info - attributes = {'initscripts': initscripts, - 'slivers': slivers} - - # create a new ticket - ticket = SfaTicket(subject = slice_hrn) - ticket.set_gid_caller(api.auth.client_gid) - ticket.set_issuer(key=api.key, subject=api.hrn) - ticket.set_gid_object(object_gid) - ticket.set_pubkey(object_gid.get_pubkey()) - #new_ticket.set_parent(api.auth.hierarchy.get_auth_ticket(auth_hrn)) - ticket.set_attributes(attributes) - ticket.set_rspec(rspec.toxml()) - ticket.encode() - ticket.sign() - return ticket.save_to_string(save_parents=True) def PerformOperationalAction(self, api, xrn, creds, action, options): # get the callers hrn -- 2.47.0