community.docker/plugins
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
..
action Python code modernization, 8/n (#1179) 2025-10-25 00:36:04 +00:00
connection Improve error/warning messages w.r.t. YAML quoting (#1205) 2025-11-16 12:32:51 +01:00
doc_fragments Drop support for docker-py. (#1171) 2025-10-15 21:55:07 +02:00
inventory Python code modernization, 8/n (#1179) 2025-10-25 00:36:04 +00:00
module_utils fix: Match by digest only for combined tag@digest image lookups 2025-11-23 21:40:32 -08:00
modules fix: Handle tag@digest format in push_image method 2025-11-23 19:48:02 -08:00
plugin_utils Add typing information, 1/2 (#1176) 2025-10-23 07:05:42 +02:00