updates to use dependency based startup logic
This commit is contained in:
parent
08956e7b93
commit
b868454b5e
5 changed files with 15 additions and 16 deletions
|
@ -414,18 +414,9 @@ class CoreServices(object):
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
services = sorted(node.services, key=lambda x: x.startindex)
|
services = sorted(node.services, key=lambda x: x.startindex)
|
||||||
for service in services:
|
boot_paths = self.node_service_dependencies(services)
|
||||||
if len(str(service.starttime)) > 0:
|
for boot_path in boot_paths:
|
||||||
try:
|
result = pool.apply_async(self.boot_node_dependencies, (node, boot_path, services))
|
||||||
starttime = float(service.starttime)
|
|
||||||
if starttime > 0.0:
|
|
||||||
fn = self.bootnodeservice
|
|
||||||
self.session.event_loop.add_event(starttime, fn, node, service, services, False)
|
|
||||||
continue
|
|
||||||
except ValueError:
|
|
||||||
logger.exception("error converting start time to float")
|
|
||||||
# self.bootnodeservice(node, service, services)
|
|
||||||
result = pool.apply_async(self.bootnodeservice, (node, service, services))
|
|
||||||
results.append(result)
|
results.append(result)
|
||||||
|
|
||||||
pool.close()
|
pool.close()
|
||||||
|
@ -433,6 +424,11 @@ class CoreServices(object):
|
||||||
for result in results:
|
for result in results:
|
||||||
result.get()
|
result.get()
|
||||||
|
|
||||||
|
def boot_node_dependencies(self, node, boot_path, all_services):
|
||||||
|
logger.info("booting node service dependencies: %s", boot_path)
|
||||||
|
for service in boot_path:
|
||||||
|
self.bootnodeservice(node, service, all_services)
|
||||||
|
|
||||||
def bootnodeservice(self, node, service, services):
|
def bootnodeservice(self, node, service, services):
|
||||||
"""
|
"""
|
||||||
Start a service on a node. Create private dirs, generate config
|
Start a service on a node. Create private dirs, generate config
|
||||||
|
@ -518,11 +514,11 @@ class CoreServices(object):
|
||||||
|
|
||||||
status = 0
|
status = 0
|
||||||
for cmd in cmds:
|
for cmd in cmds:
|
||||||
logger.info("validating service %s using: %s", service.name, cmd)
|
logger.info("validating service(%s) using: %s", service.name, cmd)
|
||||||
try:
|
try:
|
||||||
node.check_cmd(cmd)
|
node.check_cmd(cmd)
|
||||||
except CoreCommandError:
|
except CoreCommandError as e:
|
||||||
logger.exception("validate command failed")
|
logger.exception("node(%s) service(%s) validate command failed", node.name, service.name)
|
||||||
status = -1
|
status = -1
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
|
@ -94,6 +94,7 @@ class BirdService(CoreService):
|
||||||
name = None
|
name = None
|
||||||
executables = ("bird",)
|
executables = ("bird",)
|
||||||
group = "BIRD"
|
group = "BIRD"
|
||||||
|
dependencies = ("bird",)
|
||||||
depends = ("bird",)
|
depends = ("bird",)
|
||||||
dirs = ()
|
dirs = ()
|
||||||
configs = ()
|
configs = ()
|
||||||
|
|
|
@ -104,7 +104,7 @@ from core.service import ServiceManager
|
||||||
try:
|
try:
|
||||||
from docker import Client
|
from docker import Client
|
||||||
except ImportError:
|
except ImportError:
|
||||||
logger.error("failure to import docker")
|
logger.warns("missing python docker bindings")
|
||||||
|
|
||||||
|
|
||||||
class DockerService(CoreService):
|
class DockerService(CoreService):
|
||||||
|
|
|
@ -222,6 +222,7 @@ class QuaggaService(CoreService):
|
||||||
"""
|
"""
|
||||||
name = None
|
name = None
|
||||||
group = "Quagga"
|
group = "Quagga"
|
||||||
|
dependencies = ("zebra",)
|
||||||
depends = ("zebra",)
|
depends = ("zebra",)
|
||||||
dirs = ()
|
dirs = ()
|
||||||
configs = ()
|
configs = ()
|
||||||
|
|
|
@ -78,6 +78,7 @@ class XorpService(CoreService):
|
||||||
name = None
|
name = None
|
||||||
executables = ("xorp_rtrmgr",)
|
executables = ("xorp_rtrmgr",)
|
||||||
group = "XORP"
|
group = "XORP"
|
||||||
|
dependencies = ("xorp_rtrmgr",)
|
||||||
depends = ("xorp_rtrmgr",)
|
depends = ("xorp_rtrmgr",)
|
||||||
dirs = ()
|
dirs = ()
|
||||||
configs = ()
|
configs = ()
|
||||||
|
|
Loading…
Add table
Reference in a new issue