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):
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:
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)
# 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):
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()
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)
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)
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)