daemon: refactored how to get required commands, added usage of this func for validating distributed servers when added

This commit is contained in:
Blake Harnden 2020-07-18 11:56:48 -07:00
parent 6d4434bc12
commit 5e2ca0f549
3 changed files with 28 additions and 8 deletions

View file

@ -9,7 +9,7 @@ import core.services
from core import configservices, utils from core import configservices, utils
from core.configservice.manager import ConfigServiceManager from core.configservice.manager import ConfigServiceManager
from core.emulator.session import Session from core.emulator.session import Session
from core.executables import COMMON_REQUIREMENTS, OVS_REQUIREMENTS, VCMD_REQUIREMENTS from core.executables import get_requirements
from core.services.coreservices import ServiceManager from core.services.coreservices import ServiceManager
@ -79,13 +79,8 @@ class CoreEmu:
:return: nothing :return: nothing
:raises core.errors.CoreError: when an executable does not exist on path :raises core.errors.CoreError: when an executable does not exist on path
""" """
requirements = COMMON_REQUIREMENTS
use_ovs = self.config.get("ovs") == "1" use_ovs = self.config.get("ovs") == "1"
if use_ovs: for requirement in get_requirements(use_ovs):
requirements += OVS_REQUIREMENTS
else:
requirements += VCMD_REQUIREMENTS
for requirement in requirements:
utils.which(requirement, required=True) utils.which(requirement, required=True)
def load_services(self) -> None: def load_services(self) -> None:

View file

@ -14,7 +14,8 @@ from fabric import Connection
from invoke import UnexpectedExit from invoke import UnexpectedExit
from core import utils from core import utils
from core.errors import CoreCommandError from core.errors import CoreCommandError, CoreError
from core.executables import get_requirements
from core.nodes.interface import GreTap from core.nodes.interface import GreTap
from core.nodes.network import CoreNetwork, CtrlNet from core.nodes.network import CoreNetwork, CtrlNet
@ -131,8 +132,17 @@ class DistributedController:
:param name: distributed server name :param name: distributed server name
:param host: distributed server host address :param host: distributed server host address
:return: nothing :return: nothing
:raises CoreError: when there is an error validating server
""" """
server = DistributedServer(name, host) server = DistributedServer(name, host)
for requirement in get_requirements(self.session.use_ovs()):
try:
server.remote_cmd(f"which {requirement}")
except CoreCommandError:
raise CoreError(
f"server({server.name}) failed validation for "
f"command({requirement})"
)
self.servers[name] = server self.servers[name] = server
cmd = f"mkdir -p {self.session.session_dir}" cmd = f"mkdir -p {self.session.session_dir}"
server.remote_cmd(cmd) server.remote_cmd(cmd)

View file

@ -14,3 +14,18 @@ OVS_VSCTL: str = "ovs-vsctl"
COMMON_REQUIREMENTS: List[str] = [SYSCTL, IP, ETHTOOL, TC, EBTABLES, MOUNT, UMOUNT] COMMON_REQUIREMENTS: List[str] = [SYSCTL, IP, ETHTOOL, TC, EBTABLES, MOUNT, UMOUNT]
VCMD_REQUIREMENTS: List[str] = [VNODED, VCMD] VCMD_REQUIREMENTS: List[str] = [VNODED, VCMD]
OVS_REQUIREMENTS: List[str] = [OVS_VSCTL] OVS_REQUIREMENTS: List[str] = [OVS_VSCTL]
def get_requirements(use_ovs: bool) -> List[str]:
"""
Retrieve executable requirements needed to run CORE.
:param use_ovs: True if OVS is being used, False otherwise
:return: list of executable requirements
"""
requirements = COMMON_REQUIREMENTS
if use_ovs:
requirements += OVS_REQUIREMENTS
else:
requirements += VCMD_REQUIREMENTS
return requirements