From 6e2505cd488bf1227ca4af698946d2432b4fbb7b Mon Sep 17 00:00:00 2001 From: "patchback[bot]" <45432694+patchback[bot]@users.noreply.github.com> Date: Sun, 8 Jun 2025 09:24:44 +0200 Subject: [PATCH] docker_compose_v2: work around bug in `docker compose images --format json` (#1083) (#1084) * Work around ubg in docker compose images --format json. * ContainerName is no longer in image record. (cherry picked from commit 8ecbd9a5cced855e2bd37b2bf1005b75242fba22) Co-authored-by: Felix Fontein --- changelogs/fragments/1083-docker_compose_v2-images.yml | 4 ++++ plugins/module_utils/compose_v2.py | 5 +++++ .../targets/docker_compose_v2/tasks/tests/build.yml | 4 +++- .../targets/docker_compose_v2/tasks/tests/container-exit.yml | 4 +++- .../targets/docker_compose_v2/tasks/tests/definition.yml | 4 +++- .../targets/docker_compose_v2/tasks/tests/start-stop.yml | 4 +++- 6 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 changelogs/fragments/1083-docker_compose_v2-images.yml diff --git a/changelogs/fragments/1083-docker_compose_v2-images.yml b/changelogs/fragments/1083-docker_compose_v2-images.yml new file mode 100644 index 00000000..880f1143 --- /dev/null +++ b/changelogs/fragments/1083-docker_compose_v2-images.yml @@ -0,0 +1,4 @@ +bugfixes: + - "docker_compose_v2 - handle a (potentially unintentional) breaking change in Docker Compose 2.37.0. + Note that ``ContainerName`` is no longer part of the return value + (https://github.com/ansible-collections/community.docker/issues/1082, https://github.com/ansible-collections/community.docker/pull/1083)." \ No newline at end of file diff --git a/plugins/module_utils/compose_v2.py b/plugins/module_utils/compose_v2.py index 22b4e1db..5fb0d180 100644 --- a/plugins/module_utils/compose_v2.py +++ b/plugins/module_utils/compose_v2.py @@ -800,6 +800,11 @@ class BaseComposeManager(DockerBaseClass): rc, images, stderr = self.client.call_cli_json(*args, **kwargs) if self.use_json_events and rc != 0: self._handle_failed_cli_call(args, rc, images, stderr) + if isinstance(images, dict): + # Handle breaking change in Docker Compose 2.37.0; see + # https://github.com/ansible-collections/community.docker/issues/1082 + # and https://github.com/docker/compose/issues/12916 for details + images = list(images.values()) return images def parse_events(self, stderr, dry_run=False, nonzero_rc=False): diff --git a/tests/integration/targets/docker_compose_v2/tasks/tests/build.yml b/tests/integration/targets/docker_compose_v2/tasks/tests/build.yml index de976de2..6dad2502 100644 --- a/tests/integration/targets/docker_compose_v2/tasks/tests/build.yml +++ b/tests/integration/targets/docker_compose_v2/tasks/tests/build.yml @@ -92,7 +92,9 @@ - present_1.containers | length == 1 - present_1.containers[0].Name == (pname ~ '-' ~ cname ~ '-1') - present_1.images | length == 1 - - present_1.images[0].ContainerName == (pname ~ '-' ~ cname ~ '-1') + - >- + docker_compose_version is version('2.37.0', '==') or + present_1.images[0].ContainerName == (pname ~ '-' ~ cname ~ '-1') - present_1.images[0].Repository == iname - present_1.images[0].Tag == "latest" - present_1.warnings | default([]) | select('regex', ' Please report this at ') | length == 0 diff --git a/tests/integration/targets/docker_compose_v2/tasks/tests/container-exit.yml b/tests/integration/targets/docker_compose_v2/tasks/tests/container-exit.yml index 7cac56e0..f9182d2f 100644 --- a/tests/integration/targets/docker_compose_v2/tasks/tests/container-exit.yml +++ b/tests/integration/targets/docker_compose_v2/tasks/tests/container-exit.yml @@ -62,7 +62,9 @@ - present_1.containers[0].State == 'exited' - present_1.containers[0].ExitCode == 0 - present_1.images | length == 1 - - present_1.images[0].ContainerName == (pname ~ '-' ~ cname ~ '-1') + - >- + docker_compose_version is version('2.37.0', '==') or + present_1.images[0].ContainerName == (pname ~ '-' ~ cname ~ '-1') - present_1.images[0].Repository == (docker_test_image_alpine | split(':') | first) - present_1.images[0].Tag == (docker_test_image_alpine | split(':') | last) - present_1.warnings | default([]) | select('regex', ' Please report this at ') | length == 0 diff --git a/tests/integration/targets/docker_compose_v2/tasks/tests/definition.yml b/tests/integration/targets/docker_compose_v2/tasks/tests/definition.yml index 5c6cad0c..c3e07bb2 100644 --- a/tests/integration/targets/docker_compose_v2/tasks/tests/definition.yml +++ b/tests/integration/targets/docker_compose_v2/tasks/tests/definition.yml @@ -83,7 +83,9 @@ - present_1.containers[0].Name == (pname ~ '-' ~ cname ~ '-1') - present_1.containers[0].Image == docker_test_image_alpine - present_1.images | length == 1 - - present_1.images[0].ContainerName == (pname ~ '-' ~ cname ~ '-1') + - >- + docker_compose_version is version('2.37.0', '==') or + present_1.images[0].ContainerName == (pname ~ '-' ~ cname ~ '-1') - present_1.images[0].Repository == (docker_test_image_alpine | split(':') | first) - present_1.images[0].Tag == (docker_test_image_alpine | split(':') | last) - present_1.warnings | default([]) | select('regex', ' Please report this at ') | length == 0 diff --git a/tests/integration/targets/docker_compose_v2/tasks/tests/start-stop.yml b/tests/integration/targets/docker_compose_v2/tasks/tests/start-stop.yml index af9a68aa..47670005 100644 --- a/tests/integration/targets/docker_compose_v2/tasks/tests/start-stop.yml +++ b/tests/integration/targets/docker_compose_v2/tasks/tests/start-stop.yml @@ -93,7 +93,9 @@ - present_1.containers[0].Name == (pname ~ '-' ~ cname ~ '-1') - present_1.containers[0].Image == docker_test_image_alpine - present_1.images | length == 1 - - present_1.images[0].ContainerName == (pname ~ '-' ~ cname ~ '-1') + - >- + docker_compose_version is version('2.37.0', '==') or + present_1.images[0].ContainerName == (pname ~ '-' ~ cname ~ '-1') - present_1.images[0].Repository == (docker_test_image_alpine | split(':') | first) - present_1.images[0].Tag == (docker_test_image_alpine | split(':') | last) - present_1.warnings | default([]) | select('regex', ' Please report this at ') | length == 0