community.docker/tests/unit/plugins/module_utils
Paul Berruti 0525a802bb fix: Match by digest only for combined tag@digest image lookups
When using combined tag@digest references (e.g., nginx:1.21@sha256:abc...),
Docker does NOT store the tag in RepoTags. It only stores the digest in
RepoDigests. The previous implementation required BOTH to match, which
always failed because RepoTags was empty.

This caused docker_container to pull the image on every run even when
the image with the correct digest already existed locally, breaking
idempotency.

The fix: When a digest is specified, match by digest only since it's the
authoritative identifier. The tag is informational for human readability.

Real-world example from docker image inspect:
  "RepoTags": [],  # Empty when pulled by digest\!
  "RepoDigests": ["portainer/portainer-ee@sha256:7ecf2008..."]

Updated tests to reflect the correct behavior:
- test_empty_repo_tags_matches_by_digest (the critical fix case)
- test_combined_tag_digest_matches_even_if_tag_differs
- test_multiple_tags_irrelevant_for_combined
2025-11-23 21:40:32 -08:00
..
_api Fix parse_repository_tag to handle images with both tag and digest 2025-11-22 16:58:54 -08:00
compose_v2_test_cases.py Add typing information, 2/n (#1178) 2025-10-25 01:16:04 +02:00
test__compose_v2.py Add typing information, 2/n (#1178) 2025-10-25 01:16:04 +02:00
test__copy.py Add typing information, 2/n (#1178) 2025-10-25 01:16:04 +02:00
test__image_archive.py Python code modernization, 8/n (#1179) 2025-10-25 00:36:04 +00:00
test__logfmt.py Add typing information, 2/n (#1178) 2025-10-25 01:16:04 +02:00
test__scramble.py Add typing information, 2/n (#1178) 2025-10-25 01:16:04 +02:00
test__util.py fix: Match by digest only for combined tag@digest image lookups 2025-11-23 21:40:32 -08:00
test_pull_image.py fix: Handle tag@digest format in push_image method 2025-11-23 19:48:02 -08:00