- self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, Credential(string=caller_cred).get_gid_caller().get_hrn(), hrn, self.name))
-
- if (sfa_aggregate_type == 'pl'):
- nodes = Nodes(self.api, caller_cred=caller_cred)
- if hrn:
- rspec = nodes.get_rspec(hrn)
- else:
- nodes.refresh()
- rspec = nodes['rspec']
- else:
- # To clean up after July 21 - SB
- rspec_manager = __import__("sfa.rspecs.aggregates.rspec_manager_"+sfa_aggregate_type, fromlist = ["sfa.rspecs.aggregates"])
- rspec = rspec_manager.get_rspec(self.api, hrn)
-
- return rspec
+ self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, Credential(string=caller_cred).get_gid_caller().get_hrn(), hrn, self.name))
+
+
+
+ # send the call to the right manager
+ 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 = manager.get_rspec(self.api, hrn, caller_cred)
+ outgoing_rules = SFATablesRules('OUTGOING')
+ 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 = manager.get_rspec(self.api, hrn, caller_cred)
+ outgoing_rules = SFATablesRules('FORWARD-OUTGOING')
+
+ filtered_rspec = rspec
+ if outgoing_rules.sorted_rule_list:
+ request_context = manager.fetch_context(
+ hrn,
+ Credential(string=caller_cred).get_gid_caller().get_hrn(),
+ outgoing_rules.contexts)
+ outgoing_rules.set_context(request_context)
+ filtered_rspec = outgoing_rules.apply(rspec)
+
+ return filtered_rspec