From 4bb7dbe3ccaccb337b57ec1da224556b35a218b9 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Wed, 2 Nov 2011 00:24:43 +0100 Subject: [PATCH] cleanup the component server (no more flavour=plcm, use pl) - needs testing though various cleanup and renamings --- sfa/generic/__init__.py | 14 +++++++++----- sfa/generic/pl.py | 18 +++++++++++++++--- sfa/generic/plcm.py | 13 ------------- sfa/managers/component_manager_pl.py | 12 ++++++------ sfa/{util => plc}/nodemanager.py | 0 ...plccomponentapi.py => plcomponentdriver.py} | 4 ++-- sfa/server/component.py | 4 +--- sfa/server/sfa_component_setup.py | 6 ++++-- 8 files changed, 37 insertions(+), 34 deletions(-) delete mode 100644 sfa/generic/plcm.py rename sfa/{util => plc}/nodemanager.py (100%) rename sfa/plc/{plccomponentapi.py => plcomponentdriver.py} (98%) diff --git a/sfa/generic/__init__.py b/sfa/generic/__init__.py index a4e7bdf9..ea6ce059 100644 --- a/sfa/generic/__init__.py +++ b/sfa/generic/__init__.py @@ -61,7 +61,7 @@ class Generic: logger.critical("Generic.make_api: no interface found") api = self.api_class()(*args, **kwargs) manager = self.make_manager(api.interface) - driver = self.make_driver (api.config) + driver = self.make_driver (api.config, api.interface) ### arrange stuff together # add a manager wrapper manager = ManagerWrapper(manager,api.interface) @@ -80,7 +80,7 @@ class Generic: flavour = self.flavour message="Generic.make_manager for interface=%s and flavour=%s"%(interface,flavour) - classname = "%s_class"%interface + classname = "%s_manager_class"%interface try: module = getattr(self,classname)() logger.info("%s : %s"%(message,module)) @@ -88,11 +88,15 @@ class Generic: except: logger.log_exc_critical(message) - def make_driver (self, config): + # need interface to select the right driver + def make_driver (self, config, interface): flavour = self.flavour - message="Generic.make_driver for flavour=%s"%(flavour) + message="Generic.make_driver for flavour=%s and interface=%s"%(flavour,interface) - classname = "driver_class" + if interface == "component": + classname = "component_driver_class" + else: + classname = "driver_class" try: class_obj = getattr(self,classname)() logger.info("%s : %s"%(message,class_obj)) diff --git a/sfa/generic/pl.py b/sfa/generic/pl.py index aa0ef5bd..167b58af 100644 --- a/sfa/generic/pl.py +++ b/sfa/generic/pl.py @@ -8,16 +8,28 @@ import sfa.managers.aggregate_manager class pl (Generic): + # use the standard api class def api_class (self): return sfa.server.sfaapi.SfaApi - def registry_class (self) : + # the manager classes for the server-side services + def registry_manager_class (self) : return sfa.managers.registry_manager - def slicemgr_class (self) : + def slicemgr_manager_class (self) : return sfa.managers.slice_manager - def aggregate_class (self) : + def aggregate_manager_class (self) : return sfa.managers.aggregate_manager + # driver class for server-side services, talk to the whole testbed def driver_class (self): return sfa.plc.pldriver.PlDriver + # for the component mode, to be run on board planetlab nodes + # manager class + def component_manager_class (self): + return sfa.managers.component_manager_pl + # driver_class + def component_driver_class (self): + return sfa.plc.plcomponentdriver.PlComponentDriver + + diff --git a/sfa/generic/plcm.py b/sfa/generic/plcm.py deleted file mode 100644 index fe31609d..00000000 --- a/sfa/generic/plcm.py +++ /dev/null @@ -1,13 +0,0 @@ -from sfa.generic.pl import pl - -import sfa.server.sfaapi -import sfa.plc.plccomponentapi -import sfa.managers.component_manager_pl - -class plcm (pl): - - def component_class (self): - return sfa.managers.component_manager_pl - - def driver_class (self): - return 'xxx todo : transform plccomponentapi into plcnodedriver' diff --git a/sfa/managers/component_manager_pl.py b/sfa/managers/component_manager_pl.py index d8e64dc9..164b2d69 100644 --- a/sfa/managers/component_manager_pl.py +++ b/sfa/managers/component_manager_pl.py @@ -29,26 +29,26 @@ def SliverStatus(api, slice_xrn, creds): def start_slice(api, xrn, creds): slicename = PlXrn(xrn, type='slice').pl_slicename() - api.nodemanager.Start(slicename) + api.driver.nodemanager.Start(slicename) def stop_slice(api, xrn, creds): slicename = PlXrn(xrn, type='slice').pl_slicename() - api.nodemanager.Stop(slicename) + api.driver.nodemanager.Stop(slicename) def DeleteSliver(api, xrn, creds, call_id): slicename = PlXrn(xrn, type='slice').pl_slicename() - api.nodemanager.Destroy(slicename) + api.driver.nodemanager.Destroy(slicename) def reset_slice(api, xrn): slicename = PlXrn(xrn, type='slice').pl_slicename() if not api.sliver_exists(slicename): raise SliverDoesNotExist(slicename) - api.nodemanager.ReCreate(slicename) + api.driver.nodemanager.ReCreate(slicename) # xxx outdated - this should accept a credential & call_id def ListSlices(api): # this returns a tuple, the data we want is at index 1 - xids = api.nodemanager.GetXIDs() + xids = api.driver.nodemanager.GetXIDs() # unfortunately the data we want is given to us as # a string but we really want it as a dict # lets eval it @@ -65,6 +65,6 @@ def redeem_ticket(api, ticket_string): # convert ticket to format nm is used to nm_ticket = xmlrpclib.dumps((ticket.attributes,), methodresponse=True) - api.nodemanager.AdminTicket(nm_ticket) + api.driver.nodemanager.AdminTicket(nm_ticket) diff --git a/sfa/util/nodemanager.py b/sfa/plc/nodemanager.py similarity index 100% rename from sfa/util/nodemanager.py rename to sfa/plc/nodemanager.py diff --git a/sfa/plc/plccomponentapi.py b/sfa/plc/plcomponentdriver.py similarity index 98% rename from sfa/plc/plccomponentapi.py rename to sfa/plc/plcomponentdriver.py index ebd238de..1ddaf27b 100644 --- a/sfa/plc/plccomponentapi.py +++ b/sfa/plc/plcomponentdriver.py @@ -2,14 +2,14 @@ import os import tempfile import sfa.util.xmlrpcprotocol as xmlrpcprotocol -from sfa.util.nodemanager import NodeManager +from sfa.plc.nodemanager import NodeManager from sfa.trust.credential import Credential from sfa.trust.certificate import Certificate, Keypair from sfa.trust.gid import GID #################### -class PlcComponentDriver: +class PlComponentDriver: """ This class is the type for the toplevel 'api' object when running the component manager inside a planetlab node. diff --git a/sfa/server/component.py b/sfa/server/component.py index 3958c5fb..9baa6c22 100644 --- a/sfa/server/component.py +++ b/sfa/server/component.py @@ -17,7 +17,6 @@ except ImportError: ## # Component is a SfaServer that serves component operations. -# set SFA_GENERIC_FLAVOUR=plcm to get a PlcComponentApi instance in the request handler class Component(SfaServer): ## # Create a new registry object. @@ -28,5 +27,4 @@ class Component(SfaServer): # @param cert_file certificate filename containing public key (could be a GID file) def __init__(self, ip, port, key_file, cert_file): - SfaServer.__init__(self, ip, port, key_file, cert_file) - self.server.interface = 'component' + SfaServer.__init__(self, ip, port, key_file, cert_file, interface='component') diff --git a/sfa/server/sfa_component_setup.py b/sfa/server/sfa_component_setup.py index b2ce0844..072f3b6f 100755 --- a/sfa/server/sfa_component_setup.py +++ b/sfa/server/sfa_component_setup.py @@ -222,8 +222,10 @@ def get_gids(registry=None, verbose=False): if verbose: print "Getting current slices on this node" # get a list of slices on this node - from sfa.plc.plcdriver import PlcComponentApi - api = PlcComponentApi() + # make sure you run with SFA_GENERIC_FLAVOUR=plcm + from sfa.generic import Generic + generic=Generic.the_flavour() + api = generic.make_api(interface='component') xids_tuple = api.driver.nodemanager.GetXIDs() slices = eval(xids_tuple[1]) slicenames = slices.keys() -- 2.43.0