X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fserver%2Fsfaapi.py;h=fa3b47642494aaff978ba549c348b06c22893544;hb=fd26329a0ce5139c6e4938157fc54fafe431f3bc;hp=1c4625751ea4b61a6c48a5f3e5b126984ffbf51a;hpb=d42c0e79549cbc940fd160f4e9cb1f75e59029ce;p=sfa.git diff --git a/sfa/server/sfaapi.py b/sfa/server/sfaapi.py index 1c462575..fa3b4764 100644 --- a/sfa/server/sfaapi.py +++ b/sfa/server/sfaapi.py @@ -7,9 +7,9 @@ from sfa.util.cache import Cache from sfa.trust.auth import Auth from sfa.trust.certificate import Keypair, Certificate from sfa.trust.credential import Credential +from sfa.trust.rights import determine_rights # this is wrong all right, but temporary, will use generic -from sfa.managers.managerwrapper import ManagerWrapper, import_manager from sfa.server.xmlrpcapi import XmlrpcApi import os import datetime @@ -20,10 +20,18 @@ class SfaApi (XmlrpcApi): """ An SfaApi instance is a basic xmlrcp service augmented with the local cryptographic material and hrn - It also has the notion of neighbour sfa services - as defined in /etc/sfa/{aggregates,registries}.xml + + It also has the notion of its own interface (a string describing + whether we run a registry, aggregate or slicemgr) and has + the notion of neighbour sfa services as defined + in /etc/sfa/{aggregates,registries}.xml + Finally it contains a cache instance - It has no a priori knowledge of the underlying testbed + + It gets augmented by the generic layer with + (*) an instance of manager (actually a manager module for now) + (*) which in turn holds an instance of a testbed driver + For convenience api.manager.driver == api.driver """ def __init__ (self, encoding="utf-8", methods='sfa.methods', @@ -57,32 +65,15 @@ class SfaApi (XmlrpcApi): # load aggregates from sfa.server.aggregate import Aggregates self.aggregates = Aggregates() + + # filled later on by generic/Generic + self.manager=None - + # tmp def get_interface_manager(self, manager_base = 'sfa.managers'): - """ - Returns the appropriate manager module for this interface. - Modules are usually found in sfa/managers/ - """ - manager=None - if self.interface in ['registry']: - manager=import_manager ("registry", self.config.SFA_REGISTRY_TYPE) - elif self.interface in ['aggregate']: - manager=import_manager ("aggregate", self.config.SFA_AGGREGATE_TYPE) - elif self.interface in ['slicemgr', 'sm']: - manager=import_manager ("slice", self.config.SFA_SM_TYPE) - elif self.interface in ['component', 'cm']: - manager=import_manager ("component", self.config.SFA_CM_TYPE) - if not manager: - raise SfaAPIError("No manager for interface: %s" % self.interface) - - # this isnt necessary but will help to produce better error messages - # if someone tries to access an operation this manager doesn't implement - manager = ManagerWrapper(manager, self.interface) - - return manager - - def get_server(self, interface, cred, timeout=30): + return self.manager + + def server_proxy(self, interface, cred, timeout=30): """ Returns a connection to the specified interface. Use the specified credential to determine the caller and look for the caller's key/cert @@ -98,7 +89,7 @@ class SfaApi (XmlrpcApi): auth_info = hierarchy.get_auth_info(caller_gid.get_hrn()) key_file = auth_info.get_privkey_filename() cert_file = auth_info.get_gid_filename() - server = interface.get_server(key_file, cert_file, timeout) + server = interface.server_proxy(key_file, cert_file, timeout) return server @@ -151,7 +142,7 @@ class SfaApi (XmlrpcApi): """ from sfa.server.registry import Registries registries = Registries() - registry = registries.get_server(self.hrn, self.key_file, self.cert_file) + registry = registries.server_proxy(self.hrn, self.key_file, self.cert_file) cert_string=self.cert.save_to_string(save_parents=True) # get self credential self_cred = registry.GetSelfCredential(cert_string, self.hrn, 'authority')