From: Andy Bavier Date: Tue, 26 Jan 2010 17:49:14 +0000 (+0000) Subject: Update sfatables framework for new manager plugins X-Git-Tag: sfa-0.9-11~197 X-Git-Url: http://git.onelab.eu/?p=sfa.git;a=commitdiff_plain;h=25e4defe0cca44cc49a6c05c4bfe74b723ed14e6 Update sfatables framework for new manager plugins --- diff --git a/sfa/methods/create_slice.py b/sfa/methods/create_slice.py index 7c837405..a85e8e50 100644 --- a/sfa/methods/create_slice.py +++ b/sfa/methods/create_slice.py @@ -8,12 +8,9 @@ from sfa.util.parameter import Parameter, Mixed from sfa.trust.auth import Auth from sfa.plc.slices import Slices from sfa.util.config import Config -# RSpecManager_pl is not used. It's used to make sure the module is in place. -import sfa.rspecs.aggregates.rspec_manager_pl from sfa.trust.credential import Credential from sfatables.runtime import SFATablesRules - class create_slice(Method): """ Instantiate the specified slice according to whats defined in the specified rspec @@ -35,7 +32,18 @@ class create_slice(Method): ] returns = Parameter(int, "1 if successful") - + + def __run_sfatables(self, manager, rules, hrn, origin_hrn, rspec): + if rules.sorted_rule_list: + contexts = rules.contexts + request_context = manager.fetch_context(hrn, origin_hrn, contexts) + rules.set_context(request_context) + newrspec = rules.apply(rspec) + else: + newrspec = rspec + return newrspec + + def call(self, cred, xrn, requested_rspec, origin_hrn=None): hrn, type = urn_to_hrn(xrn) user_cred = Credential(string=cred) @@ -47,40 +55,22 @@ class create_slice(Method): # validate the credential self.api.auth.check(cred, 'createslice') - sfa_aggregate_type = Config().get_aggregate_rspec_type() - rspec_manager = __import__("sfa.rspecs.aggregates.rspec_manager_"+sfa_aggregate_type, fromlist = ["sfa.rspecs.aggregates"]) - #Filter the incoming rspec using sfatables - if self.api.interface in ['slicemgr']: - incoming_rules = SFATablesRules('FORWARD-INCOMING') - elif self.api.interface in ['aggregate']: - incoming_rules = SFATablesRules('INCOMING') - - if incoming_rules.sorted_rule_list: - #incoming_rules.set_slice(hrn) # This is a temporary kludge. Eventually, we'd like to fetch the context requested by the match/target - - contexts = incoming_rules.contexts - request_context = rspec_manager.fetch_context(hrn, origin_hrn, contexts) - incoming_rules.set_context(request_context) - rspec = incoming_rules.apply(requested_rspec) - else: - rspec = requested_rspec - - # send the call to the right manager - if sfa_aggregate_type not in ['pl']: - # To clean up after July 21 - SB - rspec = rspec_manager.create_slice(self.api, hrn, rspec) - return 1 - manager_base = 'sfa.managers' if self.api.interface in ['aggregate']: mgr_type = self.api.config.SFA_AGGREGATE_TYPE manager_module = manager_base + ".aggregate_manager_%s" % mgr_type manager = __import__(manager_module, fromlist=[manager_base]) + rspec = self.__run_sfatables(manager, + SFATablesRules('INCOMING'), + hrn, origin_hrn, requested_rspec) manager.create_slice(self.api, xrn, rspec) elif self.api.interface in ['slicemgr']: mgr_type = self.api.config.SFA_SM_TYPE manager_module = manager_base + ".slice_manager_%s" % mgr_type manager = __import__(manager_module, fromlist=[manager_base]) + rspec = self.__run_sfatables(manager, + SFATablesRules('FORWARD-INCOMING'), + hrn, origin_hrn, requested_rspec) manager.create_slice(self.api, xrn, rspec, origin_hrn) return 1 diff --git a/sfa/plc/api.py b/sfa/plc/api.py index 2cf4923d..7f7d0e3a 100644 --- a/sfa/plc/api.py +++ b/sfa/plc/api.py @@ -51,7 +51,7 @@ class SfaAPI(BaseAPI): self.credential = None # Initialize the PLC shell only if SFA wraps a myPLC - rspec_type = self.config.get_aggregate_rspec_type() + rspec_type = self.config.get_aggregate_type() if (rspec_type == 'pl' or rspec_type == 'vini'): self.plshell = self.getPLCShell() self.plshell_version = self.getPLCShellVersion() diff --git a/sfa/util/config.py b/sfa/util/config.py index aec8556f..923df4f4 100644 --- a/sfa/util/config.py +++ b/sfa/util/config.py @@ -94,9 +94,9 @@ class Config: return (aggr_mgr_ip,aggr_mgr_port) - def get_aggregate_rspec_type(self): - if (hasattr(self,'SFA_AGGREGATE_RSPEC_TYPE')): - return self.SFA_AGGREGATE_RSPEC_TYPE + def get_aggregate_type(self): + if (hasattr(self,'SFA_AGGREGATE_TYPE')): + return self.SFA_AGGREGATE_TYPE else: return "pl"