From: Thierry Parmentelat Date: Thu, 14 Apr 2011 10:06:48 +0000 (+0200) Subject: renew_slice now renamed as RenewSliver & supports call_id X-Git-Tag: sfa-1.0-21-ckp1~74^2~7 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=2b9a50bb7afecf39c1072a8c4946c7428287b677;p=sfa.git renew_slice now renamed as RenewSliver & supports call_id --- diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 5974a03b..a6f80f6f 100755 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -958,7 +958,7 @@ class Sfi: 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): diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager_pl.py index 4b8f34db..8a39c0b5 100644 --- a/sfa/managers/aggregate_manager_pl.py +++ b/sfa/managers/aggregate_manager_pl.py @@ -209,8 +209,9 @@ def CreateSliver(api, slice_xrn, creds, rspec, users, call_id): return network.toxml() -def renew_slice(api, xrn, creds, expiration_time): - hrn, type = urn_to_hrn(xrn) +def RenewSliver(api, xrn, creds, expiration_time, call_id): + if Callids().already_handled(call_id): return True + (hrn, type) = urn_to_hrn(xrn) slicename = hrn_to_pl_slicename(hrn) slices = api.plshell.GetSlices(api.plauth, {'name': slicename}, ['slice_id']) if not slices: @@ -218,8 +219,11 @@ def renew_slice(api, xrn, creds, expiration_time): slice = slices[0] requested_time = utcparse(expiration_time) record = {'expires': int(time.mktime(requested_time.timetuple()))} - api.plshell.UpdateSlice(api.plauth, slice['slice_id'], record) - return 1 + try: + api.plshell.UpdateSlice(api.plauth, slice['slice_id'], record) + return True + except: + return False def start_slice(api, xrn, creds): hrn, type = urn_to_hrn(xrn) diff --git a/sfa/managers/aggregate_manager_vini.py b/sfa/managers/aggregate_manager_vini.py index d9614435..f4e919b1 100644 --- a/sfa/managers/aggregate_manager_vini.py +++ b/sfa/managers/aggregate_manager_vini.py @@ -26,7 +26,7 @@ from sfa.util.callids import Callids # VINI aggregate is almost identical to PLC aggregate for many operations, # so lets just import the methods form the PLC manager from sfa.managers.aggregate_manager_pl import ( -start_slice, stop_slice, renew_slice, reset_slice, get_slices, get_ticket, slice_status) +start_slice, stop_slice, RenewSliver, reset_slice, get_slices, get_ticket, slice_status) def GetVersion(api): diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py index 5bb923b9..9676fe90 100644 --- a/sfa/managers/slice_manager_pl.py +++ b/sfa/managers/slice_manager_pl.py @@ -102,9 +102,10 @@ def CreateSliver(api, xrn, creds, rspec, users, call_id): merged_rspec = merge_rspecs(results) return merged_rspec -def renew_slice(api, xrn, creds, expiration_time): - hrn, type = urn_to_hrn(xrn) +def RenewSliver(api, xrn, creds, expiration_time, call_id): + if Callids().already_handled(call_id): return True + (hrn, type) = urn_to_hrn(xrn) # get the callers hrn valid_cred = api.auth.checkCredentials(creds, 'renewsliver', hrn)[0] caller_hrn = Credential(string=valid_cred).get_gid_caller().get_hrn() @@ -121,9 +122,9 @@ def renew_slice(api, xrn, creds, expiration_time): continue server = api.aggregates[aggregate] - threads.run(server.RenewSliver, xrn, [credential], expiration_time) - threads.get_results() - return 1 + threads.run(server.RenewSliver, xrn, [credential], expiration_time, call_id) + # 'and' the results + return reduce (lambda x,y: x and y, threads.get_results() , True) def get_ticket(api, xrn, creds, rspec, users): slice_hrn, type = urn_to_hrn(xrn) diff --git a/sfa/methods/RenewSliver.py b/sfa/methods/RenewSliver.py index b574a57d..5e3e2664 100644 --- a/sfa/methods/RenewSliver.py +++ b/sfa/methods/RenewSliver.py @@ -18,15 +18,17 @@ class RenewSliver(Method): accepts = [ Parameter(str, "Slice URN"), Parameter(type([str]), "List of credentials"), - Parameter(str, "Expiration time in RFC 3339 format") + Parameter(str, "Expiration time in RFC 3339 format"), + Parameter(str, "call_id"), ] returns = Parameter(bool, "Success or Failure") - def call(self, slice_xrn, creds, expiration_time): - hrn, type = urn_to_hrn(slice_xrn) + def call(self, slice_xrn, creds, expiration_time, call_id=""): self.api.logger.info("interface: %s\ttarget-hrn: %s\tcaller-creds: %s\tmethod-name: %s"%(self.api.interface, hrn, creds, self.name)) + (hrn, type) = urn_to_hrn(slice_xrn) + # Find the valid credentials valid_creds = self.api.auth.checkCredentials(creds, 'renewsliver', hrn) @@ -37,7 +39,5 @@ class RenewSliver(Method): if requested_time > datetime.datetime.utcnow() + datetime.timedelta(days=60): raise Exception('Cannot renew > 60 days from now') manager = self.api.get_interface_manager() - manager.renew_slice(self.api, slice_xrn, valid_creds, expiration_time) - - return 1 + return manager.RenewSliver(self.api, slice_xrn, valid_creds, expiration_time, call_id)