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 de22bab1..794a5e3f 100644 --- a/plugins/module_utils/common_api.py +++ b/plugins/module_utils/common_api.py @@ -424,7 +424,10 @@ class AnsibleDockerClientBase(Client): def _compare_images(img1, img2): 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