X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmethods%2FAllocate.py;h=ff543b7315e563c71cc8def39ae610c3b42628fa;hb=3519c849835dcc5ca47a2e03db24284017254ce6;hp=b3328e0b8d0ec90f411998db5f8c5b05aa1030d8;hpb=ca48929768093b728c44c51911516df9fb73c8bb;p=sfa.git diff --git a/sfa/methods/Allocate.py b/sfa/methods/Allocate.py index b3328e0b..ff543b73 100644 --- a/sfa/methods/Allocate.py +++ b/sfa/methods/Allocate.py @@ -1,10 +1,12 @@ from sfa.util.faults import SfaInvalidArgument, InvalidRSpec, SfatablesRejected -from sfa.util.xrn import urn_to_hrn +from sfa.util.sfatime import datetime_to_string +from sfa.util.xrn import Xrn, urn_to_hrn from sfa.util.method import Method from sfa.util.sfatablesRuntime import run_sfatables from sfa.trust.credential import Credential from sfa.storage.parameter import Parameter, Mixed from sfa.rspecs.rspec import RSpec +from sfa.util.sfalogging import logger class Allocate(Method): """ @@ -26,7 +28,7 @@ class Allocate(Method): interfaces = ['aggregate', 'slicemgr'] accepts = [ Parameter(str, "Slice URN"), - Parameter(dict, "List of credentials")), + Parameter(type([dict]), "List of credentials"), Parameter(str, "RSpec"), Parameter(dict, "options"), ] @@ -35,9 +37,13 @@ class Allocate(Method): def call(self, xrn, creds, rspec, options): xrn = Xrn(xrn, type='slice') self.api.logger.info("interface: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, xrn.get_hrn(), self.name)) + (speaking_for, _) = urn_to_hrn(options.get('geni_speaking_for')) # Find the valid credentials - valid_creds = self.api.auth.checkCredentials(creds, 'createsliver', xrn.get_hrn()) + valid_creds = self.api.auth.checkCredentials(creds, 'createsliver', xrn.get_hrn(), speaking_for_hrn=speaking_for) + # use the expiration from the first valid credential to determine when + # the slivers should expire. + expiration = datetime_to_string(Credential(cred=valid_creds[0]).expiration) # make sure request is not empty slivers = RSpec(rspec).version.get_nodes_with_slivers() @@ -50,11 +56,12 @@ class Allocate(Method): elif self.api.interface in ['slicemgr']: chain_name = 'FORWARD-INCOMING' self.api.logger.debug("Allocate: sfatables on chain %s"%chain_name) - origin_hrn = Credential(string=valid_creds[0]).get_gid_caller().get_hrn() + origin_hrn = Credential(cred=valid_creds[0]).get_gid_caller().get_hrn() + self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, xrn, self.name)) rspec = run_sfatables(chain_name, xrn.get_hrn(), origin_hrn, rspec) slivers = RSpec(rspec).version.get_nodes_with_slivers() if not slivers: raise SfatablesRejected(slice_xrn) - result = self.api.manager.Allocate(self.api, xrn.get_urn(), creds, rspec, options) + result = self.api.manager.Allocate(self.api, xrn.get_urn(), creds, rspec, expiration, options) return result