From 24e34b00a0c270dfbaa4fa689cf2d39af6d83b77 Mon Sep 17 00:00:00 2001 From: Roman Date: Thu, 1 Feb 2024 18:31:43 +0800 Subject: [PATCH] test: add run_container func to Docker Mananger --- src/node/docker_mananger.py | 24 ++++++++++++++++++++++++ src/node/waku_node.py | 6 ++++++ 2 files changed, 30 insertions(+) diff --git a/src/node/docker_mananger.py b/src/node/docker_mananger.py index 0e00113c..24225ff2 100644 --- a/src/node/docker_mananger.py +++ b/src/node/docker_mananger.py @@ -55,6 +55,30 @@ class DockerManager: return container + def run_container(self, image_name, ports, args, log_path, container_ip, volumes): + cli_args = [] + for key, value in args.items(): + if isinstance(value, list): # Check if value is a list + cli_args.extend([f"--{key}={item}" for item in value]) # Add a command for each item in the list + else: + cli_args.append(f"--{key}={value}") # Add a single command + port_bindings = {f"{port}/tcp": ("", port) for port in ports} + logger.debug(f"Running container with image {image_name}") + logger.debug(f"Using args {cli_args}") + container = self._client.containers.exec_run( + image_name, command=cli_args, ports=port_bindings, detach=True, remove=True, auto_remove=True, volumes=volumes + ) + + network = self._client.networks.get(NETWORK_NAME) + network.connect(container, ipv4_address=container_ip) + + logger.debug(f"Container started with ID {container.short_id}. Setting up logs at {log_path}") + log_thread = threading.Thread(target=self._log_container_output, args=(container, log_path)) + log_thread.daemon = True + log_thread.start() + + return container + def _log_container_output(self, container, log_path): os.makedirs(os.path.dirname(log_path), exist_ok=True) with open(log_path, "wb+") as log_file: diff --git a/src/node/waku_node.py b/src/node/waku_node.py index 375ae2d9..ca97ea1b 100644 --- a/src/node/waku_node.py +++ b/src/node/waku_node.py @@ -107,9 +107,15 @@ class WakuNode: ) if default_args["rln-register-only"]: + self._container = self._docker_manager.run_container( + self._docker_manager.image, self._ports, default_args, self._log_path, self._ext_ip, self._volumes + ) logger.debug(f"Executed container from image {self._image_name}. REST: {self._rest_port} to register RLN") else: + self._container = self._docker_manager.start_container( + self._docker_manager.image, self._ports, default_args, self._log_path, self._ext_ip, self._volumes + ) logger.debug(f"Started container from image {self._image_name}. REST: {self._rest_port} with RLN enabled") DS.waku_nodes.append(self) delay(1) # if we fire requests to soon after starting the node will sometimes fail to start correctly