From a595fea3a3ac786cc67b3beba87db5e4da462f30 Mon Sep 17 00:00:00 2001 From: "Jessica S. Yu" <15913767+jessicasyu@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:19:19 -0400 Subject: [PATCH] Change create docker volume task return to volume name (#70) * Change create docker volume return to volume name * Rename volume name in docker tasks --- .../docker/create_docker_volume.py | 6 ++--- .../docker/remove_docker_volume.py | 6 ++--- .../docker/run_docker_command.py | 6 ++--- .../docker/submit_docker_job.py | 6 ++--- .../docker/test_create_docker_volume.py | 25 +++++-------------- .../docker/test_remove_docker_volume.py | 7 +++--- .../docker/test_run_docker_command.py | 7 +++--- .../docker/test_submit_docker_job.py | 9 +++---- 8 files changed, 28 insertions(+), 44 deletions(-) diff --git a/src/container_collection/docker/create_docker_volume.py b/src/container_collection/docker/create_docker_volume.py index b3c1efe..d05cce2 100644 --- a/src/container_collection/docker/create_docker_volume.py +++ b/src/container_collection/docker/create_docker_volume.py @@ -1,7 +1,7 @@ from docker import APIClient -def create_docker_volume(api_client: APIClient, path: str) -> dict: +def create_docker_volume(api_client: APIClient, path: str) -> str: """ Create a docker volume that copies content to specified path. @@ -15,9 +15,9 @@ def create_docker_volume(api_client: APIClient, path: str) -> dict: Returns ------- : - Created volume reference object. + Created volume name. """ return api_client.create_volume( driver="local", driver_opts={"type": "none", "device": path, "o": "bind"} - ) + )["Name"] diff --git a/src/container_collection/docker/remove_docker_volume.py b/src/container_collection/docker/remove_docker_volume.py index 9afc177..4a58fe9 100644 --- a/src/container_collection/docker/remove_docker_volume.py +++ b/src/container_collection/docker/remove_docker_volume.py @@ -1,7 +1,7 @@ from docker import APIClient -def remove_docker_volume(api_client: APIClient, volume_name: str) -> None: +def remove_docker_volume(api_client: APIClient, volume: str) -> None: """ Remove docker volume. @@ -9,8 +9,8 @@ def remove_docker_volume(api_client: APIClient, volume_name: str) -> None: ---------- api_client Docker API client. - volume_name + volume Name of the docker volume. """ - api_client.remove_volume(volume_name) + api_client.remove_volume(volume) diff --git a/src/container_collection/docker/run_docker_command.py b/src/container_collection/docker/run_docker_command.py index f80051d..6483bdf 100644 --- a/src/container_collection/docker/run_docker_command.py +++ b/src/container_collection/docker/run_docker_command.py @@ -10,7 +10,7 @@ def run_docker_command( client: DockerClient, image: str, command: list[str], - volume_name: str | None = None, + volume: str | None = None, environment: list | None = None, *, detach: bool, @@ -26,7 +26,7 @@ def run_docker_command( Docker image. command Command list passed to container. - volume_name + volume Name of the docker volume. environment List of environment variables as strings. @@ -36,7 +36,7 @@ def run_docker_command( """ environment = [] if environment is None else environment - volumes = {} if volume_name is None else {volume_name: {"bind": "/mnt", "mode": "rw"}} + volumes = {} if volume is None else {volume: {"bind": "/mnt", "mode": "rw"}} client.containers.run( image, diff --git a/src/container_collection/docker/submit_docker_job.py b/src/container_collection/docker/submit_docker_job.py index 9c328ac..27811bc 100644 --- a/src/container_collection/docker/submit_docker_job.py +++ b/src/container_collection/docker/submit_docker_job.py @@ -1,7 +1,7 @@ from docker import APIClient -def submit_docker_job(api_client: APIClient, job_definition: dict, volume_name: str) -> str: +def submit_docker_job(api_client: APIClient, job_definition: dict, volume: str) -> str: """ Submit Docker job. @@ -11,7 +11,7 @@ def submit_docker_job(api_client: APIClient, job_definition: dict, volume_name: Docker API client. job_definition Docker job definition used to create job container. - volume_name + volume Name of the docker volume. Returns @@ -20,7 +20,7 @@ def submit_docker_job(api_client: APIClient, job_definition: dict, volume_name: Container ID. """ - host_config = api_client.create_host_config(binds={volume_name: {"bind": "/mnt", "mode": "rw"}}) + host_config = api_client.create_host_config(binds={volume: {"bind": "/mnt", "mode": "rw"}}) container = api_client.create_container(**job_definition, host_config=host_config) container_id = container.get("Id") diff --git a/tests/container_collection/docker/test_create_docker_volume.py b/tests/container_collection/docker/test_create_docker_volume.py index bffe697..8a366c9 100644 --- a/tests/container_collection/docker/test_create_docker_volume.py +++ b/tests/container_collection/docker/test_create_docker_volume.py @@ -1,5 +1,3 @@ -import datetime -import secrets import unittest from unittest import mock @@ -8,30 +6,19 @@ from container_collection.docker.create_docker_volume import create_docker_volume -def mock_create_volume(**kwargs): - name = kwargs.get("name", secrets.token_hex(32)) - return { - "CreatedAt": datetime.datetime.now().astimezone().replace(microsecond=0).isoformat(), - "Driver": kwargs.get("driver", "local"), - "Labels": kwargs.get("labels", {"com.docker.volume.anonymous": ""}), - "Mountpoint": f"/var/lib/docker/volumes/{name}/_data", - "Name": name, - "Options": kwargs.get("driver_opts", None), - "Scope": "local", - } - - class TestCreateDockerVolume(unittest.TestCase): def test_create_docker_volume(self): + expected_volume = "volume-name" client = mock.MagicMock(spec=APIClient) - client.create_volume.side_effect = mock_create_volume + client.create_volume.return_value = {"Name": expected_volume} path = "/docker/volume/path" volume = create_docker_volume(client, path) - self.assertEqual(path, volume["Options"]["device"]) - self.assertEqual("none", volume["Options"]["type"]) - self.assertEqual("bind", volume["Options"]["o"]) + client.create_volume.assert_called_with( + driver="local", driver_opts={"type": "none", "device": path, "o": "bind"} + ) + self.assertEqual(expected_volume, volume) if __name__ == "__main__": diff --git a/tests/container_collection/docker/test_remove_docker_volume.py b/tests/container_collection/docker/test_remove_docker_volume.py index 001b31b..ae2d234 100644 --- a/tests/container_collection/docker/test_remove_docker_volume.py +++ b/tests/container_collection/docker/test_remove_docker_volume.py @@ -1,4 +1,3 @@ -import secrets import unittest from unittest import mock @@ -10,11 +9,11 @@ class TestRemoveDockerVolume(unittest.TestCase): def test_remove_docker_volume(self): client = mock.MagicMock(spec=APIClient) - volume_name = secrets.token_hex(32) + volume = "volume-name" - remove_docker_volume(client, volume_name) + remove_docker_volume(client, volume) - client.remove_volume.assert_called_with(volume_name) + client.remove_volume.assert_called_with(volume) if __name__ == "__main__": diff --git a/tests/container_collection/docker/test_run_docker_command.py b/tests/container_collection/docker/test_run_docker_command.py index 9a0aa05..8ff85a3 100644 --- a/tests/container_collection/docker/test_run_docker_command.py +++ b/tests/container_collection/docker/test_run_docker_command.py @@ -1,4 +1,3 @@ -import secrets import unittest from unittest import mock @@ -27,18 +26,18 @@ def test_run_docker_command_with_optional_parameters(self): "ENVIRONMENT_VARIABLE_A=X", "ENVIRONMENT_VARIABLE_B=Y", ] - volume_name = secrets.token_hex(32) + volume = "volume-name" detach = True run_docker_command( - client, image, command, environment=environment, volume_name=volume_name, detach=detach + client, image, command, environment=environment, volume=volume, detach=detach ) client.containers.run.assert_called_with( image, command, environment=environment, - volumes={volume_name: {"bind": "/mnt", "mode": "rw"}}, + volumes={volume: {"bind": "/mnt", "mode": "rw"}}, auto_remove=True, detach=detach, ) diff --git a/tests/container_collection/docker/test_submit_docker_job.py b/tests/container_collection/docker/test_submit_docker_job.py index f9ae5b3..34b7036 100644 --- a/tests/container_collection/docker/test_submit_docker_job.py +++ b/tests/container_collection/docker/test_submit_docker_job.py @@ -1,4 +1,3 @@ -import secrets import unittest from unittest import mock @@ -24,16 +23,16 @@ def mock_create_host_config(**kwargs): class TestSubmitDockerJob(unittest.TestCase): def test_submit_docker_job(self): - container_id = secrets.token_hex(32) + container_id = "container-id" client = mock.MagicMock(spec=APIClient) client.create_host_config.side_effect = mock_create_host_config client.create_container.return_value = {"Id": container_id, "Warnings": []} name = "job-definition-name" image = "jobimage:latest" - volume_name = secrets.token_hex(32) + volume = "volume-name" - host_config = {"NetworkMode": "default", "Binds": [f"{volume_name}:/mnt:rw"]} + host_config = {"NetworkMode": "default", "Binds": [f"{volume}:/mnt:rw"]} job_definition = { "image": image, @@ -45,7 +44,7 @@ def test_submit_docker_job(self): ], } - submit_docker_job(client, job_definition, volume_name) + submit_docker_job(client, job_definition, volume) client.create_container.assert_called_with(**job_definition, host_config=host_config) client.start.assert_called_with(container=container_id)