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:
parent
191a9e9909
commit
dcc683dd38
8 changed files with 41 additions and 37 deletions
|
@ -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:
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue