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,7 +6,7 @@ import logging
import os
import shutil
import threading
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Type
import netaddr
@ -14,7 +14,7 @@ from core import utils
from core.constants import MOUNT_BIN, VNODED_BIN
from core.emulator.data import LinkData, NodeData
from core.emulator.enumerations import LinkTypes, NodeTypes
from core.errors import CoreCommandError
from core.errors import CoreCommandError, CoreError
from core.nodes import client
from core.nodes.interface import CoreInterface, TunTap, Veth
from core.nodes.netclient import LinuxNetClient, get_net_client
@ -22,6 +22,9 @@ from core.nodes.netclient import LinuxNetClient, get_net_client
if TYPE_CHECKING:
from core.emulator.distributed import DistributedServer
from core.emulator.session import Session
from core.configservice.base import ConfigService
ConfigServiceType = Type[ConfigService]
_DEFAULT_MTU = 1500
@ -277,18 +280,21 @@ class CoreNodeBase(NodeBase):
"""
super().__init__(session, _id, name, start, server)
self.services = []
self.config_services = set()
self.config_services = {}
self.nodedir = None
self.tmpnodedir = False
def start_config_services(self) -> None:
"""
Start configuration services for this node.
def add_config_service(self, service_class: "ConfigServiceType"):
name = service_class.name
if name in self.config_services:
raise CoreError(f"node({self.name}) already has service({name})")
self.config_services[name] = service_class(self)
:return: nothing
"""
for service in self.config_services:
service.start()
def set_service_config(self, name: str, data: Dict[str, str]) -> None:
service = self.config_services.get(name)
if service is None:
raise CoreError(f"node({self.name}) does not have service({name})")
service.set_config(data)
def makenodedir(self) -> None:
"""