4 from sfa.util.faults import *
5 from sfa.util.namespace import *
6 from sfa.util.method import Method
7 from sfa.util.parameter import Parameter, Mixed
8 from sfa.trust.auth import Auth
9 from sfa.util.config import Config
10 # RSpecManager_pl is not used. This line is a check that ensures that everything is in place for the import to work.
11 import sfa.rspecs.aggregates.rspec_manager_pl
12 from sfa.trust.credential import Credential
13 from sfatables.runtime import SFATablesRules
15 class get_resources(Method):
17 Get an resource specification (rspec). The rspec may describe the resources
18 available at an authority or the resources being used by a slice.
20 @param cred credential string specifying the rights of the caller
21 @param hrn human readable name of the slice we are interesed in or None
25 interfaces = ['aggregate', 'slicemgr']
28 Parameter(str, "Credential string"),
29 Mixed(Parameter(str, "Human readable name (hrn or urn)"),
30 Parameter(None, "hrn not specified")),
31 Mixed(Parameter(str, "Human readable name of the original caller"),
32 Parameter(None, "Origin hrn not specified"))
35 returns = Parameter(str, "String representatin of an rspec")
37 def call(self, cred, xrn=None, origin_hrn=None):
38 hrn, type = urn_to_hrn(xrn)
39 user_cred = Credential(string=cred)
43 origin_hrn = user_cred.get_gid_caller().get_hrn()
44 self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name))
47 self.api.auth.check(cred, 'listnodes', hrn)
49 # send the call to the right manager
50 manager_base = 'sfa.managers'
51 if self.api.interface in ['aggregate']:
52 mgr_type = self.api.config.SFA_AGGREGATE_TYPE
53 manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
54 manager = __import__(manager_module, fromlist=[manager_base])
55 rspec = manager.get_rspec(self.api, xrn, origin_hrn)
56 outgoing_rules = SFATablesRules('OUTGOING')
57 elif self.api.interface in ['slicemgr']:
58 mgr_type = self.api.config.SFA_SM_TYPE
59 manager_module = manager_base + ".slice_manager_%s" % mgr_type
60 manager = __import__(manager_module, fromlist=[manager_base])
61 rspec = manager.get_rspec(self.api, xrn, origin_hrn)
62 outgoing_rules = SFATablesRules('FORWARD-OUTGOING')
64 filtered_rspec = rspec
65 if outgoing_rules.sorted_rule_list:
66 request_context = manager.fetch_context(hrn, origin_hrn, outgoing_rules.contexts)
67 outgoing_rules.set_context(request_context)
68 filtered_rspec = outgoing_rules.apply(rspec)