Skip to content

Commit

Permalink
docker_image: always push, also when tagging is not necessary (#53)
Browse files Browse the repository at this point in the history
* Always push, also when tagging is not necessary.

* Add tests.

* Fix tests.
  • Loading branch information
felixfontein authored Dec 26, 2020
1 parent d40c240 commit 117f132
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 3 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/53-docker_image-tag-push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- "docker_image - if ``push=true`` is used with ``repository``, and the image does not need to be tagged, still push. This can happen if ``repository`` and ``name`` are equal (https://github.com/ansible-collections/community.docker/issues/52, https://github.com/ansible-collections/community.docker/pull/53)."
4 changes: 2 additions & 2 deletions plugins/modules/docker_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -595,8 +595,8 @@ def tag_image(self, name, tag, repository, push=False):
if image and image['Id'] == self.results['image']['Id']:
self.results['changed'] = False

if push:
self.push_image(repo, repo_tag)
if push:
self.push_image(repo, repo_tag)

def build_image(self):
'''
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

- name: Registering image name
set_fact:
inames: "{{ inames + [iname, test_image_base ~ ':latest', hello_world_image_base ~ ':latest'] }}"
inames: "{{ inames + [iname, test_image_base ~ ':latest', hello_world_image_base ~ ':latest', hello_world_image_base ~ ':newtag', hello_world_image_base ~ ':newtag2'] }}"

####################################################################
## interact with test registry #####################################
Expand Down Expand Up @@ -101,6 +101,82 @@
- facts_2.images | length == 0
- facts_3.images | length == 1

- name: Tag different image with new tag
docker_image:
name: "{{ docker_test_image_alpine_different }}"
repository: "{{ hello_world_image_base }}:newtag"
push: no
source: pull

- name: Push different image with new tag
docker_image:
name: "{{ hello_world_image_base }}"
repository: "{{ hello_world_image_base }}"
tag: newtag
push: yes
source: local
register: push_1_different

- name: Push different image with new tag (idempotent)
docker_image:
name: "{{ hello_world_image_base }}"
repository: "{{ hello_world_image_base }}"
tag: newtag
push: yes
source: local
register: push_2_different

- assert:
that:
- push_1_different is changed
- push_2_different is not changed

- name: Tag same image with new tag
docker_image:
name: "{{ docker_test_image_alpine_different }}"
repository: "{{ hello_world_image_base }}:newtag2"
push: no
source: pull

- name: Push same image with new tag
docker_image:
name: "{{ hello_world_image_base }}"
repository: "{{ hello_world_image_base }}"
tag: newtag2
push: yes
source: local
register: push_1_same

- name: Push same image with new tag (idempotent)
docker_image:
name: "{{ hello_world_image_base }}"
repository: "{{ hello_world_image_base }}"
tag: newtag2
push: yes
source: local
register: push_2_same

- assert:
that:
# NOTE: This should be:
# - push_1_same is changed
# Unfortunately docker does *NOT* report whether the tag already existed or not.
# Here are the logs returned by client.push() for both tasks (which are exactly the same):
# push_1_same:
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
# push_2_same:
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
- push_1_same is not changed
- push_2_same is not changed

####################################################################
## repository ######################################################
####################################################################
Expand Down

0 comments on commit 117f132

Please sign in to comment.