diff --git a/exegol/config/UserConfig.py b/exegol/config/UserConfig.py index 2a0949b7..438e6b4b 100644 --- a/exegol/config/UserConfig.py +++ b/exegol/config/UserConfig.py @@ -3,6 +3,7 @@ from exegol.config.ConstantConfig import ConstantConfig from exegol.console.ConsoleFormat import boolFormatter +from exegol.model.ExegolNetwork import ExegolNetworkMode from exegol.utils.DataFileUtils import DataFileUtils from exegol.utils.MetaSingleton import MetaSingleton from exegol.utils.NetworkUtils import NetworkUtils @@ -35,7 +36,7 @@ def __init__(self): self.desktop_default_localhost: bool = True self.desktop_default_proto: str = "http" # Network - self.network_default_mode: str = "host" + self.network_default_mode: str = ExegolNetworkMode.host.name self.network_fallback_mode: str = "nat" self.network_dedicated_range: str = "" # Finding a default network can require a user interaction, loading only if needed from NetworkUtils.get_default_large_range_text(). self.network_default_netmask: int = 28 diff --git a/exegol/console/cli/actions/GenericParameters.py b/exegol/console/cli/actions/GenericParameters.py index 22fc1b5b..4d79fe65 100644 --- a/exegol/console/cli/actions/GenericParameters.py +++ b/exegol/console/cli/actions/GenericParameters.py @@ -5,6 +5,7 @@ from exegol.config.UserConfig import UserConfig from exegol.console.cli.ExegolCompleter import ContainerCompleter, ImageCompleter, VoidCompleter, DesktopConfigCompleter from exegol.console.cli.actions.Command import Option, GroupArg +from exegol.model.ExegolNetwork import ExegolNetworkMode from exegol.utils.NetworkUtils import NetworkUtils @@ -165,7 +166,7 @@ def __init__(self, groupArgs: List[GroupArg]): self.network = Option("--network", dest="network", action="store", - default="host", + default=ExegolNetworkMode.host.name, choices=NetworkUtils.get_options(), help="Select the type of network to which the container will be attached (default: [blue]host[/blue])") self.share_timezone = Option("--disable-shared-timezones", diff --git a/exegol/model/ContainerConfig.py b/exegol/model/ContainerConfig.py index 5011cf80..ec0698c9 100644 --- a/exegol/model/ContainerConfig.py +++ b/exegol/model/ContainerConfig.py @@ -872,7 +872,7 @@ def setWorkspaceShare(self, host_directory): logger.verbose(f"Config: Sharing workspace directory {path}") self.__workspace_custom_path = str(path) - def setNetworkMode(self, network: Union[ExegolNetworkMode, str] = "host"): + def setNetworkMode(self, network: Union[ExegolNetworkMode, str] = ExegolNetworkMode.host): """Set container's network mode, true for host, false for bridge""" try: if type(network) is str: diff --git a/exegol/model/ExegolNetwork.py b/exegol/model/ExegolNetwork.py index 9a1a7286..3b6aa066 100644 --- a/exegol/model/ExegolNetwork.py +++ b/exegol/model/ExegolNetwork.py @@ -4,7 +4,7 @@ class DockerDrivers(Enum): """Enum for Docker driver type""" - Disable = "none" + Disable = 'none' Host = 'host' Bridge = 'bridge' @@ -25,13 +25,12 @@ class ExegolNetwork: def __init__(self, net_mode: ExegolNetworkMode = ExegolNetworkMode.host, net_name: Optional[str] = None): self.__net_mode: ExegolNetworkMode = net_mode - self.__net_name: str = net_name if net_name is not None else net_mode.value - if self.__net_mode == ExegolNetworkMode.disable: - self.__docker_net_mode: DockerDrivers = DockerDrivers.Disable - elif self.__net_mode == ExegolNetworkMode.host: - self.__docker_net_mode = DockerDrivers.Host - else: + try: + # Handle Disable and Host drivers + self.__docker_net_mode = DockerDrivers[self.__net_mode.value] + except KeyError: self.__docker_net_mode = self.__DEFAULT_NETWORK_DRIVER + self.__net_name = net_name if net_name else self.__docker_net_mode.value @classmethod def instance_network(cls, mode: Union[ExegolNetworkMode, str], container_name: str): @@ -51,10 +50,14 @@ def instance_network(cls, mode: Union[ExegolNetworkMode, str], container_name: s def parse_networks(cls, networks: dict, container_name: str) -> List["ExegolNetwork"]: results = [] for network, config in networks.items(): - try: - net_mode = ExegolNetworkMode(network) - except ValueError: - net_mode = ExegolNetworkMode.nat if network == container_name else ExegolNetworkMode.attached + if network == DockerDrivers.Host.value: + net_mode = ExegolNetworkMode.host + elif network == DockerDrivers.Bridge.value: + net_mode = ExegolNetworkMode.docker + elif network == container_name: + net_mode = ExegolNetworkMode.nat + else: + net_mode = ExegolNetworkMode.attached results.append(cls(net_mode=net_mode, net_name=network)) return results