From 0aca9d7809d7d43bf126068c7facb24ce5eea531 Mon Sep 17 00:00:00 2001 From: "Blake J. Harnden" Date: Thu, 21 Jun 2018 14:56:30 -0700 Subject: [PATCH] changes to remove the need to pass services separately, when the node has access to them directly, also made a couple CoreServices methods more consistent to have the node as first param and service second --- daemon/core/corehandlers.py | 12 ++-- daemon/core/service.py | 107 ++++++++++++------------------ daemon/core/services/bird.py | 8 +-- daemon/core/services/dockersvc.py | 2 +- daemon/core/services/nrl.py | 32 ++++----- daemon/core/services/quagga.py | 23 +++---- daemon/core/services/sdn.py | 10 +-- daemon/core/services/security.py | 8 +-- daemon/core/services/ucarp.py | 18 ++--- daemon/core/services/utility.py | 44 ++++++------ daemon/core/services/xorp.py | 6 +- 11 files changed, 123 insertions(+), 147 deletions(-) diff --git a/daemon/core/corehandlers.py b/daemon/core/corehandlers.py index 0237ca56..e5d9cb35 100644 --- a/daemon/core/corehandlers.py +++ b/daemon/core/corehandlers.py @@ -1151,7 +1151,7 @@ class CoreHandler(SocketServer.BaseRequestHandler): # a file request: e.g. "service:zebra:quagga.conf" file_name = servicesstring[2] service_name = services[0] - file_data = self.session.services.getservicefile(service_name, node, file_name, services) + file_data = self.session.services.getservicefile(node, service_name, file_name) self.session.broadcast_file(file_data) # short circuit this request early to avoid returning response below return replies @@ -1163,7 +1163,7 @@ class CoreHandler(SocketServer.BaseRequestHandler): type_flag = ConfigFlags.UPDATE.value data_types = tuple(repeat(ConfigDataTypes.STRING.value, len(ServiceShim.keys))) service = self.session.services.getcustomservice(node_id, service_name, default_service=True) - values = ServiceShim.tovaluelist(service, node, services) + values = ServiceShim.tovaluelist(node, service) captions = None possible_values = None groups = None @@ -1530,15 +1530,15 @@ class CoreHandler(SocketServer.BaseRequestHandler): if status: fail += "Stop %s," % service.name if event_type == EventTypes.START.value or event_type == EventTypes.RESTART.value: - status = self.session.services.node_service_startup(node, service, services) + status = self.session.services.node_service_startup(node, service) if status: fail += "Start %s(%s)," % service.name if event_type == EventTypes.PAUSE.value: - status = self.session.services.validatenodeservice(node, service, services) + status = self.session.services.validatenodeservice(node, service) if status: fail += "%s," % service.name if event_type == EventTypes.RECONFIGURE.value: - self.session.services.node_service_reconfigure(node, service, services) + self.session.services.node_service_reconfigure(node, service) fail_data = "" if len(fail) > 0: @@ -1724,7 +1724,7 @@ class CoreHandler(SocketServer.BaseRequestHandler): opaque = "service:%s" % service.name data_types = tuple(repeat(ConfigDataTypes.STRING.value, len(ServiceShim.keys))) node = self.session.get_object(node_id) - values = ServiceShim.tovaluelist(service, node, node.services) + values = ServiceShim.tovaluelist(node, service) config_data = ConfigData( message_type=0, node=node_id, diff --git a/daemon/core/service.py b/daemon/core/service.py index 41e155df..fa45f149 100644 --- a/daemon/core/service.py +++ b/daemon/core/service.py @@ -35,14 +35,13 @@ class ServiceShim(object): keys = ["dirs", "files", "startidx", "cmdup", "cmddown", "cmdval", "meta", "starttime"] @classmethod - def tovaluelist(cls, service, node, services): + def tovaluelist(cls, node, service): """ Convert service properties into a string list of key=value pairs, separated by "|". - :param CoreService service: service to get value list for :param core.netns.nodes.CoreNode node: node to get value list for - :param list[CoreService] services: services for node + :param CoreService service: service to get value list for :return: value list string :rtype: str """ @@ -50,8 +49,8 @@ class ServiceShim(object): service.shutdown, service.validate, service.meta, service.starttime] if not service.custom: # this is always reached due to classmethod - valmap[valmap.index(service.configs)] = service.getconfigfilenames(node.objid, services) - valmap[valmap.index(service.startup)] = service.getstartup(node, services) + valmap[valmap.index(service.configs)] = service.getconfigfilenames(node) + valmap[valmap.index(service.startup)] = service.getstartup(node) vals = map(lambda a, b: "%s=%s" % (a, str(b)), cls.keys, valmap) return "|".join(vals) @@ -112,7 +111,7 @@ class ServiceShim(object): service.starttime = value @classmethod - def servicesfromopaque(self, opaque): + def servicesfromopaque(cls, opaque): """ Build a list of services from an opaque data string. @@ -288,18 +287,18 @@ class CoreServices(object): return startups - def getdefaultservices(self, service_type): + def getdefaultservices(self, node_type): """ Get the list of default services that should be enabled for a node for the given node type. - :param service_type: service type to get default services for + :param node_type: node type to get default services for :return: default services :rtype: list[CoreService] """ - logger.debug("getting default services for type: %s", service_type) + logger.debug("getting default services for type: %s", node_type) results = [] - defaults = self.defaultservices.get(service_type, []) + defaults = self.defaultservices.get(node_type, []) for name in defaults: logger.debug("checking for service with service manager: %s", name) service = ServiceManager.get(name) @@ -351,7 +350,7 @@ class CoreServices(object): :param core.coreobj.PyCoreNode node: node to add services to :param str node_type: node type to add services to - :param list[str] services: services to add to node + :param list[str] services: names of services to add to node :return: nothing """ if not services: @@ -372,7 +371,6 @@ class CoreServices(object): Return (nodenum, service) tuples for all stored configs. Used when reconnecting to a session or opening XML. - :param bool use_clsmap: should a class map be used, default to True :return: list of tuples of node ids and services :rtype: list """ @@ -413,10 +411,9 @@ class CoreServices(object): pool = ThreadPool() results = [] - services = sorted(node.services, key=lambda x: x.startindex) - boot_paths = self.node_service_dependencies(services) + boot_paths = self.node_service_dependencies(node.services) for boot_path in boot_paths: - result = pool.apply_async(self.boot_node_dependencies, (node, boot_path, services)) + result = pool.apply_async(self.boot_node_dependencies, (node, boot_path)) results.append(result) pool.close() @@ -424,19 +421,18 @@ class CoreServices(object): for result in results: result.get() - def boot_node_dependencies(self, node, boot_path, all_services): + def boot_node_dependencies(self, node, boot_path): logger.info("booting node service dependencies: %s", boot_path) for service in boot_path: - self.bootnodeservice(node, service, all_services) + self.bootnodeservice(node, service) - def bootnodeservice(self, node, service, services): + def bootnodeservice(self, node, service): """ Start a service on a node. Create private dirs, generate config files, and execute startup commands. :param core.netns.vnode.LxcNode node: node to boot services on :param CoreService service: service to start - :param list services: service list :return: nothing """ logger.info("starting node(%s) service: %s (%s)", node.name, service.name, service.startindex) @@ -446,11 +442,11 @@ class CoreServices(object): node.privatedir(directory) # create service files - self.node_service_files(node, service, services) + self.node_service_files(node, service) # run startup wait = service.validation_mode == ServiceMode.BLOCKING - status = self.node_service_startup(node, service, services, wait) + status = self.node_service_startup(node, service, wait) if status: raise ServiceBootError("node(%s) service(%s) error during startup" % (node.name, service.name)) @@ -461,7 +457,7 @@ class CoreServices(object): # run validation commands, if present and not timer mode if service.validation_mode != ServiceMode.TIMER: - status = self.validatenodeservice(node, service, services) + status = self.validatenodeservice(node, service) if status: raise ServiceBootError("node(%s) service(%s) failed validation" % (node.name, service.name)) @@ -493,31 +489,29 @@ class CoreServices(object): :param core.netns.vnode.LxcNode node: node to validate services for :return: nothing """ - services = sorted(node.services, key=lambda x: x.startindex) - for service in services: - self.validatenodeservice(node, service, services) + for service in node.services: + self.validatenodeservice(node, service) - def validatenodeservice(self, node, service, services): + def validatenodeservice(self, node, service): """ Run the validation command(s) for a service. :param core.netns.vnode.LxcNode node: node to validate service for :param CoreService service: service to validate - :param list services: services for node :return: service validation status :rtype: int """ logger.info("validating node(%s) service(%s): %s", node.name, service.name, service.startindex) cmds = service.validate if not service.custom: - cmds = service.getvalidate(node, services) + cmds = service.getvalidate(node) status = 0 for cmd in cmds: logger.info("validating service(%s) using: %s", service.name, cmd) try: node.check_cmd(cmd) - except CoreCommandError as e: + except CoreCommandError: logger.exception("node(%s) service(%s) validate command failed", node.name, service.name) status = -1 @@ -552,15 +546,14 @@ class CoreServices(object): status = -1 return status - def getservicefile(self, service_name, node, filename, services): + def getservicefile(self, node, service_name, filename): """ Send a File Message when the GUI has requested a service file. The file data is either auto-generated or comes from an existing config. - :param str service_name: service to get file from :param core.netns.vnode.LxcNode node: node to get service file from + :param str service_name: service to get file from :param str filename: file name to retrieve - :param list[str] services: list of services associated with node :return: file message for node """ # get service to get file from @@ -568,20 +561,11 @@ class CoreServices(object): if not service: raise ValueError("invalid service: %s", service_name) - # get service for node - node_services = [] - for service_name in services: - node_service = self.getcustomservice(node.objid, service_name, default_service=True) - if not node_service: - logger.warn("unknown service: %s", service) - continue - node_services.append(node_service) - # retrieve config files for default/custom service if service.custom: config_files = service.configs else: - config_files = service.getconfigfilenames(node.objid, node_services) + config_files = service.getconfigfilenames(node) if filename not in config_files: raise ValueError("unknown service(%s) config file: %s", service_name, filename) @@ -589,7 +573,7 @@ class CoreServices(object): # get the file data data = service.configtxt.get(filename) if data is None: - data = "%s" % service.generateconfig(node, filename, node_services) + data = "%s" % service.generateconfig(node, filename) else: data = "%s" % data @@ -632,13 +616,12 @@ class CoreServices(object): # set custom service file data service.configtxt[filename] = data - def node_service_startup(self, node, service, services, wait=False): + def node_service_startup(self, node, service, wait=False): """ Startup a node service. :param PyCoreNode node: node to reconfigure service for :param CoreService service: service to reconfigure - :param list[CoreService] services: node services :param bool wait: determines if we should wait to validate startup :return: status of startup :rtype: int @@ -646,7 +629,7 @@ class CoreServices(object): cmds = service.startup if not service.custom: - cmds = service.getstartup(node, services) + cmds = service.getstartup(node) status = 0 for cmd in cmds: @@ -660,26 +643,25 @@ class CoreServices(object): status = -1 return status - def node_service_files(self, node, service, services): + def node_service_files(self, node, service): """ Creates node service files. :param PyCoreNode node: node to reconfigure service for :param CoreService service: service to reconfigure - :param list[CoreService] services: node services :return: nothing """ # get values depending on if custom or not file_names = service.configs if not service.custom: - file_names = service.getconfigfilenames(node.objid, services) + file_names = service.getconfigfilenames(node) for file_name in file_names: logger.info("generating service config: %s", file_name) if service.custom: cfg = service.configtxt.get(file_name) if cfg is None: - cfg = service.generateconfig(node, file_name, services) + cfg = service.generateconfig(node, file_name) # cfg may have a file:/// url for copying from a file try: @@ -689,22 +671,21 @@ class CoreServices(object): logger.exception("error copying service file: %s", file_name) continue else: - cfg = service.generateconfig(node, file_name, services) + cfg = service.generateconfig(node, file_name) node.nodefile(file_name, cfg) - def node_service_reconfigure(self, node, service, services): + def node_service_reconfigure(self, node, service): """ Reconfigure a node service. :param PyCoreNode node: node to reconfigure service for :param CoreService service: service to reconfigure - :param list[CoreService] services: node services :return: nothing """ file_names = service.configs if not service.custom: - file_names = service.getconfigfilenames(node.objid, services) + file_names = service.getconfigfilenames(node) for file_name in file_names: if file_name[:7] == "file:///": @@ -713,7 +694,7 @@ class CoreServices(object): cfg = service.configtxt.get(file_name) if cfg is None: - cfg = service.generateconfig(node, file_name, services) + cfg = service.generateconfig(node, file_name) node.nodefile(file_name, cfg) @@ -794,21 +775,20 @@ class CoreService(object): pass @classmethod - def getconfigfilenames(cls, node_id, services): + def getconfigfilenames(cls, node): """ Return the tuple of configuration file filenames. This default method returns the cls._configs tuple, but this method may be overriden to provide node-specific filenames that may be based on other services. - :param int node_id: node id to get config file names for - :param list services: node services - :return: class configuration files + :param core.netns.vnode.LxcNode node: node to generate config for + :return: configuration files :rtype: tuple """ return cls.configs @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Generate configuration file given a node object. The filename is provided to allow for multiple config files. The other services are @@ -818,13 +798,12 @@ class CoreService(object): :param core.netns.vnode.LxcNode node: node to generate config for :param str filename: file name to generate config for - :param list services: services for node :return: nothing """ raise NotImplementedError @classmethod - def getstartup(cls, node, services): + def getstartup(cls, node): """ Return the tuple of startup commands. This default method returns the cls._startup tuple, but this method may be @@ -832,14 +811,13 @@ class CoreService(object): based on other services. :param core.netns.vnode.LxcNode node: node to get startup for - :param list services: services for node :return: startup commands :rtype: tuple """ return cls.startup @classmethod - def getvalidate(cls, node, services): + def getvalidate(cls, node): """ Return the tuple of validate commands. This default method returns the cls._validate tuple, but this method may be @@ -847,7 +825,6 @@ class CoreService(object): based on other services. :param core.netns.vnode.LxcNode node: node to validate - :param list services: services for node :return: validation commands :rtype: tuple """ diff --git a/daemon/core/services/bird.py b/daemon/core/services/bird.py index 639b99ed..a869fe7c 100644 --- a/daemon/core/services/bird.py +++ b/daemon/core/services/bird.py @@ -21,12 +21,12 @@ class Bird(CoreService): validate = ("pidof bird",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Return the bird.conf file contents. """ if filename == cls.configs[0]: - return cls.generateBirdConf(node, services) + return cls.generateBirdConf(node) else: raise ValueError @@ -45,7 +45,7 @@ class Bird(CoreService): return "0.0.0.0" @classmethod - def generateBirdConf(cls, node, services): + def generateBirdConf(cls, node): """ Returns configuration file text. Other services that depend on bird will have generatebirdifcconfig() and generatebirdconfig() @@ -77,7 +77,7 @@ protocol device { """ % (cls.name, cls.routerid(node)) # Generate protocol specific configurations - for s in services: + for s in node.services: if cls.name not in s.depends: continue cfg += s.generatebirdconfig(node) diff --git a/daemon/core/services/dockersvc.py b/daemon/core/services/dockersvc.py index 0cb9cdf1..797a29e6 100644 --- a/daemon/core/services/dockersvc.py +++ b/daemon/core/services/dockersvc.py @@ -125,7 +125,7 @@ class DockerService(CoreService): image = "" @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Returns a string having contents of a docker.sh script that can be modified to start a specific docker image. diff --git a/daemon/core/services/nrl.py b/daemon/core/services/nrl.py index d446ef81..cf5e1d9c 100644 --- a/daemon/core/services/nrl.py +++ b/daemon/core/services/nrl.py @@ -23,7 +23,7 @@ class NrlService(CoreService): shutdown = () @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): return "" @staticmethod @@ -55,7 +55,7 @@ class MgenSinkService(NrlService): shutdown = ("killall mgen",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): cfg = "0.0 LISTEN UDP 5000\n" for ifc in node.netifs(): name = utils.sysctl_devname(ifc.name) @@ -63,7 +63,7 @@ class MgenSinkService(NrlService): return cfg @classmethod - def getstartup(cls, node, services): + def getstartup(cls, node): cmd = cls.startup[0] cmd += " output /tmp/mgen_%s.log" % node.name return cmd, @@ -80,7 +80,7 @@ class NrlNhdp(NrlService): validate = ("pidof nrlnhdp",) @classmethod - def getstartup(cls, node, services): + def getstartup(cls, node): """ Generate the appropriate command-line based on node interfaces. """ @@ -88,7 +88,7 @@ class NrlNhdp(NrlService): cmd += " -l /var/log/nrlnhdp.log" cmd += " -rpipe %s_nhdp" % node.name - servicenames = map(lambda x: x.name, services) + servicenames = map(lambda x: x.name, node.services) if "SMF" in servicenames: cmd += " -flooding ecds" cmd += " -smfClient %s_smf" % node.name @@ -114,7 +114,7 @@ class NrlSmf(NrlService): configs = ("startsmf.sh",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename, ): """ Generate a startup script for SMF. Because nrlsmf does not daemonize, it can cause problems in some situations when launched @@ -125,7 +125,7 @@ class NrlSmf(NrlService): comments = "" cmd = "nrlsmf instance %s_smf" % node.name - servicenames = map(lambda x: x.name, services) + servicenames = map(lambda x: x.name, node.services) netifs = filter(lambda x: not getattr(x, 'control', False), node.netifs()) if len(netifs) == 0: return "" @@ -165,7 +165,7 @@ class NrlOlsr(NrlService): validate = ("pidof nrlolsrd",) @classmethod - def getstartup(cls, node, services): + def getstartup(cls, node): """ Generate the appropriate command-line based on node interfaces. """ @@ -178,7 +178,7 @@ class NrlOlsr(NrlService): cmd += " -l /var/log/nrlolsrd.log" cmd += " -rpipe %s_olsr" % node.name - servicenames = map(lambda x: x.name, services) + servicenames = map(lambda x: x.name, node.services) if "SMF" in servicenames and not "NHDP" in servicenames: cmd += " -flooding s-mpr" cmd += " -smfClient %s_smf" % node.name @@ -199,7 +199,7 @@ class NrlOlsrv2(NrlService): validate = ("pidof nrlolsrv2",) @classmethod - def getstartup(cls, node, services): + def getstartup(cls, node): """ Generate the appropriate command-line based on node interfaces. """ @@ -207,7 +207,7 @@ class NrlOlsrv2(NrlService): cmd += " -l /var/log/nrlolsrv2.log" cmd += " -rpipe %s_olsrv2" % node.name - servicenames = map(lambda x: x.name, services) + servicenames = map(lambda x: x.name, node.services) if "SMF" in servicenames: cmd += " -flooding ecds" cmd += " -smfClient %s_smf" % node.name @@ -236,7 +236,7 @@ class OlsrOrg(NrlService): validate = ("pidof olsrd",) @classmethod - def getstartup(cls, node, services): + def getstartup(cls, node): """ Generate the appropriate command-line based on node interfaces. """ @@ -250,7 +250,7 @@ class OlsrOrg(NrlService): return cmd, @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Generate a default olsrd config file to use the broadcast address of 255.255.255.255. """ @@ -598,7 +598,7 @@ class MgenActor(NrlService): shutdown = ("killall mgen",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Generate a startup script for MgenActor. Because mgenActor does not daemonize, it can cause problems in some situations when launched @@ -609,7 +609,7 @@ class MgenActor(NrlService): comments = "" cmd = "mgenBasicActor.py -n %s -a 0.0.0.0" % node.name - servicenames = map(lambda x: x.name, services) + servicenames = map(lambda x: x.name, node.services) netifs = filter(lambda x: not getattr(x, 'control', False), node.netifs()) if len(netifs) == 0: return "" @@ -631,7 +631,7 @@ class Arouted(NrlService): validate = ("pidof arouted",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Return the Quagga.conf or quaggaboot.sh file contents. """ diff --git a/daemon/core/services/quagga.py b/daemon/core/services/quagga.py index d1c9fb74..79e607f2 100644 --- a/daemon/core/services/quagga.py +++ b/daemon/core/services/quagga.py @@ -24,29 +24,28 @@ class Zebra(CoreService): validate = ("pidof zebra",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Return the Quagga.conf or quaggaboot.sh file contents. """ if filename == cls.configs[0]: - return cls.generateQuaggaConf(node, services) + return cls.generateQuaggaConf(node) elif filename == cls.configs[1]: - return cls.generateQuaggaBoot(node, services) + return cls.generateQuaggaBoot(node) elif filename == cls.configs[2]: - return cls.generateVtyshConf(node, services) + return cls.generateVtyshConf(node) else: - raise ValueError("file name (%s) is not a known configuration: %s", - filename, cls.configs) + raise ValueError("file name (%s) is not a known configuration: %s", filename, cls.configs) @classmethod - def generateVtyshConf(cls, node, services): + def generateVtyshConf(cls, node): """ Returns configuration file text. """ return "service integrated-vtysh-config\n" @classmethod - def generateQuaggaConf(cls, node, services): + def generateQuaggaConf(cls, node): """ Returns configuration file text. Other services that depend on zebra will have generatequaggaifcconfig() and generatequaggaconfig() @@ -66,7 +65,7 @@ class Zebra(CoreService): cfgv6 = "" want_ipv4 = False want_ipv6 = False - for s in services: + for s in node.services: if cls.name not in s.depends: continue ifccfg = s.generatequaggaifcconfig(node, ifc) @@ -92,7 +91,7 @@ class Zebra(CoreService): cfg += cfgv6 cfg += "!\n" - for s in services: + for s in node.services: if cls.name not in s.depends: continue cfg += s.generatequaggaconfig(node) @@ -111,7 +110,7 @@ class Zebra(CoreService): raise ValueError("invalid address: %s", x) @classmethod - def generateQuaggaBoot(cls, node, services): + def generateQuaggaBoot(cls, node): """ Generate a shell script used to boot the Quagga daemons. """ @@ -263,7 +262,7 @@ class QuaggaService(CoreService): return False @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): return "" @classmethod diff --git a/daemon/core/services/sdn.py b/daemon/core/services/sdn.py index 4e144ea0..c9769278 100644 --- a/daemon/core/services/sdn.py +++ b/daemon/core/services/sdn.py @@ -15,7 +15,7 @@ class SdnService(CoreService): startindex = 50 @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): return "" @@ -31,16 +31,16 @@ class OvsService(SdnService): shutdown = ('killall ovs-vswitchd', 'killall ovsdb-server') @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): # Check whether the node is running zebra has_zebra = 0 - for s in services: + for s in node.services: if s.name == "zebra": has_zebra = 1 # Check whether the node is running an SDN controller has_sdn_ctrlr = 0 - for s in services: + for s in node.services: if s.name == "ryuService": has_sdn_ctrlr = 1 @@ -106,7 +106,7 @@ class RyuService(SdnService): shutdown = ('killall ryu-manager',) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Return a string that will be written to filename, or sent to the GUI for user customization. diff --git a/daemon/core/services/security.py b/daemon/core/services/security.py index a8318e42..be3db917 100644 --- a/daemon/core/services/security.py +++ b/daemon/core/services/security.py @@ -19,7 +19,7 @@ class VPNClient(CoreService): custom_needed = True @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Return the client.conf and vpnclient.sh file contents to """ @@ -46,7 +46,7 @@ class VPNServer(CoreService): custom_needed = True @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Return the sample server.conf and vpnserver.sh file contents to GUI for user customization. @@ -73,7 +73,7 @@ class IPsec(CoreService): custom_needed = True @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Return the ipsec.conf and racoon.conf file contents to GUI for user customization. @@ -100,7 +100,7 @@ class Firewall(CoreService): custom_needed = True @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Return the firewall rule examples to GUI for user customization. """ diff --git a/daemon/core/services/ucarp.py b/daemon/core/services/ucarp.py index 5009ea6d..80786999 100644 --- a/daemon/core/services/ucarp.py +++ b/daemon/core/services/ucarp.py @@ -20,23 +20,23 @@ class Ucarp(CoreService): validate = ("pidof ucarp",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Return the default file contents """ if filename == cls.configs[0]: - return cls.generateUcarpConf(node, services) + return cls.generateUcarpConf(node) elif filename == cls.configs[1]: - return cls.generateVipUp(node, services) + return cls.generateVipUp(node) elif filename == cls.configs[2]: - return cls.generateVipDown(node, services) + return cls.generateVipDown(node) elif filename == cls.configs[3]: - return cls.generateUcarpBoot(node, services) + return cls.generateUcarpBoot(node) else: raise ValueError @classmethod - def generateUcarpConf(cls, node, services): + def generateUcarpConf(cls, node): """ Returns configuration file text. """ @@ -105,7 +105,7 @@ ${UCARP_EXEC} -B ${UCARP_OPTS} """ % (ucarp_bin, UCARP_ETC) @classmethod - def generateUcarpBoot(cls, node, services): + def generateUcarpBoot(cls, node): """ Generate a shell script used to boot the Ucarp daemons. """ @@ -127,7 +127,7 @@ ${UCARP_CFGDIR}/default.sh """ % UCARP_ETC @classmethod - def generateVipUp(cls, node, services): + def generateVipUp(cls, node): """ Generate a shell script used to start the virtual ip """ @@ -154,7 +154,7 @@ fi """ @classmethod - def generateVipDown(cls, node, services): + def generateVipDown(cls, node): """ Generate a shell script used to stop the virtual ip """ diff --git a/daemon/core/services/utility.py b/daemon/core/services/utility.py index 2bc11893..79f35c16 100644 --- a/daemon/core/services/utility.py +++ b/daemon/core/services/utility.py @@ -26,7 +26,7 @@ class UtilService(CoreService): shutdown = () @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): return "" @@ -37,14 +37,14 @@ class IPForwardService(UtilService): startup = ("sh ipforward.sh",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): if os.uname()[0] == "Linux": - return cls.generateconfiglinux(node, filename, services) + return cls.generateconfiglinux(node, filename) else: raise Exception("unknown platform") @classmethod - def generateconfiglinux(cls, node, filename, services): + def generateconfiglinux(cls, node, filename): cfg = """\ #!/bin/sh # auto-generated by IPForward service (utility.py) @@ -72,7 +72,7 @@ class DefaultRouteService(UtilService): startup = ("sh defaultroute.sh",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): cfg = "#!/bin/sh\n" cfg += "# auto-generated by DefaultRoute service (utility.py)\n" for ifc in node.netifs(): @@ -106,7 +106,7 @@ class DefaultMulticastRouteService(UtilService): startup = ("sh defaultmroute.sh",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): cfg = "#!/bin/sh\n" cfg += "# auto-generated by DefaultMulticastRoute service (utility.py)\n" cfg += "# the first interface is chosen below; please change it " @@ -132,7 +132,7 @@ class StaticRouteService(UtilService): custom_needed = True @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): cfg = "#!/bin/sh\n" cfg += "# auto-generated by StaticRoute service (utility.py)\n#\n" cfg += "# NOTE: this service must be customized to be of any use\n" @@ -173,7 +173,7 @@ class SshService(UtilService): validate = () @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Use a startup script for launching sshd in order to wait for host key generation. @@ -241,7 +241,7 @@ class DhcpService(UtilService): validate = ("pidof dhcpd",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Generate a dhcpd config file using the network address of each interface. @@ -303,7 +303,7 @@ class DhcpClientService(UtilService): validate = ("pidof dhclient",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Generate a script to invoke dhclient on all interfaces. """ @@ -314,7 +314,7 @@ class DhcpClientService(UtilService): cfg += "#mkdir -p /var/run/resolvconf/interface\n" for ifc in node.netifs(): - if hasattr(ifc, 'control') and ifc.control == True: + if hasattr(ifc, 'control') and ifc.control is True: continue cfg += "#ln -s /var/run/resolvconf/interface/%s.dhclient" % ifc.name cfg += " /var/run/resolvconf/resolv.conf\n" @@ -335,7 +335,7 @@ class FtpService(UtilService): validate = ("pidof vsftpd",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Generate a vsftpd.conf configuration file. """ @@ -371,16 +371,16 @@ class HttpService(UtilService): APACHEVER22, APACHEVER24 = (22, 24) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Generate an apache2.conf configuration file. """ if filename == cls.configs[0]: - return cls.generateapache2conf(node, filename, services) + return cls.generateapache2conf(node, filename) elif filename == cls.configs[1]: - return cls.generateenvvars(node, filename, services) + return cls.generateenvvars(node, filename) elif filename == cls.configs[2]: - return cls.generatehtml(node, filename, services) + return cls.generatehtml(node, filename) else: return "" @@ -400,7 +400,7 @@ class HttpService(UtilService): return cls.APACHEVER22 @classmethod - def generateapache2conf(cls, node, filename, services): + def generateapache2conf(cls, node, filename): lockstr = {cls.APACHEVER22: 'LockFile ${APACHE_LOCK_DIR}/accept.lock\n', cls.APACHEVER24: @@ -538,7 +538,7 @@ TraceEnable Off return cfg @classmethod - def generateenvvars(cls, node, filename, services): + def generateenvvars(cls, node, filename): return """\ # this file is used by apache2ctl - generated by utility.py:HttpService # these settings come from a default Ubuntu apache2 installation @@ -553,7 +553,7 @@ export LANG """ @classmethod - def generatehtml(cls, node, filename, services): + def generatehtml(cls, node, filename): body = """\

%s web server

@@ -581,7 +581,7 @@ class PcapService(UtilService): meta = "logs network traffic to pcap packet capture files" @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Generate a startpcap.sh traffic logging script. """ @@ -619,7 +619,7 @@ class RadvdService(UtilService): validate = ("pidof radvd",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Generate a RADVD router advertisement daemon config file using the network address of each interface. @@ -678,7 +678,7 @@ class AtdService(UtilService): shutdown = ("pkill atd",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): return """ #!/bin/sh echo 00001 > /var/spool/cron/atjobs/.SEQ diff --git a/daemon/core/services/xorp.py b/daemon/core/services/xorp.py index da81b33b..58668b1f 100644 --- a/daemon/core/services/xorp.py +++ b/daemon/core/services/xorp.py @@ -23,7 +23,7 @@ class XorpRtrmgr(CoreService): validate = ("pidof xorp_rtrmgr",) @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): """ Returns config.boot configuration file text. Other services that depend on this will have generatexorpconfig() hooks that are @@ -39,7 +39,7 @@ class XorpRtrmgr(CoreService): cfg += " }\n" cfg += "}\n\n" - for s in services: + for s in node.services: try: s.depends.index(cls.name) cfg += s.generatexorpconfig(node) @@ -154,7 +154,7 @@ class XorpService(CoreService): return "0.0.0.0" @classmethod - def generateconfig(cls, node, filename, services): + def generateconfig(cls, node, filename): return "" @classmethod