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

This commit is contained in:
Blake J. Harnden 2018-06-21 14:56:30 -07:00
parent b868454b5e
commit 0aca9d7809
11 changed files with 123 additions and 147 deletions

View file

@ -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)

View file

@ -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.

View file

@ -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.
"""

View file

@ -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

View file

@ -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.

View file

@ -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.
"""

View file

@ -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
"""

View file

@ -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 = """\
<!-- generated by utility.py:HttpService -->
<h1>%s web server</h1>
@ -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

View file

@ -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