removed service load methids, since they are no longer used, added way for custom service load code to facilitate the unique docker service case

This commit is contained in:
Blake J. Harnden 2017-08-07 16:40:39 -07:00
parent 73eea80f51
commit f3863ead73
11 changed files with 26 additions and 117 deletions

View file

@ -138,7 +138,9 @@ class ServiceManager(object):
module = importlib.import_module(import_statement) module = importlib.import_module(import_statement)
members = inspect.getmembers(module, lambda x: _is_service(module, x)) members = inspect.getmembers(module, lambda x: _is_service(module, x))
for member in members: for member in members:
cls.add(member[1]) clazz = member[1]
clazz.on_load()
cls.add(clazz)
class CoreServices(ConfigurableManager): class CoreServices(ConfigurableManager):
@ -943,6 +945,10 @@ class CoreService(object):
""" """
self._custom = True self._custom = True
@classmethod
def on_load(cls):
pass
@classmethod @classmethod
def getconfigfilenames(cls, nodenum, services): def getconfigfilenames(cls, nodenum, services):
""" """

View file

@ -3,7 +3,6 @@ bird.py: defines routing services provided by the BIRD Internet Routing Daemon.
""" """
from core.service import CoreService from core.service import CoreService
from core.service import ServiceManager
class Bird(CoreService): class Bird(CoreService):
@ -238,21 +237,9 @@ class BirdStatic(BirdService):
@classmethod @classmethod
def generatebirdconfig(cls, node): def generatebirdconfig(cls, node):
cfg = '/* This is a sample config that must be customized */\n' cfg = '/* This is a sample config that must be customized */\n'
cfg += 'protocol static {\n' cfg += 'protocol static {\n'
cfg += '# route 0.0.0.0/0 via 198.51.100.130; # Default route. Do NOT advertise on BGP !\n' cfg += '# route 0.0.0.0/0 via 198.51.100.130; # Default route. Do NOT advertise on BGP !\n'
cfg += '# route 203.0.113.0/24 reject; # Sink route\n' cfg += '# route 203.0.113.0/24 reject; # Sink route\n'
cfg += '# route 10.2.0.0/24 via "arc0"; # Secondary network\n' cfg += '# route 10.2.0.0/24 via "arc0"; # Secondary network\n'
cfg += '}\n\n' cfg += '}\n\n'
return cfg return cfg
def load_services():
# Register all protocols
ServiceManager.add(Bird)
ServiceManager.add(BirdOspf)
ServiceManager.add(BirdBgp)
# ServiceManager.add(BirdRadv) # untested
ServiceManager.add(BirdRip)
ServiceManager.add(BirdStatic)

View file

@ -153,27 +153,25 @@ done
""" % (cls._image,) """ % (cls._image,)
return cfg return cfg
@classmethod
def on_load(cls):
logger.debug("loading custom docker services")
def load_services(): if "Client" in globals():
ServiceManager.add(DockerService) client = Client(version="1.10")
images = client.images()
del client
else:
images = []
# This auto-loads Docker images having a :core tag, adding them to the list for image in images:
# of services under the "Docker" group. if u"<none>" in image["RepoTags"][0]:
# TODO: change this logic, should be a proper configurable, or docker needs to be a required library
# TODO: also should make this call possible real time for reloading removing "magic" auto loading on import
if 'Client' in globals():
client = Client(version='1.10')
images = client.images()
del client
else:
images = []
for image in images:
if u'<none>' in image['RepoTags'][0]:
continue
for repo in image['RepoTags']:
if u':core' not in repo:
continue continue
dockerid = repo.encode('ascii', 'ignore').split(':')[0] for repo in image["RepoTags"]:
sub_class = type('SubClass', (DockerService,), {'_name': dockerid, '_image': dockerid}) if u":core" not in repo:
ServiceManager.add(sub_class) continue
del images dockerid = repo.encode("ascii", "ignore").split(":")[0]
sub_class = type("SubClass", (DockerService,), {"_name": dockerid, "_image": dockerid})
ServiceManager.add(sub_class)
del images

View file

@ -6,7 +6,6 @@ nrl.py: defines services provided by NRL protolib tools hosted here:
from core.misc import utils from core.misc import utils
from core.misc.ipaddress import Ipv4Prefix from core.misc.ipaddress import Ipv4Prefix
from core.service import CoreService from core.service import CoreService
from core.service import ServiceManager
class NrlService(CoreService): class NrlService(CoreService):
@ -651,16 +650,3 @@ done
cfg += " stability 10" cfg += " stability 10"
cfg += " 2>&1 > /var/log/arouted.log &\n\n" cfg += " 2>&1 > /var/log/arouted.log &\n\n"
return cfg return cfg
def load_services():
ServiceManager.add(MgenSinkService)
ServiceManager.add(NrlNhdp)
ServiceManager.add(NrlSmf)
ServiceManager.add(NrlOlsr)
ServiceManager.add(NrlOlsrv2)
ServiceManager.add(OlsrOrg)
# this line is required to add the above class to the list of available services
ServiceManager.add(MgenActor)
# experimental
# ServiceManager.add(Arouted)

View file

@ -7,7 +7,6 @@ from core.enumerations import LinkTypes, NodeTypes
from core.misc import ipaddress from core.misc import ipaddress
from core.misc import nodeutils from core.misc import nodeutils
from core.service import CoreService from core.service import CoreService
from core.service import ServiceManager
class Zebra(CoreService): class Zebra(CoreService):
@ -593,15 +592,3 @@ class Xpimd(QuaggaService):
@classmethod @classmethod
def generatequaggaifcconfig(cls, node, ifc): def generatequaggaifcconfig(cls, node, ifc):
return ' ip mfea\n ip igmp\n ip pim\n' return ' ip mfea\n ip igmp\n ip pim\n'
def load_services():
ServiceManager.add(Zebra)
ServiceManager.add(Ospfv2)
ServiceManager.add(Ospfv3)
ServiceManager.add(Ospfv3mdr)
ServiceManager.add(Bgp)
ServiceManager.add(Rip)
ServiceManager.add(Ripng)
ServiceManager.add(Babel)
ServiceManager.add(Xpimd)

View file

@ -5,7 +5,6 @@ sdn.py defines services to start Open vSwitch and the Ryu SDN Controller.
import re import re
from core.service import CoreService from core.service import CoreService
from core.service import ServiceManager
class SdnService(CoreService): class SdnService(CoreService):
@ -121,8 +120,3 @@ class RyuService(SdnService):
cfg += "# auto-generated by ryuService (ryuService.py)\n" cfg += "# auto-generated by ryuService (ryuService.py)\n"
cfg += '/usr/local/bin/ryu-manager --observe-links %s/ofctl_rest.py %s/rest_topology.py' % (app_path, app_path) cfg += '/usr/local/bin/ryu-manager --observe-links %s/ofctl_rest.py %s/rest_topology.py' % (app_path, app_path)
return cfg return cfg
def load_services():
ServiceManager.add(OvsService)
ServiceManager.add(RyuService)

View file

@ -6,7 +6,6 @@ firewall)
from core import constants from core import constants
from core import logger from core import logger
from core.service import CoreService from core.service import CoreService
from core.service import ServiceManager
class VPNClient(CoreService): class VPNClient(CoreService):
@ -115,11 +114,3 @@ class Firewall(CoreService):
logger.exception("Error opening Firewall configuration template (%s)", fname) logger.exception("Error opening Firewall configuration template (%s)", fname)
return cfg return cfg
def load_services():
# this line is required to add the above class to the list of available services
ServiceManager.add(VPNClient)
ServiceManager.add(VPNServer)
ServiceManager.add(IPsec)
ServiceManager.add(Firewall)

View file

@ -2,7 +2,6 @@ from inspect import isclass
from sys import maxint from sys import maxint
from core.service import CoreService from core.service import CoreService
from core.service import ServiceManager
class Startup(CoreService): class Startup(CoreService):
@ -37,7 +36,3 @@ class Startup(CoreService):
if start: if start:
script += start + '\n' script += start + '\n'
return script return script
def load_services():
ServiceManager.add(Startup)

View file

@ -3,7 +3,6 @@ ucarp.py: defines high-availability IP address controlled by ucarp
""" """
from core.service import CoreService from core.service import CoreService
from core.service import ServiceManager
UCARP_ETC = "/usr/local/etc/ucarp" UCARP_ETC = "/usr/local/etc/ucarp"
@ -179,7 +178,3 @@ fi
""" """
def load_services():
ServiceManager.add(Ucarp)

View file

@ -10,7 +10,6 @@ from core.misc import utils
from core.misc.ipaddress import Ipv4Prefix from core.misc.ipaddress import Ipv4Prefix
from core.misc.ipaddress import Ipv6Prefix from core.misc.ipaddress import Ipv6Prefix
from core.service import CoreService from core.service import CoreService
from core.service import ServiceManager
class UtilService(CoreService): class UtilService(CoreService):
@ -724,19 +723,3 @@ class UserDefinedService(UtilService):
_name = "UserDefined" _name = "UserDefined"
_startindex = 50 _startindex = 50
_meta = "Customize this service to do anything upon startup." _meta = "Customize this service to do anything upon startup."
def load_services():
ServiceManager.add(IPForwardService)
ServiceManager.add(DefaultRouteService)
ServiceManager.add(DefaultMulticastRouteService)
ServiceManager.add(StaticRouteService)
ServiceManager.add(SshService)
ServiceManager.add(DhcpService)
ServiceManager.add(DhcpClientService)
ServiceManager.add(FtpService)
ServiceManager.add(HttpService)
ServiceManager.add(PcapService)
ServiceManager.add(RadvdService)
ServiceManager.add(AtdService)
ServiceManager.add(UserDefinedService)

View file

@ -4,7 +4,6 @@ xorp.py: defines routing services provided by the XORP routing suite.
from core import logger from core import logger
from core.service import CoreService from core.service import CoreService
from core.service import ServiceManager
class XorpRtrmgr(CoreService): class XorpRtrmgr(CoreService):
@ -468,15 +467,3 @@ class XorpOlsr(XorpService):
cfg += " }\n" cfg += " }\n"
cfg += "}\n" cfg += "}\n"
return cfg return cfg
def load_services():
ServiceManager.add(XorpRtrmgr)
ServiceManager.add(XorpOspfv2)
ServiceManager.add(XorpOspfv3)
ServiceManager.add(XorpBgp)
ServiceManager.add(XorpRip)
ServiceManager.add(XorpRipng)
ServiceManager.add(XorpPimSm4)
ServiceManager.add(XorpPimSm6)
ServiceManager.add(XorpOlsr)