From c2e48a1ae3e68ba7ba36036324ebde4e28535444 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Wed, 11 Feb 2026 22:01:48 +0100 Subject: [PATCH] Fix pull change detection. (#1242) --- changelogs/fragments/1242-pull.yml | 2 ++ plugins/module_utils/_common_api.py | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/1242-pull.yml diff --git a/changelogs/fragments/1242-pull.yml b/changelogs/fragments/1242-pull.yml new file mode 100644 index 00000000..53e9852c --- /dev/null +++ b/changelogs/fragments/1242-pull.yml @@ -0,0 +1,2 @@ +bugfixes: + - "docker_image_pull, docker_container - fix pulled image change detection for Docker 29.2+ (https://github.com/ansible-collections/community.docker/pull/1242)." diff --git a/plugins/module_utils/_common_api.py b/plugins/module_utils/_common_api.py index d93e82d7..077ad757 100644 --- a/plugins/module_utils/_common_api.py +++ b/plugins/module_utils/_common_api.py @@ -523,7 +523,10 @@ class AnsibleDockerClientBase(Client): ) -> bool: if img1 is None or img2 is None: return img1 == img2 - filter_keys = {"Metadata"} + filter_keys = {"Metadata", "Identity"} + # Since Docker 29.2 (?) the order of entries in Identity.Pull can change + # even though the image is the same. Since we're only really interested + # in the image's Id field, we simply skip all of Identity. img1_filtered = {k: v for k, v in img1.items() if k not in filter_keys} img2_filtered = {k: v for k, v in img2.items() if k not in filter_keys} return img1_filtered == img2_filtered