mirror of
https://github.com/ansible-collections/community.docker.git
synced 2025-12-15 19:42:06 +00:00
* Fix IP address retrieval for registry setup. * Adjust push detection to Docker 29. * Idempotency for export no longer works. * Disable pull idempotency checks that play with architecture. * Add more known image IDs. * Adjust load tests. * Adjust error message check. * Allow for more digests. * Make sure a new enough cryptography version is installed.
307 lines
11 KiB
YAML
307 lines
11 KiB
YAML
---
|
|
# Copyright (c) Ansible Project
|
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
####################################################################
|
|
# WARNING: These are designed specifically for Ansible tests #
|
|
# and should not be used as examples of how to write Ansible roles #
|
|
####################################################################
|
|
|
|
- vars:
|
|
image: "{{ docker_test_image_hello_world }}"
|
|
image_ids: "{{ docker_test_image_hello_world_image_ids }}"
|
|
block:
|
|
- name: Pick image prefix
|
|
ansible.builtin.set_fact:
|
|
iname_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
|
|
|
- name: Define image names
|
|
ansible.builtin.set_fact:
|
|
image_names:
|
|
- "{{ iname_prefix }}-tagged-1:latest"
|
|
- "{{ iname_prefix }}-tagged-1:foo"
|
|
- "{{ iname_prefix }}-tagged-1:bar"
|
|
|
|
- name: Remove image complete
|
|
community.docker.docker_image_remove:
|
|
name: "{{ item }}"
|
|
force: true
|
|
loop: "{{ image_ids }}"
|
|
|
|
- name: Remove tagged images
|
|
community.docker.docker_image_remove:
|
|
name: "{{ item }}"
|
|
loop: "{{ image_names }}"
|
|
|
|
- name: Make sure image we work with is there
|
|
community.docker.docker_image_pull:
|
|
name: "{{ image }}"
|
|
register: pulled_image
|
|
diff: true
|
|
|
|
- name: Remove tagged image (not there, check mode)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:latest"
|
|
register: remove_1_check
|
|
check_mode: true
|
|
diff: true
|
|
|
|
- name: Remove tagged image (not there)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:latest"
|
|
register: remove_1
|
|
diff: true
|
|
|
|
- name: Inspect image
|
|
community.docker.docker_image_info:
|
|
name: "{{ iname_prefix }}-tagged-1:latest"
|
|
register: info_1
|
|
|
|
- ansible.builtin.assert:
|
|
that:
|
|
- remove_1_check is not changed
|
|
- remove_1_check.diff == remove_1.diff
|
|
- remove_1 is not changed
|
|
- remove_1.diff.before.exists is false
|
|
- remove_1.diff.after.exists is false
|
|
- remove_1.deleted | length == 0
|
|
- remove_1.untagged | length == 0
|
|
- remove_1_check.deleted == remove_1.deleted
|
|
- remove_1_check.untagged == remove_1.untagged
|
|
- info_1.images | length == 0
|
|
|
|
- name: Tag image 1
|
|
community.docker.docker_image_tag:
|
|
name: "{{ image }}"
|
|
repository:
|
|
- "{{ iname_prefix }}-tagged-1:latest"
|
|
- "{{ iname_prefix }}-tagged-1:foo"
|
|
- "{{ iname_prefix }}-tagged-1:bar"
|
|
|
|
- name: Remove tagged image (check mode)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:latest"
|
|
register: remove_2_check
|
|
check_mode: true
|
|
diff: true
|
|
|
|
- name: Remove tagged image
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:latest"
|
|
register: remove_2
|
|
diff: true
|
|
|
|
- name: Inspect image
|
|
community.docker.docker_image_info:
|
|
name: "{{ iname_prefix }}-tagged-1:latest"
|
|
register: info_2
|
|
|
|
- ansible.builtin.assert:
|
|
that:
|
|
- remove_2_check is changed
|
|
- remove_2_check.diff == remove_2.diff
|
|
- remove_2 is changed
|
|
- remove_2.diff.before.id == pulled_image.image.Id
|
|
- remove_2.diff.before.tags | length == 4
|
|
# With Docker 29, there are now two digests in before and after:
|
|
- remove_2.diff.before.digests | length in [1, 2]
|
|
- remove_2.diff.after.id == pulled_image.image.Id
|
|
- remove_2.diff.after.tags | length == 3
|
|
- remove_2.diff.after.digests | length in [1, 2]
|
|
- remove_2.deleted | length == 0
|
|
- remove_2.untagged | length == 1
|
|
- remove_2.untagged[0] == (iname_prefix ~ '-tagged-1:latest')
|
|
- remove_2_check.deleted == remove_2.deleted
|
|
- remove_2_check.untagged == remove_2.untagged
|
|
- info_2.images | length == 0
|
|
|
|
- name: Remove tagged image (idempotent, check mode)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:latest"
|
|
register: remove_3_check
|
|
check_mode: true
|
|
diff: true
|
|
|
|
- name: Remove tagged image (idempotent)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:latest"
|
|
register: remove_3
|
|
diff: true
|
|
|
|
- ansible.builtin.assert:
|
|
that:
|
|
- remove_3_check is not changed
|
|
- remove_3_check.diff == remove_3.diff
|
|
- remove_3 is not changed
|
|
- remove_3.diff.before.exists is false
|
|
- remove_3.diff.after.exists is false
|
|
- remove_3.deleted | length == 0
|
|
- remove_3.untagged | length == 0
|
|
- remove_3_check.deleted == remove_3.deleted
|
|
- remove_3_check.untagged == remove_3.untagged
|
|
|
|
- name: Inspect image with tag foo and bar
|
|
community.docker.docker_image_info:
|
|
name:
|
|
- "{{ iname_prefix }}-tagged-1:foo"
|
|
- "{{ iname_prefix }}-tagged-1:bar"
|
|
register: info_3
|
|
|
|
- name: Remove tagged image (force, check mode)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:foo"
|
|
force: true
|
|
register: remove_4_check
|
|
check_mode: true
|
|
diff: true
|
|
|
|
- name: Remove tagged image (force)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:foo"
|
|
force: true
|
|
register: remove_4
|
|
diff: true
|
|
|
|
- name: Inspect image with tag foo and bar
|
|
community.docker.docker_image_info:
|
|
name:
|
|
- "{{ iname_prefix }}-tagged-1:foo"
|
|
- "{{ iname_prefix }}-tagged-1:bar"
|
|
register: info_4
|
|
|
|
- ansible.builtin.assert:
|
|
that:
|
|
- remove_4_check is changed
|
|
- remove_4_check.diff == remove_4.diff
|
|
- remove_4 is changed
|
|
- remove_4.diff.before.id == pulled_image.image.Id
|
|
- remove_4.diff.before.tags | length == 3
|
|
# With Docker 29, there are now two digests in before and after:
|
|
- remove_4.diff.before.digests | length in [1, 2]
|
|
- remove_4.diff.after.id == pulled_image.image.Id
|
|
- remove_4.diff.after.tags | length == 2
|
|
- remove_4.diff.after.digests | length in [1, 2]
|
|
- remove_4.deleted | length == 0
|
|
- remove_4.untagged | length == 1
|
|
- remove_4.untagged[0] == (iname_prefix ~ '-tagged-1:foo')
|
|
- remove_4_check.deleted == remove_4.deleted
|
|
- remove_4_check.untagged == remove_4.untagged
|
|
- info_3.images | length == 2
|
|
- info_3.images[0].Id == pulled_image.image.Id
|
|
- info_3.images[1].Id == pulled_image.image.Id
|
|
- info_4.images | length == 1
|
|
- info_4.images[0].Id == pulled_image.image.Id
|
|
|
|
- name: Remove image ID (force, idempotent, check mode)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:foo"
|
|
force: true
|
|
register: remove_5_check
|
|
check_mode: true
|
|
diff: true
|
|
|
|
- name: Remove image ID (force, idempotent)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ iname_prefix }}-tagged-1:foo"
|
|
force: true
|
|
register: remove_5
|
|
diff: true
|
|
|
|
- ansible.builtin.assert:
|
|
that:
|
|
- remove_5_check is not changed
|
|
- remove_5_check.diff == remove_5.diff
|
|
- remove_5 is not changed
|
|
- remove_5.diff.before.exists is false
|
|
- remove_5.diff.after.exists is false
|
|
- remove_5.deleted | length == 0
|
|
- remove_5.untagged | length == 0
|
|
- remove_5_check.deleted == remove_5.deleted
|
|
- remove_5_check.untagged == remove_5.untagged
|
|
|
|
- name: Remove image ID (force, check mode)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ pulled_image.image.Id }}"
|
|
force: true
|
|
register: remove_6_check
|
|
check_mode: true
|
|
diff: true
|
|
|
|
- name: Remove image ID (force)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ pulled_image.image.Id }}"
|
|
force: true
|
|
register: remove_6
|
|
diff: true
|
|
|
|
- name: Inspect image with tag foo and bar
|
|
community.docker.docker_image_info:
|
|
name:
|
|
- "{{ iname_prefix }}-tagged-1:foo"
|
|
- "{{ iname_prefix }}-tagged-1:bar"
|
|
register: info_5
|
|
|
|
- ansible.builtin.assert:
|
|
that:
|
|
- remove_6_check is changed
|
|
- remove_6_check.diff == remove_6.diff
|
|
- remove_6 is changed
|
|
- remove_6.diff.before.id == pulled_image.image.Id
|
|
- remove_6.diff.before.tags | length == 2
|
|
# With Docker 29, there are now two digests in before and after:
|
|
- remove_6.diff.before.digests | length in [1, 2]
|
|
- remove_6.diff.after.exists is false
|
|
- remove_6.deleted | length >= 1
|
|
- pulled_image.image.Id in remove_6.deleted
|
|
- remove_6.untagged | length in [2, 3]
|
|
- (iname_prefix ~ '-tagged-1:bar') in remove_6.untagged
|
|
- image in remove_6.untagged
|
|
- remove_6_check.deleted | length == 1
|
|
- remove_6_check.deleted[0] == pulled_image.image.Id
|
|
# The following is only true for Docker < 29...
|
|
# We use the CLI version as a proxy...
|
|
- >-
|
|
remove_6_check.untagged == remove_6.untagged
|
|
or
|
|
docker_cli_version is version("29.0.0", ">=")
|
|
- info_5.images | length == 0
|
|
|
|
- name: Remove image ID (force, idempotent, check mode)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ pulled_image.image.Id }}"
|
|
force: true
|
|
register: remove_7_check
|
|
check_mode: true
|
|
diff: true
|
|
|
|
- name: Remove image ID (force, idempotent)
|
|
community.docker.docker_image_remove:
|
|
name: "{{ pulled_image.image.Id }}"
|
|
force: true
|
|
register: remove_7
|
|
diff: true
|
|
|
|
- ansible.builtin.assert:
|
|
that:
|
|
- remove_7_check is not changed
|
|
- remove_7_check.diff == remove_7.diff
|
|
- remove_7 is not changed
|
|
- remove_7.diff.before.exists is false
|
|
- remove_7.diff.after.exists is false
|
|
- remove_7.deleted | length == 0
|
|
- remove_7.untagged | length == 0
|
|
- remove_7_check.deleted == remove_7.deleted
|
|
- remove_7_check.untagged == remove_7.untagged
|
|
|
|
always:
|
|
- name: Remove tagged images
|
|
community.docker.docker_image_remove:
|
|
name: "{{ item }}"
|
|
loop: "{{ image_names }}"
|
|
|
|
when: docker_api_version is version('1.25', '>=')
|
|
|
|
- ansible.builtin.fail: msg="Too old docker / docker-py version to run docker_image_info tests!"
|
|
when: not(docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)
|