added config service manager to CoreEmu and made it possible to create a session and nodes with config services from a script

This commit is contained in:
Blake Harnden 2020-01-17 21:09:51 -08:00
parent 191a9e9909
commit dcc683dd38
8 changed files with 41 additions and 37 deletions

View file

@ -6,6 +6,8 @@ import sys
from typing import Mapping, Type
import core.services
from core import configservices
from core.configservice.manager import ConfigServiceManager
from core.emulator.session import Session
from core.services.coreservices import ServiceManager
@ -55,6 +57,11 @@ class CoreEmu:
self.service_errors = []
self.load_services()
# config services
self.service_manager = ConfigServiceManager()
config_services_path = os.path.abspath(os.path.dirname(configservices.__file__))
self.service_manager.load(config_services_path)
# catch exit event
atexit.register(self.shutdown)
@ -97,6 +104,7 @@ class CoreEmu:
while _id in self.sessions:
_id += 1
session = _cls(_id, config=self.config)
session.service_manager = self.service_manager
logging.info("created session: %s", _id)
self.sessions[_id] = session
return session

View file

@ -75,6 +75,7 @@ class NodeOptions:
self.icon = None
self.opaque = None
self.services = []
self.config_services = []
self.x = None
self.y = None
self.lat = None

View file

@ -161,6 +161,9 @@ class Session:
"host": ("DefaultRoute", "SSH"),
}
# config services
self.service_manager = None
@classmethod
def get_node_class(cls, _type: NodeTypes) -> Type[NodeBase]:
"""
@ -726,6 +729,11 @@ class Session:
logging.debug("set node type: %s", node.type)
self.services.add_services(node, node.type, options.services)
# add config services
for name in options.config_services:
service_class = self.service_manager.get_service(name)
node.add_config_service(service_class)
# ensure default emane configuration
if isinstance(node, EmaneNet) and options.emane:
self.emane.set_model_config(_id, options.emane)
@ -1602,7 +1610,8 @@ class Session:
logging.info("booting node(%s): %s", node.name, [x.name for x in node.services])
self.add_remove_control_interface(node=node, remove=False)
self.services.boot_services(node)
node.start_config_services()
for service in node.config_services.values():
service.start()
def boot_nodes(self) -> List[Exception]:
"""