docker_container: improve image finding / change detection (#62971)
* Improve image finding / change detection. * Checked wrong object. * Improve behavior. (Let docker daemon sort this out.) * Add changelog. * Add simple test. * Fix image name. * Use new docker_image params. * Rewrite.
This commit is contained in:
parent
bb9b2e87bc
commit
41eafc2051
3 changed files with 37 additions and 3 deletions
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- "docker_container - make sure that when image is missing, check mode indicates a change (image will be pulled)."
|
|
@ -2640,8 +2640,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:
|
||||
|
@ -2649,6 +2649,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
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue