renew_slice now renamed as RenewSliver & supports call_id
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Thu, 14 Apr 2011 10:06:48 +0000 (12:06 +0200)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Thu, 14 Apr 2011 10:06:48 +0000 (12:06 +0200)
sfa/client/sfi.py
sfa/managers/aggregate_manager_pl.py
sfa/managers/aggregate_manager_vini.py
sfa/managers/slice_manager_pl.py
sfa/methods/RenewSliver.py

index 5974a03..a6f80f6 100755 (executable)
@@ -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):
index 4b8f34d..8a39c0b 100644 (file)
@@ -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)
index d961443..f4e919b 100644 (file)
@@ -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):
index 5bb923b..9676fe9 100644 (file)
@@ -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)
index b574a57..5e3e266 100644 (file)
@@ -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)