diff options
3 files changed, 37 insertions, 3 deletions
diff --git a/changelogs/fragments/62971-docker_container-image-finding.yml b/changelogs/fragments/62971-docker_container-image-finding.yml new file mode 100644 index 0000000000..cc99858011 --- /dev/null +++ b/changelogs/fragments/62971-docker_container-image-finding.yml @@ -0,0 +1,2 @@ +bugfixes: +- "docker_container - make sure that when image is missing, check mode indicates a change (image will be pulled)." diff --git a/lib/ansible/modules/cloud/docker/docker_container.py b/lib/ansible/modules/cloud/docker/docker_container.py index a4127be799..6529413bb1 100644 --- a/lib/ansible/modules/cloud/docker/docker_container.py +++ b/lib/ansible/modules/cloud/docker/docker_container.py @@ -2669,8 +2669,8 @@ class ContainerManager(DockerBaseClass): if not tag: tag = "latest" image = self.client.find_image(repository, tag) - if not self.check_mode: - if not image or self.parameters.pull: + if not image or self.parameters.pull: + if not self.check_mode: self.log("Pull the image.") image, alreadyToLatest = self.client.pull_image(repository, tag) if alreadyToLatest: @@ -2678,6 +2678,12 @@ class ContainerManager(DockerBaseClass): else: self.results['changed'] = True self.results['actions'].append(dict(pulled_image="%s:%s" % (repository, tag))) + elif not image: + # If the image isn't there, claim we'll pull. + # (Implicitly: if the image is there, claim it already was latest.) + self.results['changed'] = True + self.results['actions'].append(dict(pulled_image="%s:%s" % (repository, tag))) + self.log("image") self.log(image, pretty_print=True) return image diff --git a/test/integration/targets/docker_container/tasks/tests/image-ids.yml b/test/integration/targets/docker_container/tasks/tests/image-ids.yml index 376e7acfd7..f20f2998a3 100644 --- a/test/integration/targets/docker_container/tasks/tests/image-ids.yml +++ b/test/integration/targets/docker_container/tasks/tests/image-ids.yml @@ -9,7 +9,7 @@ - name: Pull images docker_image: name: "{{ image }}" - pull: true + source: pull loop: - "hello-world:latest" - "alpine:3.8" @@ -63,6 +63,28 @@ force_kill: yes register: create_4 +- name: Untag image + # Image will not be deleted since the container still uses it + docker_image: + name: alpine:3.8 + force_absent: yes + state: absent + +- name: Create container with alpine image via name (check mode, will pull, same image) + docker_container: + image: alpine:3.8 + name: "{{ cname }}" + state: present + register: create_5 + check_mode: yes + +- name: Create container with alpine image via name (will pull, same image) + docker_container: + image: alpine:3.8 + name: "{{ cname }}" + state: present + register: create_6 + - name: Cleanup docker_container: name: "{{ cname }}" @@ -76,6 +98,10 @@ - create_2 is not changed - create_3 is changed - create_4 is not changed + - create_5 is changed + - create_6 is changed + - create_6.container.Image == image_info.images[1].Id + - create_6.container.Id == create_4.container.Id # make sure container wasn't recreated - name: set Digests set_fact: |