summaryrefslogtreecommitdiffstats
path: root/ansible_collections/community/docker/tests/integration
diff options
context:
space:
mode:
Diffstat (limited to 'ansible_collections/community/docker/tests/integration')
-rw-r--r--ansible_collections/community/docker/tests/integration/requirements.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/connection_docker_api/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/connection_docker_api/setup.yml4
-rwxr-xr-xansible_collections/community/docker/tests/integration/targets/connection_nsenter/runme.sh2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose/aliases2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose/meta/main.yml2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/main.yml38
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/aliases6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/meta/main.yml10
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/main.yml48
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/run-test.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/tests/pull.yml211
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/tests/start-stop.yml262
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/aliases6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/meta/main.yml10
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/main.yml48
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/run-test.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/tests/pull.yml192
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_config/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/main.yml45
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/comparisons.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/image-ids.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/options.yml289
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/main.yml22
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container_exec/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_container_info/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_host_info/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_host_info/tasks/test_host_info.yml10
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/test.yml30
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/basic.yml2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/docker_image.yml353
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/options.yml64
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/aliases6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/meta/main.yml10
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/main.yml13
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/run-test.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/test.yml59
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/tests/options.yml204
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/ArgsDockerfile13
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/Dockerfile7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/EtcHostsDockerfile7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/MyDockerfile9
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/StagedDockerfile11
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_export/aliases6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_export/meta/main.yml9
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/main.yml13
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/run-test.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/test.yml39
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/tests/basic.yml69
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_info/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_info/tasks/main.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_load/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/test.yml29
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/tests/basic.yml29
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_pull/aliases6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_pull/meta/main.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/main.yml13
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/run-test.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/test.yml39
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/basic.yml196
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/image-ids.yml89
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/registry.yml126
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_push/aliases6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_push/meta/main.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/main.yml13
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/run-test.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/test.yml39
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/tests/basic.yml60
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/tests/registry.yml82
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_remove/aliases6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_remove/meta/main.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_remove/tasks/main.yml296
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_tag/aliases6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_tag/meta/main.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_image_tag/tasks/main.yml402
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_login/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/test.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_network/meta/main.yml2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/main.yml32
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_network_info/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_node/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_node/tasks/test_node.yml26
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_node_info/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_plugin/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/main.yml18
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_prune/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_secret/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_stack_info/tasks/test_stack_info.yml2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_stack_task_info/tasks/test_stack_task_info.yml2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/main.yml6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/run-test.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/tasks/test_swarm_info.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/main.yml16
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_swarm_service_info/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_volume/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/main.yml18
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/run-test.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/docker_volume_info/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/meta/main.yml2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/vars/main.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/tasks/main.yml9
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_cleanup.yml9
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_setup.yml6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_1.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_2.yml10
-rwxr-xr-xansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/runme.sh14
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/playbooks/pre-setup.yml4
-rwxr-xr-xansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/runme.sh8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/meta/main.yml1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_cleanup.yml9
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_setup.yml4
-rwxr-xr-xansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/runme.sh8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker/defaults/main.yml5
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker/handlers/main.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/Alpine.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml38
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/RedHat-7.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/Ubuntu-14.yml6
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/main.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/meta/main.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Alpine.yml13
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Archlinux.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Debian.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Fedora.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-7.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/RedHat-7.yml)3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-8.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-9.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Suse.yml14
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/main.yml49
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/nothing.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/vars/default.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/default.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/meta/main.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Alpine.yml13
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Archlinux.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Debian.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Fedora.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-7.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-8.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-9.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Suse.yml14
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/main.yml65
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/nothing.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/vars/default.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/defaults/main.yml15
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/meta/main.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/meta/main.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Alpine.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Alpine.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Archlinux.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Archlinux.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Debian.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Debian.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Fedora.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Fedora.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/RedHat-7.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/RedHat-7.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/RedHat-8.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/RedHat-8.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/RedHat-9.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/RedHat-9.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Suse.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Suse.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/main.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/main.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/setup.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/setup.yml)22
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Alpine.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/defaults/main.yml)3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Archlinux.yml9
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/CentOS-8.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/CentOS-8.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Debian-11.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Debian-12.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-7.yml10
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-8.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/RedHat-8.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-9.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/RedHat-9.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Suse-py2.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Suse-py2.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Suse-py3.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Suse-py3.yml)2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-14.yml9
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-16.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Ubuntu-16.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-18.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Ubuntu-18.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu.yml (renamed from ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Ubuntu.yml)0
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/default.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_current_container_network_ip/meta/main.yml7
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_current_container_network_ip/tasks/main.yml25
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/aliases5
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/defaults/main.yml12
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/meta/main.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/tasks/main.yml15
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/RedHat-7.yml10
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/Ubuntu-14.yml11
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/default.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/aliases1
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/handlers/cleanup.yml3
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/meta/main.yml2
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/tasks/setup.yml10
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/vars/main.yml4
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/aliases5
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/defaults/main.yml10
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/meta/main.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/tasks/main.yml47
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/RedHat-7.yml8
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/Ubuntu-14.yml9
-rw-r--r--ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/default.yml4
208 files changed, 4071 insertions, 531 deletions
diff --git a/ansible_collections/community/docker/tests/integration/requirements.yml b/ansible_collections/community/docker/tests/integration/requirements.yml
index 7b3e38d98..b4c045f43 100644
--- a/ansible_collections/community/docker/tests/integration/requirements.yml
+++ b/ansible_collections/community/docker/tests/integration/requirements.yml
@@ -5,6 +5,7 @@
collections:
- ansible.posix
-- community.internal_test_tools
- community.crypto
- community.general
+- community.internal_test_tools
+- community.library_inventory_filtering_v1
diff --git a/ansible_collections/community/docker/tests/integration/targets/connection_docker_api/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/connection_docker_api/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/connection_docker_api/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/connection_docker_api/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/connection_docker_api/setup.yml b/ansible_collections/community/docker/tests/integration/targets/connection_docker_api/setup.yml
index e522a51f0..0b0738843 100644
--- a/ansible_collections/community/docker/tests/integration/targets/connection_docker_api/setup.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/connection_docker_api/setup.yml
@@ -12,3 +12,7 @@
- name: Setup docker
import_role:
name: setup_docker
+
+ - name: Setup docker Python deps
+ import_role:
+ name: setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/connection_nsenter/runme.sh b/ansible_collections/community/docker/tests/integration/targets/connection_nsenter/runme.sh
index eebbb6a39..5a2a84c30 100755
--- a/ansible_collections/community/docker/tests/integration/targets/connection_nsenter/runme.sh
+++ b/ansible_collections/community/docker/tests/integration/targets/connection_nsenter/runme.sh
@@ -8,6 +8,7 @@ set -euo pipefail
[[ -n "${DEBUG:-}" || -n "${ANSIBLE_DEBUG:-}" ]] && set -x
readonly IMAGE="quay.io/ansible/ansible-runner:devel"
+# shellcheck disable=SC2155
readonly PYTHON="$(command -v python3 python | head -n1)"
# Determine collection root
@@ -18,6 +19,7 @@ while true; do
fi
COLLECTION_ROOT="${COLLECTION_ROOT}../"
done
+# shellcheck disable=SC2155
readonly COLLECTION_ROOT="$(cd ${COLLECTION_ROOT} ; pwd)"
# Setup phase
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose/aliases b/ansible_collections/community/docker/tests/integration/targets/docker_compose/aliases
index 2e1acc0ad..d8f457d53 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_compose/aliases
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose/aliases
@@ -2,5 +2,5 @@
# 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
-azp/4
+azp/6
destructive
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose/meta/main.yml
index 7f44c871d..6b4232214 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_compose/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose/meta/main.yml
@@ -4,5 +4,5 @@
# SPDX-License-Identifier: GPL-3.0-or-later
dependencies:
- - setup_docker_compose
+ - setup_docker_compose_v1
- setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/main.yml
index d3c7eae51..8ea59f865 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/main.yml
@@ -20,26 +20,28 @@
# Run the tests
- block:
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- - name: "Make sure all containers are removed"
- docker_container:
- name: "{{ item }}"
- state: absent
- force_kill: true
- with_items: "{{ cnames }}"
- diff: false
- - name: "Make sure all networks are removed"
- docker_network:
- name: "{{ item }}"
- state: absent
- force: true
- with_items: "{{ dnetworks }}"
- when: docker_py_version is version('1.10.0', '>=')
- diff: false
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
+ diff: false
+ - name: "Make sure all networks are removed"
+ docker_network:
+ name: "{{ item }}"
+ state: absent
+ force: true
+ with_items: "{{ dnetworks }}"
+ when: docker_py_version is version('1.10.0', '>=')
+ diff: false
when: has_docker_compose and docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.25', '>=')
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/aliases b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/aliases
new file mode 100644
index 000000000..2e1acc0ad
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/aliases
@@ -0,0 +1,6 @@
+# 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
+
+azp/4
+destructive
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/meta/main.yml
new file mode 100644
index 000000000..aefcf50f2
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/meta/main.yml
@@ -0,0 +1,10 @@
+---
+# 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
+
+dependencies:
+ - setup_docker_cli_compose
+ # The Python dependencies are needed for the other modules
+ - setup_docker_python_deps
+ - setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/main.yml
new file mode 100644
index 000000000..8813f0e71
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/main.yml
@@ -0,0 +1,48 @@
+---
+# 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 #
+####################################################################
+
+# Create random name prefix (for services, ...)
+- name: Create random container name prefix
+ set_fact:
+ name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
+ cnames: []
+ dnetworks: []
+
+- debug:
+ msg: "Using name prefix {{ name_prefix }}"
+
+# Run the tests
+- block:
+ - command: docker compose --help
+
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
+
+ always:
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
+ diff: false
+
+ - name: "Make sure all networks are removed"
+ docker_network:
+ name: "{{ item }}"
+ state: absent
+ force: true
+ with_items: "{{ dnetworks }}"
+ diff: false
+
+ when: docker_has_compose and docker_compose_version is version('2.18.0', '>=')
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/run-test.yml
new file mode 100644
index 000000000..72a58962d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/run-test.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/tests/pull.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/tests/pull.yml
new file mode 100644
index 000000000..47647a9bc
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/tests/pull.yml
@@ -0,0 +1,211 @@
+---
+# 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
+
+- vars:
+ pname: "{{ name_prefix }}-pull"
+ cname: "{{ name_prefix }}-cont"
+ non_existing_image: does-not-exist:latest
+ project_src: "{{ remote_tmp_dir }}/{{ pname }}"
+ test_service_non_existing: |
+ version: '3'
+ services:
+ {{ cname }}:
+ image: {{ non_existing_image }}
+ test_service_alpine: |
+ version: '3'
+ services:
+ {{ cname }}:
+ image: {{ docker_test_image_alpine }}
+ command: /bin/sh -c 'sleep 10m'
+ stop_grace_period: 1s
+
+ block:
+ - name: Registering container name
+ set_fact:
+ cnames: "{{ cnames + [pname ~ '-' ~ cname ~ '-1'] }}"
+ dnetworks: "{{ dnetworks + [pname ~ '_default'] }}"
+
+ - name: Create project directory
+ file:
+ path: '{{ project_src }}'
+ state: directory
+
+ - name: Make sure images are not around
+ docker_image_remove:
+ name: '{{ item }}'
+ loop:
+ - '{{ non_existing_image }}'
+ - '{{ docker_test_image_alpine }}'
+
+####################################################################
+## Missing image ###################################################
+####################################################################
+
+ - name: Template project file with non-existing image
+ copy:
+ dest: '{{ project_src }}/docker-compose.yml'
+ content: '{{ test_service_non_existing }}'
+
+ - name: Present with pull=never (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: never
+ check_mode: true
+ register: present_1_check
+ ignore_errors: true
+
+ - name: Present with pull=never
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: never
+ register: present_1
+ ignore_errors: true
+
+ - name: Present without explicit pull (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ check_mode: true
+ register: present_2_check
+ ignore_errors: true
+
+ - name: Present without explicit pull
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ register: present_2
+ ignore_errors: true
+
+ - assert:
+ that:
+ - present_1_check is failed or present_1_check is changed
+ - present_1_check is changed or present_1_check.msg.startswith('General error:')
+ - present_1 is failed
+ - present_1.msg.startswith('General error:')
+ - present_2_check is failed
+ - present_2_check.msg.startswith('Error when processing ' ~ cname ~ ':')
+ - present_2 is failed
+ - present_2.msg.startswith('Error when processing ' ~ cname ~ ':')
+
+####################################################################
+## Regular image ###################################################
+####################################################################
+
+ - name: Template project file with Alpine image
+ copy:
+ dest: '{{ project_src }}/docker-compose.yml'
+ content: '{{ test_service_alpine }}'
+
+ - name: Present with pull=missing (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: missing
+ check_mode: true
+ register: present_1_check
+
+ - name: Present with pull=missing
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: missing
+ register: present_1
+
+ - name: Present with pull=missing (idempotent, check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: missing
+ check_mode: true
+ register: present_2_check
+
+ - name: Present with pull=missing (idempotent)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: missing
+ register: present_2
+
+ - name: Present with pull=always (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: always
+ check_mode: true
+ register: present_3_check
+
+ - name: Present with pull=always
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: always
+ register: present_3
+
+ - name: Stopping service
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: absent
+
+ - name: Present with pull=never (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: missing
+ check_mode: true
+ register: present_4_check
+
+ - name: Present with pull=never
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: missing
+ register: present_4
+
+ - name: Present with pull=never (idempotent, check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: missing
+ check_mode: true
+ register: present_5_check
+
+ - name: Present with pull=never (idempotent)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ pull: missing
+ register: present_5
+
+ - name: Cleanup
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: absent
+
+ - assert:
+ that:
+ - present_1_check is changed
+ - present_1_check.actions | selectattr('status', 'eq', 'Pulling') | first
+ - present_1_check.actions | selectattr('status', 'eq', 'Creating') | first
+ - present_1 is changed
+ - present_1.actions | selectattr('status', 'eq', 'Pulling') | first
+ - present_1.actions | selectattr('status', 'eq', 'Creating') | first
+ - present_2_check is not changed
+ - present_2 is not changed
+ - present_3_check is changed
+ - present_3_check.actions | selectattr('status', 'eq', 'Pulling') | first
+ - present_3_check.actions | selectattr('status', 'eq', 'Creating') | length == 0
+ - present_3_check.actions | selectattr('status', 'eq', 'Recreating') | length == 0
+ - present_3 is not changed
+ - present_3.actions | selectattr('status', 'eq', 'Pulling') | first
+ - present_3.actions | selectattr('status', 'eq', 'Creating') | length == 0
+ - present_3.actions | selectattr('status', 'eq', 'Recreating') | length == 0
+ - present_4_check is changed
+ - present_4_check.actions | selectattr('status', 'eq', 'Pulling') | length == 0
+ - present_4 is changed
+ - present_4.actions | selectattr('status', 'eq', 'Pulling') | length == 0
+ - present_5_check is not changed
+ - present_5 is not changed
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/tests/start-stop.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/tests/start-stop.yml
new file mode 100644
index 000000000..22dd5e026
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2/tasks/tests/start-stop.yml
@@ -0,0 +1,262 @@
+---
+# 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
+
+- vars:
+ pname: "{{ name_prefix }}-start-stop"
+ cname: "{{ name_prefix }}-container"
+ project_src: "{{ remote_tmp_dir }}/{{ pname }}"
+ test_service: |
+ version: '3'
+ services:
+ {{ cname }}:
+ image: "{{ docker_test_image_alpine }}"
+ command: '/bin/sh -c "sleep 10m"'
+ stop_grace_period: 1s
+ test_service_mod: |
+ version: '3'
+ services:
+ {{ cname }}:
+ image: "{{ docker_test_image_alpine }}"
+ command: '/bin/sh -c "sleep 15m"'
+ stop_grace_period: 1s
+
+ block:
+ - name: Registering container name
+ set_fact:
+ cnames: "{{ cnames + [pname ~ '-' ~ cname ~ '-1'] }}"
+ dnetworks: "{{ dnetworks + [pname ~ '_default'] }}"
+
+ - name: Create project directory
+ file:
+ path: '{{ project_src }}'
+ state: directory
+
+####################################################################
+## Present #########################################################
+####################################################################
+
+ - name: Template default project file
+ copy:
+ dest: '{{ project_src }}/docker-compose.yml'
+ content: '{{ test_service }}'
+
+ - name: Present (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ check_mode: true
+ register: present_1_check
+
+ - name: Present
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ register: present_1
+
+ - name: Present (idempotent check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ check_mode: true
+ register: present_2_check
+
+ - name: Present (idempotent)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ register: present_2
+
+ - name: Template modified project file
+ copy:
+ dest: '{{ project_src }}/docker-compose.yml'
+ content: '{{ test_service_mod }}'
+
+ - name: Present (changed check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ check_mode: true
+ register: present_3_check
+
+ - name: Present (changed)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ register: present_3
+
+ - assert:
+ that:
+ - present_1_check is changed
+ - present_1 is changed
+ - present_1.containers | length == 1
+ - present_1.containers[0].Name == pname ~ '-' ~ cname ~ '-1'
+ - present_1.containers[0].Image == docker_test_image_alpine
+ - present_1.images | length == 1
+ - present_1.images[0].ContainerName == pname ~ '-' ~ cname ~ '-1'
+ - present_1.images[0].Repository == (docker_test_image_alpine | split(':') | first)
+ - present_1.images[0].Tag == (docker_test_image_alpine | split(':') | last)
+ - present_2_check is not changed
+ - present_2 is not changed
+ - present_3_check is changed
+ - present_3 is changed
+
+####################################################################
+## Absent ##########################################################
+####################################################################
+
+ - name: Absent (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: absent
+ check_mode: true
+ register: absent_1_check
+
+ - name: Absent
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: absent
+ register: absent_1
+
+ - name: Absent (idempotent check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: absent
+ check_mode: true
+ register: absent_2_check
+
+ - name: Absent (idempotent)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: absent
+ register: absent_2
+
+ - assert:
+ that:
+ - absent_1_check is changed
+ - absent_1 is changed
+ - absent_2_check is not changed
+ - absent_2 is not changed
+
+####################################################################
+## Stopping and starting ###########################################
+####################################################################
+
+ - name: Template default project file
+ copy:
+ dest: '{{ project_src }}/docker-compose.yml'
+ content: '{{ test_service }}'
+
+ - name: Present stopped (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: stopped
+ check_mode: true
+ register: present_1_check
+
+ - name: Present stopped
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: stopped
+ register: present_1
+
+ - name: Present stopped (idempotent check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: stopped
+ check_mode: true
+ register: present_2_check
+
+ - name: Present stopped (idempotent)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: stopped
+ register: present_2
+
+ - name: Started (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ check_mode: true
+ register: present_3_check
+
+ - name: Started
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ register: present_3
+
+ - name: Started (idempotent check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ check_mode: true
+ register: present_4_check
+
+ - name: Started (idempotent)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: present
+ register: present_4
+
+ - name: Restarted (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: restarted
+ check_mode: true
+ register: present_5_check
+
+ - name: Restarted
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: restarted
+ register: present_5
+
+ - name: Stopped (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: stopped
+ check_mode: true
+ register: present_6_check
+
+ - name: Stopped
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: stopped
+ register: present_6
+
+ - name: Restarted (check)
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: restarted
+ check_mode: true
+ register: present_7_check
+
+ - name: Restarted
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: restarted
+ register: present_7
+
+ - name: Cleanup
+ docker_compose_v2:
+ project_src: '{{ project_src }}'
+ state: absent
+
+ - assert:
+ that:
+ - present_1_check is changed
+ - present_1 is changed
+ - present_2_check is not changed
+ - present_2 is not changed
+ - present_3_check is changed
+ - present_3 is changed
+ - present_4_check is not changed
+ - present_4 is not changed
+ - present_5_check is changed
+ - present_5 is changed
+ - present_6_check is changed
+ - present_6 is changed
+ - present_7_check is changed
+ - present_7 is changed
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/aliases b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/aliases
new file mode 100644
index 000000000..2e1acc0ad
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/aliases
@@ -0,0 +1,6 @@
+# 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
+
+azp/4
+destructive
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/meta/main.yml
new file mode 100644
index 000000000..aefcf50f2
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/meta/main.yml
@@ -0,0 +1,10 @@
+---
+# 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
+
+dependencies:
+ - setup_docker_cli_compose
+ # The Python dependencies are needed for the other modules
+ - setup_docker_python_deps
+ - setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/main.yml
new file mode 100644
index 000000000..8813f0e71
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/main.yml
@@ -0,0 +1,48 @@
+---
+# 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 #
+####################################################################
+
+# Create random name prefix (for services, ...)
+- name: Create random container name prefix
+ set_fact:
+ name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
+ cnames: []
+ dnetworks: []
+
+- debug:
+ msg: "Using name prefix {{ name_prefix }}"
+
+# Run the tests
+- block:
+ - command: docker compose --help
+
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
+
+ always:
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
+ diff: false
+
+ - name: "Make sure all networks are removed"
+ docker_network:
+ name: "{{ item }}"
+ state: absent
+ force: true
+ with_items: "{{ dnetworks }}"
+ diff: false
+
+ when: docker_has_compose and docker_compose_version is version('2.18.0', '>=')
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/run-test.yml
new file mode 100644
index 000000000..72a58962d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/run-test.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/tests/pull.yml b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/tests/pull.yml
new file mode 100644
index 000000000..27f2637b7
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_compose_v2_pull/tasks/tests/pull.yml
@@ -0,0 +1,192 @@
+---
+# 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
+
+- vars:
+ pname: "{{ name_prefix }}-pull"
+ cname: "{{ name_prefix }}-cont"
+ non_existing_image: does-not-exist:latest
+ project_src: "{{ remote_tmp_dir }}/{{ pname }}"
+ test_service_non_existing: |
+ version: '3'
+ services:
+ {{ cname }}:
+ image: {{ non_existing_image }}
+ test_service_alpine: |
+ version: '3'
+ services:
+ {{ cname }}:
+ image: {{ docker_test_image_alpine }}
+ command: /bin/sh -c 'sleep 10m'
+ stop_grace_period: 1s
+
+ block:
+ - name: Registering container name
+ set_fact:
+ cnames: "{{ cnames + [pname ~ '-' ~ cname ~ '-1'] }}"
+ dnetworks: "{{ dnetworks + [pname ~ '_default'] }}"
+
+ - name: Create project directory
+ file:
+ path: '{{ project_src }}'
+ state: directory
+
+ - name: Make sure images are not around
+ docker_image_remove:
+ name: '{{ item }}'
+ loop:
+ - '{{ non_existing_image }}'
+ - '{{ docker_test_image_alpine }}'
+
+####################################################################
+## Missing image ###################################################
+####################################################################
+
+ - name: Template project file with non-existing image
+ copy:
+ dest: '{{ project_src }}/docker-compose.yml'
+ content: '{{ test_service_non_existing }}'
+
+ - name: Pull (check)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ check_mode: true
+ register: pull_1_check
+ ignore_errors: true
+
+ - name: Pull
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ register: pull_1
+ ignore_errors: true
+
+ - assert:
+ that:
+ - pull_1_check is failed or pull_1_check is changed
+ - pull_1_check is changed or pull_1_check.msg.startswith('Error when processing ')
+ - pull_1 is failed
+ - pull_1.msg.startswith('Error when processing ')
+
+####################################################################
+## Regular image ###################################################
+####################################################################
+
+ - name: Template project file with Alpine image
+ copy:
+ dest: '{{ project_src }}/docker-compose.yml'
+ content: '{{ test_service_alpine }}'
+
+ - when: docker_compose_version is version('2.22.0', '>=')
+ block:
+ - name: Pull with policy=missing (check)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: missing
+ check_mode: true
+ register: pull_1_check
+
+ - name: Pull with policy=missing
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: missing
+ register: pull_1
+
+ - name: Pull with policy=missing (idempotent, check)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: missing
+ check_mode: true
+ register: pull_2_check
+
+ - name: Pull with policy=missing (idempotent)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: missing
+ register: pull_2
+
+ - name: Make sure image is not around
+ docker_image_remove:
+ name: '{{ docker_test_image_alpine }}'
+
+ - name: Pull with policy=always (check)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: always
+ check_mode: true
+ register: pull_3_check
+
+ - name: Pull with policy=always
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: always
+ register: pull_3
+
+ - name: Pull with policy=always (check, idempotent)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: always
+ check_mode: true
+ register: pull_4_check
+
+ - name: Pull with policy=always (idempotent)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: always
+ register: pull_4
+
+ - assert:
+ that:
+ - pull_1_check is changed
+ - pull_1_check.actions | selectattr('status', 'eq', 'Pulling') | first
+ - pull_1 is changed
+ - pull_1.actions | selectattr('status', 'eq', 'Pulling') | first
+ - pull_2_check is not changed
+ - pull_2 is not changed
+ - pull_3_check is changed
+ - pull_3_check.actions | selectattr('status', 'eq', 'Pulling') | first
+ - pull_3 is changed
+ - pull_3.actions | selectattr('status', 'eq', 'Pulling') | first
+ - pull_4_check is changed
+ - pull_4_check.actions | selectattr('status', 'eq', 'Pulling') | first
+ - pull_4 is not changed
+ - pull_4.actions | selectattr('status', 'eq', 'Pulling') | first
+
+ - when: docker_compose_version is version('2.22.0', '<')
+ block:
+ - name: Pull with policy=always (check)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: always
+ check_mode: true
+ register: pull_1_check
+
+ - name: Pull with policy=always
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: always
+ register: pull_1
+
+ - name: Pull with policy=always (again, check)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: always
+ check_mode: true
+ register: pull_2_check
+
+ - name: Pull with policy=always (again)
+ docker_compose_v2_pull:
+ project_src: '{{ project_src }}'
+ policy: always
+ register: pull_2
+
+ - assert:
+ that:
+ - pull_1_check is changed
+ - pull_1_check.actions | selectattr('status', 'eq', 'Pulling') | first
+ - pull_1 is changed
+ - pull_1.actions | selectattr('status', 'eq', 'Pulling') | first
+ - pull_2_check is changed
+ - pull_2_check.actions | selectattr('status', 'eq', 'Pulling') | first
+ - pull_2 is not changed
+ - pull_2.actions | selectattr('status', 'eq', 'Pulling') | first
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_config/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_config/meta/main.yml
index 2650229d8..9eeb6626b 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_config/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_config/meta/main.yml
@@ -5,4 +5,5 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
- setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/main.yml
index 9911452f9..2236bc803 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/main.yml
@@ -34,30 +34,31 @@
# Run the tests
- block:
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- - name: "Make sure all containers are removed"
- docker_container:
- name: "{{ item }}"
- state: absent
- force_kill: true
- with_items: "{{ cnames }}"
- diff: false
- - name: "Make sure all images are removed"
- docker_image:
- name: "{{ item }}"
- state: absent
- with_items: "{{ inames }}"
- - name: "Make sure all networks are removed"
- docker_network:
- name: "{{ item }}"
- state: absent
- force: true
- with_items: "{{ dnetworks }}"
- diff: false
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
+ diff: false
+ - name: "Make sure all images are removed"
+ docker_image_remove:
+ name: "{{ item }}"
+ with_items: "{{ inames }}"
+ - name: "Make sure all networks are removed"
+ docker_network:
+ name: "{{ item }}"
+ state: absent
+ force: true
+ with_items: "{{ dnetworks }}"
+ diff: false
when: docker_api_version is version('1.25', '>=')
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/comparisons.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/comparisons.yml
index 54f0d4a62..c37a0c4df 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/comparisons.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/comparisons.yml
@@ -384,9 +384,8 @@
- name: Pull {{ docker_test_image_hello_world }} image to make sure wildcard_2 test succeeds
# If the image isn't there, it will pull it and return 'changed'.
- docker_image:
+ docker_image_pull:
name: "{{ docker_test_image_hello_world }}"
- source: pull
- name: wildcard
docker_container:
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/image-ids.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/image-ids.yml
index 76270c68a..4dfdb02a6 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/image-ids.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/image-ids.yml
@@ -11,9 +11,8 @@
cnames: "{{ cnames + [cname] }}"
- name: Pull images
- docker_image:
+ docker_image_pull:
name: "{{ image }}"
- source: pull
loop:
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_alpine }}"
@@ -69,10 +68,9 @@
- name: Untag image
# Image will not be deleted since the container still uses it
- docker_image:
+ docker_image_remove:
name: "{{ docker_test_image_alpine }}"
- force_absent: true
- state: absent
+ force: true
- name: Create container with {{ docker_test_image_alpine }} image via name (check mode, will pull, same image)
docker_container:
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/options.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/options.yml
index 1254fb52d..845c7897a 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/options.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container/tasks/tests/options.yml
@@ -2235,9 +2235,8 @@
- name: Pull images to make sure ignore_image test succeeds
# If the image isn't there, it will pull it and return 'changed'.
- docker_image:
+ docker_image_pull:
name: "{{ item }}"
- source: pull
loop:
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_registry_nginx }}"
@@ -2456,9 +2455,8 @@
diff: false
- name: cleanup image
- docker_image:
+ docker_image_remove:
name: "{{ iname_labels }}"
- state: absent
diff: false
- assert:
@@ -2486,9 +2484,8 @@
- name: Pull images to make sure ignore_image test succeeds
# If the image isn't there, it will pull it and return 'changed'.
- docker_image:
+ docker_image_pull:
name: "{{ item }}"
- source: pull
loop:
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_registry_nginx }}"
@@ -2577,9 +2574,8 @@
inames: "{{ inames + [iname_name_mismatch] }}"
- name: Tag hello world image (pulled earlier) with new name
- docker_image:
+ docker_image_tag:
name: "{{ docker_test_image_registry_nginx }}"
- source: local
repository: "{{ iname_name_mismatch }}:latest"
- name: image_name_mismatch
@@ -2617,9 +2613,8 @@
diff: false
- name: Cleanup image
- docker_image:
+ docker_image_remove:
name: "{{ iname_name_mismatch }}"
- state: absent
diff: false
- assert:
@@ -3015,46 +3010,48 @@ avoid such warnings, please quote the value.' in (log_options_2.warnings | defau
## mac_address #####################################################
####################################################################
-- name: mac_address
- docker_container:
- image: "{{ docker_test_image_alpine }}"
- command: '/bin/sh -c "sleep 10m"'
- name: "{{ cname }}"
- mac_address: 92:d0:c6:0a:29:33
- state: started
- register: mac_address_1
-
-- name: mac_address (idempotency)
- docker_container:
- image: "{{ docker_test_image_alpine }}"
- command: '/bin/sh -c "sleep 10m"'
- name: "{{ cname }}"
- mac_address: 92:d0:c6:0a:29:33
- state: started
- register: mac_address_2
-
-- name: mac_address (change)
- docker_container:
- image: "{{ docker_test_image_alpine }}"
- command: '/bin/sh -c "sleep 10m"'
- name: "{{ cname }}"
- mac_address: 92:d0:c6:0a:29:44
- state: started
- force_kill: true
- register: mac_address_3
-
-- name: cleanup
- docker_container:
- name: "{{ cname }}"
- state: absent
- force_kill: true
- diff: false
-
-- assert:
- that:
- - mac_address_1 is changed
- - mac_address_2 is not changed
- - mac_address_3 is changed
+- when: docker_api_version is version('1.44', '<')
+ block:
+ - name: mac_address
+ docker_container:
+ image: "{{ docker_test_image_alpine }}"
+ command: '/bin/sh -c "sleep 10m"'
+ name: "{{ cname }}"
+ mac_address: 92:d0:c6:0a:29:33
+ state: started
+ register: mac_address_1
+
+ - name: mac_address (idempotency)
+ docker_container:
+ image: "{{ docker_test_image_alpine }}"
+ command: '/bin/sh -c "sleep 10m"'
+ name: "{{ cname }}"
+ mac_address: 92:d0:c6:0a:29:33
+ state: started
+ register: mac_address_2
+
+ - name: mac_address (change)
+ docker_container:
+ image: "{{ docker_test_image_alpine }}"
+ command: '/bin/sh -c "sleep 10m"'
+ name: "{{ cname }}"
+ mac_address: 92:d0:c6:0a:29:44
+ state: started
+ force_kill: true
+ register: mac_address_3
+
+ - name: cleanup
+ docker_container:
+ name: "{{ cname }}"
+ state: absent
+ force_kill: true
+ diff: false
+
+ - assert:
+ that:
+ - mac_address_1 is changed
+ - mac_address_2 is not changed
+ - mac_address_3 is changed
####################################################################
## memory ##########################################################
@@ -3549,9 +3546,8 @@ avoid such warnings, please quote the value.' in (log_options_2.warnings | defau
####################################################################
- name: Remove hello-world image
- docker_image:
+ docker_image_remove:
name: hello-world:latest
- state: absent
- name: platform
docker_container:
@@ -3564,17 +3560,38 @@ avoid such warnings, please quote the value.' in (log_options_2.warnings | defau
register: platform_1
ignore_errors: true
-- name: platform (idempotency)
+- name: platform (idempotency with full name)
+ # Docker daemon only returns 'linux' as the platform for the container,
+ # so this has to be handled correctly by our additional code
docker_container:
image: hello-world:latest
name: "{{ cname }}"
state: present
- # The container always reports 'linux' as platform instead of 'linux/amd64'...
- platform: linux
+ platform: linux/amd64
debug: true
register: platform_2
ignore_errors: true
+- name: platform (idempotency with shorter name)
+ docker_container:
+ image: hello-world:latest
+ name: "{{ cname }}"
+ state: present
+ platform: linux
+ debug: true
+ register: platform_3
+ ignore_errors: true
+
+- name: platform (idempotency with shorter name)
+ docker_container:
+ image: hello-world:latest
+ name: "{{ cname }}"
+ state: present
+ platform: amd64
+ debug: true
+ register: platform_4
+ ignore_errors: true
+
- name: platform (changed)
docker_container:
image: hello-world:latest
@@ -3587,7 +3604,19 @@ avoid such warnings, please quote the value.' in (log_options_2.warnings | defau
comparisons:
# Do not restart because of the changed image ID
image: ignore
- register: platform_3
+ register: platform_5
+ ignore_errors: true
+
+- name: platform (idempotency)
+ docker_container:
+ image: hello-world:latest
+ name: "{{ cname }}"
+ state: present
+ pull: true
+ platform: 386
+ force_kill: true
+ debug: true
+ register: platform_6
ignore_errors: true
- name: cleanup
@@ -3601,7 +3630,10 @@ avoid such warnings, please quote the value.' in (log_options_2.warnings | defau
that:
- platform_1 is changed
- platform_2 is not changed and platform_2 is not failed
- - platform_3 is changed
+ - platform_3 is not changed and platform_3 is not failed
+ - platform_4 is not changed and platform_4 is not failed
+ - platform_5 is changed
+ - platform_6 is not changed and platform_6 is not failed
when: docker_api_version is version('1.41', '>=')
- assert:
that:
@@ -3611,6 +3643,149 @@ avoid such warnings, please quote the value.' in (log_options_2.warnings | defau
when: docker_api_version is version('1.41', '<')
####################################################################
+## pull / pull_check_mode_behavior #################################
+####################################################################
+
+- name: Remove hello-world image
+ docker_image_remove:
+ name: "{{ docker_test_image_hello_world }}"
+
+- name: pull (pull=never)
+ docker_container:
+ image: "{{ docker_test_image_hello_world }}"
+ name: "{{ cname }}"
+ state: present
+ pull: never
+ debug: true
+ register: pull_1
+ ignore_errors: true
+
+- name: pull (pull=missing, check mode)
+ docker_container:
+ image: "{{ docker_test_image_hello_world }}"
+ name: "{{ cname }}"
+ state: present
+ pull: missing
+ debug: true
+ register: pull_2
+ check_mode: true
+ ignore_errors: true
+
+- name: pull (pull=missing)
+ docker_container:
+ image: "{{ docker_test_image_hello_world }}"
+ name: "{{ cname }}"
+ state: present
+ pull: missing
+ debug: true
+ register: pull_3
+ ignore_errors: true
+
+- name: pull (pull=missing, idempotent, check mode)
+ docker_container:
+ image: "{{ docker_test_image_hello_world }}"
+ name: "{{ cname }}"
+ state: present
+ pull: missing
+ debug: true
+ register: pull_4
+ check_mode: true
+ ignore_errors: true
+
+- name: pull (pull=missing, idempotent)
+ docker_container:
+ image: "{{ docker_test_image_hello_world }}"
+ name: "{{ cname }}"
+ state: present
+ pull: missing
+ debug: true
+ register: pull_5
+ ignore_errors: true
+
+- name: pull (pull=always, check mode, pull_check_mode_behavior=image_not_present)
+ docker_container:
+ image: "{{ docker_test_image_hello_world }}"
+ name: "{{ cname }}"
+ state: present
+ pull: always
+ pull_check_mode_behavior: image_not_present
+ debug: true
+ register: pull_6
+ check_mode: true
+ ignore_errors: true
+
+- name: pull (pull=always, check mode, pull_check_mode_behavior=always)
+ docker_container:
+ image: "{{ docker_test_image_hello_world }}"
+ name: "{{ cname }}"
+ state: present
+ pull: always
+ pull_check_mode_behavior: always
+ debug: true
+ register: pull_7
+ check_mode: true
+ ignore_errors: true
+
+- name: pull (pull=always)
+ docker_container:
+ image: "{{ docker_test_image_hello_world }}"
+ name: "{{ cname }}"
+ state: present
+ pull: always
+ debug: true
+ register: pull_8
+ ignore_errors: true
+
+- name: cleanup
+ docker_container:
+ name: "{{ cname }}"
+ state: absent
+ force_kill: true
+ diff: false
+
+- assert:
+ that:
+ - pull_1 is failed
+ - pull_1.msg == ("Cannot find image with name " ~ docker_test_image_hello_world ~ ", and pull=never")
+ - pull_2 is changed
+ - pulled_image_action not in pull_2.actions
+ - pulled_image_action_changed in pull_2.actions
+ - pulled_image_action_unchanged not in pull_2.actions
+ - pull_3 is changed
+ - pulled_image_action not in pull_3.actions
+ - pulled_image_action_changed in pull_3.actions
+ - pulled_image_action_unchanged not in pull_3.actions
+ - pull_4 is not changed
+ - pulled_image_action not in pull_4.actions
+ - pulled_image_action_changed not in pull_4.actions
+ - pulled_image_action_unchanged not in pull_4.actions
+ - pull_5 is not changed
+ - pulled_image_action not in pull_5.actions
+ - pulled_image_action_changed not in pull_5.actions
+ - pulled_image_action_unchanged not in pull_5.actions
+ - pull_6 is not changed
+ - pulled_image_action not in pull_6.actions
+ - pulled_image_action_changed not in pull_6.actions
+ - pulled_image_action_unchanged not in pull_6.actions
+ - pull_7 is changed
+ - pulled_image_action in pull_7.actions
+ - pulled_image_action_changed not in pull_7.actions
+ - pulled_image_action_unchanged not in pull_7.actions
+ - pull_8 is not changed
+ - pulled_image_action not in pull_8.actions
+ - pulled_image_action_changed not in pull_8.actions
+ - pulled_image_action_unchanged in pull_8.actions
+ vars:
+ pulled_image_action:
+ pulled_image: "{{ docker_test_image_hello_world }}"
+ pulled_image_action_changed:
+ pulled_image: "{{ docker_test_image_hello_world }}"
+ changed: true
+ pulled_image_action_unchanged:
+ pulled_image: "{{ docker_test_image_hello_world }}"
+ changed: false
+
+####################################################################
## privileged ######################################################
####################################################################
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/meta/main.yml
index 2650229d8..f5b897895 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/meta/main.yml
@@ -5,4 +5,5 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
- setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/main.yml
index 20f9a2681..7eb1b86a3 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/main.yml
@@ -26,18 +26,20 @@
# Run the tests
- block:
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- - name: "Make sure all containers are removed"
- docker_container:
- name: "{{ item }}"
- state: absent
- force_kill: true
- with_items: "{{ cnames }}"
- diff: false
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
+ diff: false
when: docker_api_version is version('1.25', '>=')
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container_copy_into/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container_exec/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container_exec/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container_exec/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container_exec/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_container_info/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_container_info/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_container_info/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_container_info/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_host_info/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_host_info/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_host_info/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_host_info/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_host_info/tasks/test_host_info.yml b/ansible_collections/community/docker/tests/integration/targets/docker_host_info/tasks/test_host_info.yml
index 0d090db97..b4871d3e3 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_host_info/tasks/test_host_info.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_host_info/tasks/test_host_info.yml
@@ -91,7 +91,7 @@
- name: assert container is returned when filters are matched (single label)
assert:
- that: "{{ output.containers | length }} == 1"
+ that: "output.containers | length == 1"
- name: Get info on Docker host and list containers matching filters (multiple labels)
docker_host_info:
@@ -104,7 +104,7 @@
- name: assert container is returned when filters are matched (multiple labels)
assert:
- that: "{{ output.containers | length }} == 1"
+ that: "output.containers | length == 1"
- name: Get info on Docker host and do not list containers which do not match filters
docker_host_info:
@@ -118,7 +118,7 @@
- name: assert no container is returned when filters are not matched
assert:
- that: "{{ output.containers | length }} == 0"
+ that: "output.containers | length == 0"
- name: Get info on Docker host and list containers matching filters (single label, not all containers)
docker_host_info:
@@ -139,8 +139,8 @@
- name: assert one resp. two container is returned
assert:
that:
- - "{{ output.containers | length }} == 1"
- - "{{ output_all.containers | length }} == 2"
+ - "output.containers | length == 1"
+ - "output_all.containers | length == 2"
- name: Get info on Docker host and list containers with verbose output
docker_host_info:
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image/meta/main.yml
index f7ba9ab1b..511f9e419 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image/meta/main.yml
@@ -5,4 +5,5 @@
dependencies:
- setup_docker_registry
+ - setup_docker_python_deps
- setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/test.yml
index 50bb84ffc..ea3b47dd3 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/test.yml
@@ -31,22 +31,24 @@
- StagedDockerfile
- block:
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- - name: "Make sure all images are removed"
- docker_image:
- name: "{{ item }}"
- state: absent
- with_items: "{{ inames }}"
- - name: "Make sure all containers are removed"
- docker_container:
- name: "{{ item }}"
- state: absent
- force_kill: true
- with_items: "{{ cnames }}"
+ - name: "Make sure all images are removed"
+ docker_image:
+ name: "{{ item }}"
+ state: absent
+ with_items: "{{ inames }}"
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
when: docker_api_version is version('1.25', '>=')
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/basic.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/basic.yml
index 78b4f7738..068e92f4e 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/basic.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/basic.yml
@@ -117,7 +117,7 @@
register: fail_3
ignore_errors: true
-- name: buildargs
+- name: Build image ID (must fail)
docker_image:
source: build
name: "{{ present_1.image.Id }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/docker_image.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/docker_image.yml
index a13eb691f..ffd427fd2 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/docker_image.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/docker_image.yml
@@ -9,8 +9,8 @@
- name: Determining pushed image names
set_fact:
- hello_world_image_base: "{{ registry_address }}/test/hello-world"
- test_image_base: "{{ registry_address }}/test/{{ iname }}"
+ hello_world_image_base: "{{ registry_address | default('localhost') }}/test/hello-world"
+ test_image_base: "{{ registry_address | default('localhost') }}/test/{{ iname }}"
- name: Registering image name
set_fact:
@@ -20,179 +20,182 @@
## interact with test registry #####################################
####################################################################
-- name: Make sure image is not there
- docker_image:
- name: "{{ hello_world_image_base }}:latest"
- state: absent
- force_absent: true
-
-- name: Make sure we have {{ docker_test_image_hello_world }}
- docker_image:
- name: "{{ docker_test_image_hello_world }}"
- source: pull
-
-- name: Push image to test registry
- docker_image:
- name: "{{ docker_test_image_hello_world }}"
- repository: "{{ hello_world_image_base }}:latest"
- push: true
- source: local
- register: push_1
-
-- name: Push image to test registry (idempotent)
- docker_image:
- name: "{{ docker_test_image_hello_world }}"
- repository: "{{ hello_world_image_base }}:latest"
- push: true
- source: local
- register: push_2
-
-- name: Push image to test registry (force, still idempotent)
- docker_image:
- name: "{{ docker_test_image_hello_world }}"
- repository: "{{ hello_world_image_base }}:latest"
- push: true
- source: local
- force_tag: true
- register: push_3
-
-- assert:
- that:
- - push_1 is changed
- - push_2 is not changed
- - push_3 is not changed
-
-- name: Get facts of local image
- docker_image_info:
- name: "{{ hello_world_image_base }}:latest"
- register: facts_1
-
-- name: Make sure image is not there
- docker_image:
- name: "{{ hello_world_image_base }}:latest"
- state: absent
- force_absent: true
-
-- name: Get facts of local image (absent)
- docker_image_info:
- name: "{{ hello_world_image_base }}:latest"
- register: facts_2
-
-- name: Pull image from test registry
- docker_image:
- name: "{{ hello_world_image_base }}:latest"
- state: present
- source: pull
- register: pull_1
-
-- name: Pull image from test registry (idempotency)
- docker_image:
- name: "{{ hello_world_image_base }}:latest"
- state: present
- source: pull
- register: pull_2
-
-- name: Get facts of local image (present)
- docker_image_info:
- name: "{{ hello_world_image_base }}:latest"
- register: facts_3
-
-- assert:
- that:
- - pull_1 is changed
- - pull_2 is not changed
- - facts_1.images | length == 1
- - facts_2.images | length == 0
- - facts_3.images | length == 1
-
-- name: Pull image from test registry (with digest)
- docker_image:
- name: "{{ facts_3.images[0].RepoDigests[0] }}"
- state: present
- source: pull
- force_source: true
- register: pull_digest
-
-- name: Make sure that changed is still false
- assert:
- that:
- - pull_digest is not changed
-
-- name: Tag different image with new tag
- docker_image:
- name: "{{ docker_test_image_alpine_different }}"
- repository: "{{ hello_world_image_base }}:newtag"
- push: false
- source: pull
-
-- name: Push different image with new tag
- docker_image:
- name: "{{ hello_world_image_base }}"
- repository: "{{ hello_world_image_base }}"
- tag: newtag
- push: true
- 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: true
- 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: false
- source: pull
-
-- name: Push same image with new tag
- docker_image:
- name: "{{ hello_world_image_base }}"
- repository: "{{ hello_world_image_base }}"
- tag: newtag2
- push: true
- 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: true
- 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
+- name: Run registry tests only when registry is present
+ when: registry_address is defined
+ block:
+ - name: Make sure image is not there
+ docker_image:
+ name: "{{ hello_world_image_base }}:latest"
+ state: absent
+ force_absent: true
+
+ - name: Make sure we have {{ docker_test_image_hello_world }}
+ docker_image:
+ name: "{{ docker_test_image_hello_world }}"
+ source: pull
+
+ - name: Push image to test registry
+ docker_image:
+ name: "{{ docker_test_image_hello_world }}"
+ repository: "{{ hello_world_image_base }}:latest"
+ push: true
+ source: local
+ register: push_1
+
+ - name: Push image to test registry (idempotent)
+ docker_image:
+ name: "{{ docker_test_image_hello_world }}"
+ repository: "{{ hello_world_image_base }}:latest"
+ push: true
+ source: local
+ register: push_2
+
+ - name: Push image to test registry (force, still idempotent)
+ docker_image:
+ name: "{{ docker_test_image_hello_world }}"
+ repository: "{{ hello_world_image_base }}:latest"
+ push: true
+ source: local
+ force_tag: true
+ register: push_3
+
+ - assert:
+ that:
+ - push_1 is changed
+ - push_2 is not changed
+ - push_3 is not changed
+
+ - name: Get facts of local image
+ docker_image_info:
+ name: "{{ hello_world_image_base }}:latest"
+ register: facts_1
+
+ - name: Make sure image is not there
+ docker_image:
+ name: "{{ hello_world_image_base }}:latest"
+ state: absent
+ force_absent: true
+
+ - name: Get facts of local image (absent)
+ docker_image_info:
+ name: "{{ hello_world_image_base }}:latest"
+ register: facts_2
+
+ - name: Pull image from test registry
+ docker_image:
+ name: "{{ hello_world_image_base }}:latest"
+ state: present
+ source: pull
+ register: pull_1
+
+ - name: Pull image from test registry (idempotency)
+ docker_image:
+ name: "{{ hello_world_image_base }}:latest"
+ state: present
+ source: pull
+ register: pull_2
+
+ - name: Get facts of local image (present)
+ docker_image_info:
+ name: "{{ hello_world_image_base }}:latest"
+ register: facts_3
+
+ - assert:
+ that:
+ - pull_1 is changed
+ - pull_2 is not changed
+ - facts_1.images | length == 1
+ - facts_2.images | length == 0
+ - facts_3.images | length == 1
+
+ - name: Pull image from test registry (with digest)
+ docker_image:
+ name: "{{ hello_world_image_base }}@{{ facts_3.images[0].RepoDigests[0] | regex_replace('.*@', '') }}"
+ state: present
+ source: pull
+ force_source: true
+ register: pull_digest
+
+ - name: Make sure that changed is still false
+ assert:
+ that:
+ - pull_digest is not changed
+
+ - name: Tag different image with new tag
+ docker_image:
+ name: "{{ docker_test_image_alpine_different }}"
+ repository: "{{ hello_world_image_base }}:newtag"
+ push: false
+ source: pull
+
+ - name: Push different image with new tag
+ docker_image:
+ name: "{{ hello_world_image_base }}"
+ repository: "{{ hello_world_image_base }}"
+ tag: newtag
+ push: true
+ 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: true
+ 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: false
+ source: pull
+
+ - name: Push same image with new tag
+ docker_image:
+ name: "{{ hello_world_image_base }}"
+ repository: "{{ hello_world_image_base }}"
+ tag: newtag2
+ push: true
+ 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: true
+ 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 ######################################################
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/options.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/options.yml
index 0670f1332..b8f6c7002 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/options.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image/tasks/tests/options.yml
@@ -76,7 +76,7 @@
build:
path: "{{ remote_tmp_dir }}/files"
container_limits:
- memory: 4000
+ memory: 4KB
pull: false
source: build
ignore_errors: true
@@ -88,8 +88,8 @@
build:
path: "{{ remote_tmp_dir }}/files"
container_limits:
- memory: 7000000
- memswap: 8000000
+ memory: 7MB
+ memswap: 8MB
pull: false
source: build
register: container_limits_2
@@ -444,3 +444,61 @@
- assert:
that:
- path_1 is changed
+
+####################################################################
+## build.shm_size ##################################################
+####################################################################
+
+- name: Build image with custom shm_size
+ docker_image:
+ name: "{{ iname }}"
+ build:
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "MyDockerfile"
+ pull: false
+ shm_size: 128MB
+ source: build
+ register: path_1
+
+- name: cleanup
+ docker_image:
+ name: "{{ iname }}"
+ state: absent
+ force_absent: true
+
+- assert:
+ that:
+ - path_1 is changed
+
+####################################################################
+## build.labels ####################################################
+####################################################################
+
+- name: Build image with labels
+ docker_image:
+ name: "{{ iname }}"
+ build:
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "MyDockerfile"
+ pull: false
+ labels:
+ FOO: BAR
+ this is a label: this is the label's value
+ source: build
+ register: labels_1
+
+- name: cleanup
+ docker_image:
+ name: "{{ iname }}"
+ state: absent
+ force_absent: true
+
+- name: Show image information
+ debug:
+ var: labels_1.image
+
+- assert:
+ that:
+ - labels_1 is changed
+ - labels_1.image.Config.Labels.FOO == 'BAR'
+ - labels_1.image.Config.Labels["this is a label"] == "this is the label's value"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/aliases b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/aliases
new file mode 100644
index 000000000..2e1acc0ad
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/aliases
@@ -0,0 +1,6 @@
+# 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
+
+azp/4
+destructive
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/meta/main.yml
new file mode 100644
index 000000000..71ac98d4f
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/meta/main.yml
@@ -0,0 +1,10 @@
+---
+# 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
+
+dependencies:
+ - setup_docker_cli_buildx
+ # The Python dependencies are needed for the other modules
+ - setup_docker_python_deps
+ - setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/main.yml
new file mode 100644
index 000000000..88b23cfe7
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/main.yml
@@ -0,0 +1,13 @@
+---
+# 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 #
+####################################################################
+
+- when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
+ include_tasks:
+ file: test.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/run-test.yml
new file mode 100644
index 000000000..72a58962d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/run-test.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/test.yml
new file mode 100644
index 000000000..af6e75b22
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/test.yml
@@ -0,0 +1,59 @@
+---
+# 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
+
+- name: Create random name prefix
+ set_fact:
+ name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
+- name: Create image and container list
+ set_fact:
+ inames: []
+ cnames: []
+
+- debug:
+ msg: "Using name prefix {{ name_prefix }}"
+
+- name: Create files directory
+ file:
+ path: '{{ remote_tmp_dir }}/files'
+ state: directory
+
+- name: Template files
+ template:
+ src: '{{ item }}'
+ dest: '{{ remote_tmp_dir }}/files/{{ item }}'
+ loop:
+ - ArgsDockerfile
+ - Dockerfile
+ - EtcHostsDockerfile
+ - MyDockerfile
+ - StagedDockerfile
+
+- debug:
+ msg: "Has buildx plugin: {{ docker_has_buildx }}"
+
+- block:
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
+
+ always:
+ - name: "Make sure all images are removed"
+ docker_image:
+ name: "{{ item }}"
+ state: absent
+ with_items: "{{ inames }}"
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
+
+ when: docker_api_version is version('1.25', '>=') and docker_cli_version is version('19.03', '>=') and docker_has_buildx
+
+- fail: msg="Too old docker / docker-py version to run docker_image tests!"
+ when: not(docker_api_version is version('1.25', '>=') and docker_cli_version is version('19.03', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6) and docker_has_buildx
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/tests/options.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/tests/options.yml
new file mode 100644
index 000000000..990035788
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/tasks/tests/options.yml
@@ -0,0 +1,204 @@
+---
+# 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
+
+- name: Registering image name
+ set_fact:
+ iname: "{{ name_prefix ~ '-options' }}"
+
+- name: Registering image name
+ set_fact:
+ inames: "{{ inames + [iname] }}"
+
+####################################################################
+## args ############################################################
+####################################################################
+
+- name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- name: buildargs
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "ArgsDockerfile"
+ args:
+ IMAGE: "{{ docker_test_image_busybox }}"
+ TEST1: val1
+ TEST2: val2
+ TEST3: "True"
+ pull: false
+ register: buildargs_1
+
+- name: buildargs (idempotency)
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "ArgsDockerfile"
+ args:
+ IMAGE: "{{ docker_test_image_busybox }}"
+ TEST1: val1
+ TEST2: val2
+ TEST3: "True"
+ pull: false
+ register: buildargs_2
+
+- name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- assert:
+ that:
+ - buildargs_1 is changed
+ - buildargs_2 is not changed
+
+####################################################################
+## dockerfile ######################################################
+####################################################################
+
+- name: dockerfile
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "MyDockerfile"
+ pull: false
+ register: dockerfile_1
+
+- name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- assert:
+ that:
+ - dockerfile_1 is changed
+ - "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stderr"
+ - dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
+
+####################################################################
+## platform ########################################################
+####################################################################
+
+- name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- name: platform
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ platform: linux
+ pull: false
+ register: platform_1
+
+- name: platform (idempotency)
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ platform: linux
+ pull: false
+ register: platform_2
+
+- name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- assert:
+ that:
+ - platform_1 is changed
+ - platform_2 is not changed
+
+####################################################################
+## target ##########################################################
+####################################################################
+
+- name: Build multi-stage image
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "StagedDockerfile"
+ target: first
+ pull: false
+ register: dockerfile_2
+
+- name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- assert:
+ that:
+ - dockerfile_2 is changed
+ - dockerfile_2.image.Config.WorkingDir == '/first'
+
+####################################################################
+## etc_hosts #######################################################
+####################################################################
+
+- name: Build image with custom etc_hosts
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "EtcHostsDockerfile"
+ pull: false
+ etc_hosts:
+ some-custom-host: "127.0.0.1"
+ register: path_1
+
+- name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- assert:
+ that:
+ - path_1 is changed
+
+####################################################################
+## shm_size ########################################################
+####################################################################
+
+- name: Build image with custom shm_size
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "MyDockerfile"
+ pull: false
+ shm_size: 128MB
+ register: path_1
+
+- name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- assert:
+ that:
+ - path_1 is changed
+
+####################################################################
+## labels ##########################################################
+####################################################################
+
+- name: Build image with labels
+ docker_image_build:
+ name: "{{ iname }}"
+ path: "{{ remote_tmp_dir }}/files"
+ dockerfile: "MyDockerfile"
+ pull: false
+ labels:
+ FOO: BAR
+ this is a label: this is the label's value
+ register: labels_1
+
+- name: cleanup
+ docker_image_remove:
+ name: "{{ iname }}"
+
+- name: Show image information
+ debug:
+ var: labels_1.image
+
+- assert:
+ that:
+ - labels_1 is changed
+ - labels_1.image.Config.Labels.FOO == 'BAR'
+ - labels_1.image.Config.Labels["this is a label"] == "this is the label's value"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/ArgsDockerfile b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/ArgsDockerfile
new file mode 100644
index 000000000..dedd88a8f
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/ArgsDockerfile
@@ -0,0 +1,13 @@
+# Copyright (c) 2022, Felix Fontein
+# 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
+
+ARG IMAGE
+ARG TEST1
+ARG TEST2
+ARG TEST3
+
+FROM ${IMAGE}
+ENV foo /bar
+WORKDIR ${foo}
+RUN echo "${TEST1} - ${TEST2} - ${TEST3}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/Dockerfile b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/Dockerfile
new file mode 100644
index 000000000..286094b9e
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/Dockerfile
@@ -0,0 +1,7 @@
+# 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
+
+FROM {{ docker_test_image_busybox }}
+ENV foo /bar
+WORKDIR ${foo}
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/EtcHostsDockerfile b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/EtcHostsDockerfile
new file mode 100644
index 000000000..bc21b966b
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/EtcHostsDockerfile
@@ -0,0 +1,7 @@
+# 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
+
+FROM {{ docker_test_image_busybox }}
+# This should fail building if docker cannot resolve some-custom-host
+RUN ping -c1 some-custom-host
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/MyDockerfile b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/MyDockerfile
new file mode 100644
index 000000000..24b1c926f
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/MyDockerfile
@@ -0,0 +1,9 @@
+# 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
+
+FROM {{ docker_test_image_alpine }}
+ENV INSTALL_PATH /newdata
+RUN mkdir -p $INSTALL_PATH
+
+WORKDIR $INSTALL_PATH
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/StagedDockerfile b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/StagedDockerfile
new file mode 100644
index 000000000..da2253425
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/StagedDockerfile
@@ -0,0 +1,11 @@
+# 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
+
+FROM {{ docker_test_image_busybox }} AS first
+ENV dir /first
+WORKDIR ${dir}
+
+FROM {{ docker_test_image_busybox }} AS second
+ENV dir /second
+WORKDIR ${dir}
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_export/aliases b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/aliases
new file mode 100644
index 000000000..2e1acc0ad
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/aliases
@@ -0,0 +1,6 @@
+# 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
+
+azp/4
+destructive
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_export/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/meta/main.yml
new file mode 100644
index 000000000..f5b897895
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/meta/main.yml
@@ -0,0 +1,9 @@
+---
+# 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
+
+dependencies:
+ - setup_docker
+ - setup_docker_python_deps
+ - setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/main.yml
new file mode 100644
index 000000000..88b23cfe7
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/main.yml
@@ -0,0 +1,13 @@
+---
+# 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 #
+####################################################################
+
+- when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
+ include_tasks:
+ file: test.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/run-test.yml
new file mode 100644
index 000000000..72a58962d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/run-test.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/test.yml
new file mode 100644
index 000000000..e6ffe722d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/test.yml
@@ -0,0 +1,39 @@
+---
+# 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
+
+- name: Create random name prefix
+ set_fact:
+ name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
+- name: Create image and container list
+ set_fact:
+ inames: []
+ cnames: []
+
+- debug:
+ msg: "Using name prefix {{ name_prefix }}"
+
+- block:
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
+
+ always:
+ - name: "Make sure all images are removed"
+ docker_image_remove:
+ name: "{{ item }}"
+ with_items: "{{ inames }}"
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
+
+ when: docker_api_version is version('1.25', '>=')
+
+- fail: msg="Too old docker / docker-py version to run docker_image tests!"
+ when: not(docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/tests/basic.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/tests/basic.yml
new file mode 100644
index 000000000..b5f7e6534
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_export/tasks/tests/basic.yml
@@ -0,0 +1,69 @@
+---
+# 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
+
+- set_fact:
+ image_names:
+ - "{{ docker_test_image_hello_world }}"
+ - "{{ docker_test_image_alpine_different }}"
+ - "{{ docker_test_image_alpine }}"
+
+- name: Make sure images are there
+ docker_image_pull:
+ name: "{{ item }}"
+ register: images
+ loop: "{{ image_names }}"
+
+- vars:
+ image_ids: "{{ images.results | map(attribute='image') | map(attribute='Id') | list }}"
+ all_images: "{{ image_names + (images.results | map(attribute='image') | map(attribute='Id') | list) }}"
+ image_tasks:
+ - file: archive-1.tar
+ images: "{{ image_names }}"
+ - file: archive-2.tar
+ images: "{{ image_ids }}"
+ - file: archive-3.tar
+ images:
+ - "{{ image_names[0] }}"
+ - "{{ image_ids[1] }}"
+ - file: archive-4.tar
+ images:
+ - "{{ image_ids[0] }}"
+ - "{{ image_names[0] }}"
+ - file: archive-5.tar
+ images:
+ - "{{ image_ids[0] }}"
+
+ block:
+ - name: Create archives
+ docker_image_export:
+ names: "{{ item.images }}"
+ path: "{{ remote_tmp_dir }}/{{ item.file }}"
+ loop: "{{ image_tasks }}"
+ loop_control:
+ label: "{{ item.file }}"
+ register: result
+
+ - name: Extract manifest.json files
+ command: tar xvf "{{ remote_tmp_dir }}/{{ item.file }}" manifest.json --to-stdout
+ loop: "{{ image_tasks }}"
+ loop_control:
+ label: "{{ item.file }}"
+ register: manifests
+
+ - name: Do basic tests
+ assert:
+ that:
+ - item.0.images | length == item.1 | length
+ - item.1 | unique | length == item.2 | length
+ - manifest_json_images == export_image_ids
+ loop: "{{ image_tasks | zip(export_images, manifests_json) }}"
+ loop_control:
+ label: "{{ item.0.file }}"
+ vars:
+ filenames: "{{ image_tasks | map(attribute='file') }}"
+ export_images: "{{ result.results | map(attribute='images') | map('map', attribute='Id') }}"
+ manifests_json: "{{ manifests.results | map(attribute='stdout') | map('from_json') }}"
+ manifest_json_images: "{{ item.2 | map(attribute='Config') | map('regex_replace', '.json$', '') | map('regex_replace', '^blobs/sha256/', '') | sort }}"
+ export_image_ids: "{{ item.1 | map('regex_replace', '^sha256:', '') | unique | sort }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_info/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_info/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image_info/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_info/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_info/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_info/tasks/main.yml
index 5bd053ac4..289a9cf1f 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image_info/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_info/tasks/main.yml
@@ -10,9 +10,8 @@
- block:
- name: Make sure image is not there
- docker_image:
+ docker_image_remove:
name: "{{ docker_test_image_alpine_different }}"
- state: absent
- name: Inspect a non-available image
docker_image_info:
@@ -24,10 +23,8 @@
- "result.images|length == 0"
- name: Make sure images are there
- docker_image:
+ docker_image_pull:
name: "{{ item }}"
- source: pull
- state: present
loop:
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_alpine }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_load/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_load/meta/main.yml
index 2650229d8..f5b897895 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image_load/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_load/meta/main.yml
@@ -5,4 +5,5 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
- setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/test.yml
index a56c95301..e6ffe722d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/test.yml
@@ -15,22 +15,23 @@
msg: "Using name prefix {{ name_prefix }}"
- block:
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- - name: "Make sure all images are removed"
- docker_image:
- name: "{{ item }}"
- state: absent
- with_items: "{{ inames }}"
- - name: "Make sure all containers are removed"
- docker_container:
- name: "{{ item }}"
- state: absent
- force_kill: true
- with_items: "{{ cnames }}"
+ - name: "Make sure all images are removed"
+ docker_image_remove:
+ name: "{{ item }}"
+ with_items: "{{ inames }}"
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
when: docker_api_version is version('1.25', '>=')
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/tests/basic.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/tests/basic.yml
index 8d9de9948..70dc8df01 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/tests/basic.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_load/tasks/tests/basic.yml
@@ -10,9 +10,8 @@
- "{{ docker_test_image_alpine }}"
- name: Make sure images are there
- docker_image:
+ docker_image_pull:
name: "{{ item }}"
- source: pull
register: images
loop: "{{ image_names }}"
@@ -22,7 +21,9 @@
all_images: "{{ image_names + (images.results | map(attribute='image') | map(attribute='Id') | list) }}"
- name: Create archives
- command: docker save {{ item.images | join(' ') }} -o {{ remote_tmp_dir }}/{{ item.file }}
+ docker_image_export:
+ names: "{{ item.images }}"
+ path: "{{ remote_tmp_dir }}/{{ item.file }}"
loop:
- file: archive-1.tar
images: "{{ image_names }}"
@@ -43,10 +44,9 @@
# All images by IDs
- name: Remove all images
- docker_image:
+ docker_image_remove:
name: "{{ item }}"
- state: absent
- force_absent: true
+ force: true
loop: "{{ all_images }}"
ignore_errors: true
register: remove_all_images
@@ -67,10 +67,9 @@
when: remove_all_images is failed
- name: Remove all images (after pruning)
- docker_image:
+ docker_image_remove:
name: "{{ item }}"
- state: absent
- force_absent: true
+ force: true
loop: "{{ all_images }}"
when: remove_all_images is failed
@@ -107,9 +106,8 @@
# Mixed images and IDs
- name: Remove all images
- docker_image:
+ docker_image_remove:
name: "{{ item }}"
- state: absent
loop: "{{ all_images }}"
- name: Load all images (mixed images and IDs)
@@ -137,9 +135,8 @@
# Same image twice
- name: Remove all images
- docker_image:
+ docker_image_remove:
name: "{{ item }}"
- state: absent
loop: "{{ all_images }}"
- name: Load all images (same image twice)
@@ -162,9 +159,8 @@
# Single image by ID
- name: Remove all images
- docker_image:
+ docker_image_remove:
name: "{{ item }}"
- state: absent
loop: "{{ all_images }}"
- name: Load all images (single image by ID)
@@ -197,9 +193,8 @@
# All images by names
- name: Remove all images
- docker_image:
+ docker_image_remove:
name: "{{ item }}"
- state: absent
loop: "{{ all_images }}"
- name: Load all images (names)
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/aliases b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/aliases
new file mode 100644
index 000000000..2e1acc0ad
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/aliases
@@ -0,0 +1,6 @@
+# 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
+
+azp/4
+destructive
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/meta/main.yml
new file mode 100644
index 000000000..ff316450e
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/meta/main.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+dependencies:
+ - setup_docker_registry
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/main.yml
new file mode 100644
index 000000000..88b23cfe7
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/main.yml
@@ -0,0 +1,13 @@
+---
+# 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 #
+####################################################################
+
+- when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
+ include_tasks:
+ file: test.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/run-test.yml
new file mode 100644
index 000000000..72a58962d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/run-test.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/test.yml
new file mode 100644
index 000000000..e6ffe722d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/test.yml
@@ -0,0 +1,39 @@
+---
+# 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
+
+- name: Create random name prefix
+ set_fact:
+ name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
+- name: Create image and container list
+ set_fact:
+ inames: []
+ cnames: []
+
+- debug:
+ msg: "Using name prefix {{ name_prefix }}"
+
+- block:
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
+
+ always:
+ - name: "Make sure all images are removed"
+ docker_image_remove:
+ name: "{{ item }}"
+ with_items: "{{ inames }}"
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
+
+ when: docker_api_version is version('1.25', '>=')
+
+- fail: msg="Too old docker / docker-py version to run docker_image tests!"
+ when: not(docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/basic.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/basic.yml
new file mode 100644
index 000000000..23e1f0929
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/basic.yml
@@ -0,0 +1,196 @@
+---
+# 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
+
+- name: Basic pull tests
+ vars:
+ image_name: "{{ docker_test_image_hello_world_platform }}"
+ block:
+ - name: Make sure image is not there
+ docker_image_remove:
+ name: "{{ image_name }}"
+ force: true
+
+ - name: Pull image (check mode)
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: amd64
+ register: present_1_check
+ check_mode: true
+
+ - debug:
+ var: present_1_check.diff
+
+ - name: Pull image
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: amd64
+ register: present_1
+
+ - debug:
+ var: present_1.diff
+
+ - name: Pull image (idempotent 1, check mode)
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: amd64
+ pull: always
+ register: present_2_check
+ check_mode: true
+
+ - debug:
+ var: present_2_check.diff
+
+ - name: Pull image (idempotent 1)
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: amd64
+ pull: always
+ register: present_2
+
+ - debug:
+ var: present_2.diff
+
+ - name: Pull image (change, check mode)
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: arm64
+ pull: always
+ register: present_3_check
+ check_mode: true
+
+ - debug:
+ var: present_3_check.diff
+
+ - name: Pull image (change)
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: arm64
+ pull: always
+ register: present_3
+
+ - debug:
+ var: present_3.diff
+
+ - name: Pull image (idempotent 2, check mode)
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: arm64
+ pull: not_present
+ register: present_4_check
+ check_mode: true
+
+ - debug:
+ var: present_4_check.diff
+
+ - name: Pull image (idempotent 2)
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: arm64
+ pull: not_present
+ register: present_4
+
+ - debug:
+ var: present_4.diff
+
+ - name: Pull image (change, check mode)
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: amd64
+ pull: not_present
+ register: present_5_check
+ check_mode: true
+
+ - debug:
+ var: present_5_check.diff
+
+ - name: Pull image (change)
+ docker_image_pull:
+ name: "{{ image_name }}"
+ platform: amd64
+ pull: not_present
+ register: present_5
+
+ - debug:
+ var: present_5.diff
+
+ - assert:
+ that:
+ - present_1_check is changed
+ - present_1_check.actions | length == 1
+ - present_1_check.actions[0] == 'Pulled image ' ~ image_name
+ - present_1_check.diff.before.exists is false
+ - present_1_check.diff.after.id == 'unknown'
+ - present_1 is changed
+ - present_1.actions | length == 1
+ - present_1.actions[0] == 'Pulled image ' ~ image_name
+ - present_1.diff.before.exists is false
+ - present_1.diff.after.id is string
+ - present_2_check is changed
+ - present_2_check.actions | length == 1
+ - present_2_check.actions[0] == 'Pulled image ' ~ image_name
+ - present_2_check.diff.before.id == present_1.diff.after.id
+ - present_2_check.diff.after.id == 'unknown'
+ - present_2 is not changed
+ - present_2.actions | length == 1
+ - present_2.actions[0] == 'Pulled image ' ~ image_name
+ - present_2.diff.before.id == present_1.diff.after.id
+ - present_2.diff.after.id == present_1.diff.after.id
+ - present_3_check is changed
+ - present_3_check.actions | length == 1
+ - present_3_check.actions[0] == 'Pulled image ' ~ image_name
+ - present_3_check.diff.before.id == present_1.diff.after.id
+ - present_3_check.diff.after.id == 'unknown'
+ - present_3 is changed
+ - present_3.actions | length == 1
+ - present_3.actions[0] == 'Pulled image ' ~ image_name
+ - present_3.diff.before.id == present_1.diff.after.id
+ - present_3.diff.after.id != present_1.diff.after.id
+ - present_3.diff.after.id is string
+ - present_4_check is not changed
+ - present_4_check.actions | length == 0
+ - present_4_check.diff.before.id == present_3.diff.after.id
+ - present_4_check.diff.after.id == present_3.diff.after.id
+ - present_4 is not changed
+ - present_4.actions | length == 0
+ - present_4.diff.before.id == present_3.diff.after.id
+ - present_4.diff.after.id == present_3.diff.after.id
+ - present_5_check is changed
+ - present_5_check.actions | length == 1
+ - present_5_check.actions[0] == 'Pulled image ' ~ image_name
+ - present_5_check.diff.before.id == present_3.diff.after.id
+ - present_5_check.diff.after.id == 'unknown'
+ - present_5 is changed
+ - present_5.actions | length == 1
+ - present_5.actions[0] == 'Pulled image ' ~ image_name
+ - present_5.diff.before.id == present_3.diff.after.id
+ - present_5.diff.after.id == present_1.diff.after.id
+
+ always:
+ - name: cleanup
+ docker_image_remove:
+ name: "{{ image_name }}"
+ force: true
+
+- name: Pull image ID (must fail)
+ docker_image_pull:
+ name: "{{ present_1.image.Id }}"
+ register: fail_1
+ ignore_errors: true
+
+- name: Pull invalid tag (must fail)
+ docker_image_pull:
+ name: "{{ docker_test_image_hello_world }}"
+ tag: foo/bar
+ register: fail_2
+ ignore_errors: true
+
+- assert:
+ that:
+ - fail_1 is failed
+ - >-
+ 'Cannot pull an image by ID' == fail_1.msg
+ - fail_2 is failed
+ - >-
+ '"foo/bar" is not a valid docker tag!' == fail_2.msg
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/image-ids.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/image-ids.yml
new file mode 100644
index 000000000..dd092a8b8
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/image-ids.yml
@@ -0,0 +1,89 @@
+---
+# 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
+
+- name: Image ID pull tests
+ block:
+ - name: Make sure images are not there
+ docker_image_remove:
+ name: "{{ item }}"
+ force: true
+ loop:
+ - "sha256:{{ docker_test_image_digest_v1_image_id }}"
+ - "sha256:{{ docker_test_image_digest_v2_image_id }}"
+
+ - name: Pull image 1
+ docker_image_pull:
+ name: "{{ docker_test_image_digest_base }}@sha256:{{ docker_test_image_digest_v1 }}"
+ register: present_1
+ diff: true
+
+ - name: Pull image 1 (idempotent, do pull)
+ docker_image_pull:
+ name: "{{ docker_test_image_digest_base }}@sha256:{{ docker_test_image_digest_v1 }}"
+ pull: always
+ register: present_2
+ diff: true
+
+ - name: Pull image 1 (idempotent, do not pull)
+ docker_image_pull:
+ name: "{{ docker_test_image_digest_base }}@sha256:{{ docker_test_image_digest_v1 }}"
+ pull: not_present
+ register: present_3
+ diff: true
+
+ - assert:
+ that:
+ - present_1 is changed
+ - present_1.actions | length == 1
+ - present_1.actions[0] == 'Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1
+ - present_1.diff.before.exists is false
+ - present_1.diff.after.id is string
+ - present_2 is not changed
+ - present_2.actions | length == 1
+ - present_2.actions[0] == 'Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1
+ - present_2.diff.before.id == present_1.diff.after.id
+ - present_2.diff.after.id == present_1.diff.after.id
+ - present_3 is not changed
+ - present_3.actions | length == 0
+ - present_3.diff.before.id == present_1.diff.after.id
+ - present_3.diff.after.id == present_1.diff.after.id
+
+ - name: Pull image 2 (check mode)
+ docker_image_pull:
+ name: "{{ docker_test_image_digest_base }}@sha256:{{ docker_test_image_digest_v2 }}"
+ pull: always
+ register: present_4
+ diff: true
+ check_mode: true
+
+ - name: Pull image 2
+ docker_image_pull:
+ name: "{{ docker_test_image_digest_base }}@sha256:{{ docker_test_image_digest_v2 }}"
+ pull: always
+ register: present_5
+ diff: true
+
+ - assert:
+ that:
+ - present_4 is changed
+ - present_4.actions | length == 1
+ - present_4.actions[0] == 'Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2
+ - present_4.diff.before.exists is false
+ - present_4.diff.after.id == 'unknown'
+ - present_5 is changed
+ - present_5.actions | length == 1
+ - present_5.actions[0] == 'Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2
+ - present_5.diff.before.exists is false
+ - present_5.diff.after.id != present_1.diff.after.id
+ - present_5.diff.after.id is string
+
+ always:
+ - name: cleanup
+ docker_image_remove:
+ name: "{{ item }}"
+ force: true
+ loop:
+ - "sha256:{{ docker_test_image_digest_v1_image_id }}"
+ - "sha256:{{ docker_test_image_digest_v2_image_id }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/registry.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/registry.yml
new file mode 100644
index 000000000..2edc3b62d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_pull/tasks/tests/registry.yml
@@ -0,0 +1,126 @@
+---
+# 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
+
+- name: Run registry tests only when registry is present
+ when: registry_address is defined
+ block:
+ - name: Registering image name
+ set_fact:
+ iname: "{{ name_prefix ~ '-options' }}"
+
+ - name: Determining pushed image names
+ set_fact:
+ hello_world_image_base: "{{ registry_address }}/test/hello-world"
+
+ - name: Registering image name
+ set_fact:
+ inames: "{{ inames + [iname, hello_world_image_base ~ ':latest'] }}"
+
+ - name: Make sure image is not there
+ docker_image_remove:
+ name: "{{ hello_world_image_base }}:latest"
+ force: true
+
+ - name: Make sure we have {{ docker_test_image_hello_world }}
+ docker_image_pull:
+ name: "{{ docker_test_image_hello_world }}"
+ diff: true
+
+ - name: Tag image
+ docker_image_tag:
+ name: "{{ docker_test_image_hello_world }}"
+ repository:
+ - "{{ hello_world_image_base }}:latest"
+
+ - name: Push image to test registry
+ docker_image_push:
+ name: "{{ hello_world_image_base }}:latest"
+
+ - name: Get facts of local image
+ docker_image_info:
+ name: "{{ hello_world_image_base }}:latest"
+ register: facts_1
+
+ - name: Make sure image is not there
+ docker_image_remove:
+ name: "{{ hello_world_image_base }}:latest"
+ force: true
+
+ - name: Get facts of local image (not there)
+ docker_image_info:
+ name: "{{ hello_world_image_base }}:latest"
+ register: facts_2
+
+ - name: Pull image from test registry (check mode)
+ docker_image_pull:
+ name: "{{ hello_world_image_base }}:latest"
+ register: pull_1_check
+ diff: true
+ check_mode: true
+
+ - name: Pull image from test registry
+ docker_image_pull:
+ name: "{{ hello_world_image_base }}:latest"
+ register: pull_1
+ diff: true
+
+ - name: Pull image from test registry (idempotency, not pulling, check mode)
+ docker_image_pull:
+ name: "{{ hello_world_image_base }}:latest"
+ pull: not_present
+ register: pull_2_check
+ diff: true
+ check_mode: true
+
+ - name: Pull image from test registry (idempotency, not pulling)
+ docker_image_pull:
+ name: "{{ hello_world_image_base }}:latest"
+ pull: not_present
+ register: pull_2
+ diff: true
+
+ - name: Pull image from test registry (idempotency, pulling, check mode)
+ docker_image_pull:
+ name: "{{ hello_world_image_base }}:latest"
+ pull: always
+ register: pull_3_check
+ diff: true
+ check_mode: true
+
+ - name: Pull image from test registry (idempotency, pulling)
+ docker_image_pull:
+ name: "{{ hello_world_image_base }}:latest"
+ pull: always
+ register: pull_3
+ diff: true
+
+ - name: Get facts of local image (present)
+ docker_image_info:
+ name: "{{ hello_world_image_base }}:latest"
+ register: facts_3
+
+ - assert:
+ that:
+ - pull_1_check is changed
+ - pull_1_check.diff.before.exists is false
+ - pull_1_check.diff.after.id == 'unknown'
+ - pull_1 is changed
+ - pull_1.diff.before.exists is false
+ - pull_1.diff.after.id == facts_1.images[0].Id
+ - pull_2_check is not changed
+ - pull_2_check.diff.before.id == facts_1.images[0].Id
+ - pull_2_check.diff.before == pull_2.diff.after
+ - pull_2 is not changed
+ - pull_2.diff.before.id == facts_1.images[0].Id
+ - pull_2.diff.before == pull_2.diff.after
+ - pull_3_check is changed
+ - pull_3_check.diff.before.id == facts_1.images[0].Id
+ - pull_3_check.diff.after.id == 'unknown'
+ - pull_3 is not changed
+ - pull_3.diff.before.id == facts_1.images[0].Id
+ - pull_3.diff.before == pull_2.diff.after
+ - facts_1.images | length == 1
+ - facts_2.images | length == 0
+ - facts_3.images | length == 1
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_push/aliases b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/aliases
new file mode 100644
index 000000000..2e1acc0ad
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/aliases
@@ -0,0 +1,6 @@
+# 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
+
+azp/4
+destructive
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_push/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/meta/main.yml
new file mode 100644
index 000000000..ff316450e
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/meta/main.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+dependencies:
+ - setup_docker_registry
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/main.yml
new file mode 100644
index 000000000..88b23cfe7
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/main.yml
@@ -0,0 +1,13 @@
+---
+# 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 #
+####################################################################
+
+- when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
+ include_tasks:
+ file: test.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/run-test.yml
new file mode 100644
index 000000000..72a58962d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/run-test.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/test.yml
new file mode 100644
index 000000000..e6ffe722d
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/test.yml
@@ -0,0 +1,39 @@
+---
+# 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
+
+- name: Create random name prefix
+ set_fact:
+ name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
+- name: Create image and container list
+ set_fact:
+ inames: []
+ cnames: []
+
+- debug:
+ msg: "Using name prefix {{ name_prefix }}"
+
+- block:
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
+
+ always:
+ - name: "Make sure all images are removed"
+ docker_image_remove:
+ name: "{{ item }}"
+ with_items: "{{ inames }}"
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ with_items: "{{ cnames }}"
+
+ when: docker_api_version is version('1.25', '>=')
+
+- fail: msg="Too old docker / docker-py version to run docker_image tests!"
+ when: not(docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/tests/basic.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/tests/basic.yml
new file mode 100644
index 000000000..15ed8744f
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/tests/basic.yml
@@ -0,0 +1,60 @@
+---
+# 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
+
+- vars:
+ image_name: registry.example.com:5000/foo/bar:baz
+ block:
+ - name: Make sure image is not present
+ docker_image_remove:
+ name: "{{ image_name }}"
+
+ - name: Push non-existing image (must fail)
+ docker_image_push:
+ name: "{{ image_name }}"
+ register: fail_1
+ ignore_errors: true
+
+ - name: Push image ID (must fail)
+ docker_image_push:
+ name: "sha256:{{ docker_test_image_digest_v1_image_id }}"
+ register: fail_2
+ ignore_errors: true
+
+ - name: Push image with digest (must fail)
+ docker_image_push:
+ name: "{{ docker_test_image_digest_base }}@sha256:{{ docker_test_image_digest_v1 }}"
+ register: fail_3
+ ignore_errors: true
+
+ - name: Push invalid tag (must fail)
+ docker_image_push:
+ name: "{{ docker_test_image_hello_world }}"
+ tag: foo/bar
+ register: fail_4
+ ignore_errors: true
+
+ - name: Push invalid tag 2 (must fail)
+ docker_image_push:
+ name: "{{ docker_test_image_digest_base }}:foo bar"
+ register: fail_5
+ ignore_errors: true
+
+ - assert:
+ that:
+ - fail_1 is failed
+ - >-
+ 'Cannot find image registry.example.com:5000/foo/bar:baz' == fail_1.msg
+ - fail_2 is failed
+ - >-
+ 'Cannot push an image by ID' == fail_2.msg
+ - fail_3 is failed
+ - >-
+ 'Cannot push an image by digest' == fail_3.msg
+ - fail_4 is failed
+ - >-
+ '"foo/bar" is not a valid docker tag!' == fail_4.msg
+ - fail_5 is failed
+ - >-
+ '"foo bar" is not a valid docker tag!' == fail_5.msg
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/tests/registry.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/tests/registry.yml
new file mode 100644
index 000000000..ca18d196b
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_push/tasks/tests/registry.yml
@@ -0,0 +1,82 @@
+---
+# 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
+
+- name: Run registry tests only when registry is present
+ when: registry_address is defined
+ block:
+ - name: Pull images
+ docker_image_pull:
+ name: "{{ item }}"
+ loop:
+ - "{{ docker_test_image_hello_world }}"
+ - "{{ docker_test_image_alpine }}"
+ register: pulled_images
+
+ - name: Determining pushed image names
+ set_fact:
+ image_name_base: "{{ registry_address }}/test/{{ name_prefix }}"
+ image_name_base2: "{{ registry_frontend2_address }}/test/{{ name_prefix }}"
+ image_tag: latest
+
+ - name: Registering image name
+ set_fact:
+ inames: "{{ inames + [image_name_base ~ ':' ~ image_tag, image_name_base2 ~ ':' ~ image_tag] }}"
+
+ - name: Tag first image
+ docker_image_tag:
+ name: "{{ docker_test_image_hello_world }}"
+ repository:
+ - "{{ image_name_base }}:{{ image_tag }}"
+ - "{{ image_name_base2 }}:{{ image_tag }}"
+
+ - name: Push first image
+ docker_image_push:
+ name: "{{ image_name_base }}:{{ image_tag }}"
+ register: push_1
+
+ - name: Push first image (idempotent)
+ docker_image_push:
+ name: "{{ image_name_base }}:{{ image_tag }}"
+ register: push_2
+
+ - name: Tag second image
+ docker_image_tag:
+ name: "{{ docker_test_image_alpine }}"
+ repository:
+ - "{{ image_name_base }}:{{ image_tag }}"
+
+ - name: Push second image with same name
+ docker_image_push:
+ name: "{{ image_name_base }}:{{ image_tag }}"
+ register: push_3
+
+ - assert:
+ that:
+ - push_1 is changed
+ - push_1.image.Id == pulled_images.results[0].image.Id
+ - push_2 is not changed
+ - push_2.image.Id == pulled_images.results[0].image.Id
+ - push_3 is changed
+ - push_3.image.Id == pulled_images.results[1].image.Id
+
+ - when: registry_frontend2_address != 'n/a'
+ block:
+ - name: Make sure we are logged out from registry
+ docker_login:
+ registry_url: "{{ registry_frontend2_address }}"
+ username: testuser
+ password: hunter2
+ state: absent
+
+ - name: Push image (unauthenticated)
+ docker_image_push:
+ name: "{{ image_name_base2 }}:{{ image_tag }}"
+ register: push_4
+ ignore_errors: true
+
+ - assert:
+ that:
+ - push_4 is failed
+ - push_4.msg == 'Error pushing image ' ~ image_name_base2 ~ ':' ~ image_tag ~ ': no basic auth credentials'
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_remove/aliases b/ansible_collections/community/docker/tests/integration/targets/docker_image_remove/aliases
new file mode 100644
index 000000000..2e1acc0ad
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_remove/aliases
@@ -0,0 +1,6 @@
+# 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
+
+azp/4
+destructive
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_remove/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_remove/meta/main.yml
new file mode 100644
index 000000000..471ddd412
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_remove/meta/main.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+dependencies:
+ - setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_remove/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_remove/tasks/main.yml
new file mode 100644
index 000000000..afa72da82
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_remove/tasks/main.yml
@@ -0,0 +1,296 @@
+---
+# 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 #
+####################################################################
+
+- block:
+ - name: Pick image prefix
+ set_fact:
+ iname_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
+
+ - name: Define image names
+ set_fact:
+ image: "{{ docker_test_image_hello_world }}"
+ image_id: "{{ docker_test_image_hello_world_image_id }}"
+ image_names:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+
+ - name: Remove image complete
+ docker_image_remove:
+ name: "{{ image_id }}"
+ force: true
+
+ - name: Remove tagged images
+ docker_image_remove:
+ name: "{{ item }}"
+ loop: "{{ image_names }}"
+
+ - name: Make sure image we work with is there
+ docker_image_pull:
+ name: "{{ image }}"
+ register: pulled_image
+ diff: true
+
+ - name: Remove tagged image (not there, check mode)
+ docker_image_remove:
+ name: "{{ iname_prefix }}-tagged-1:latest"
+ register: remove_1_check
+ check_mode: true
+ diff: true
+
+ - name: Remove tagged image (not there)
+ docker_image_remove:
+ name: "{{ iname_prefix }}-tagged-1:latest"
+ register: remove_1
+ diff: true
+
+ - name: Inspect image
+ docker_image_info:
+ name: "{{ iname_prefix }}-tagged-1:latest"
+ register: info_1
+
+ - 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
+ 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)
+ docker_image_remove:
+ name: "{{ iname_prefix }}-tagged-1:latest"
+ register: remove_2_check
+ check_mode: true
+ diff: true
+
+ - name: Remove tagged image
+ docker_image_remove:
+ name: "{{ iname_prefix }}-tagged-1:latest"
+ register: remove_2
+ diff: true
+
+ - name: Inspect image
+ docker_image_info:
+ name: "{{ iname_prefix }}-tagged-1:latest"
+ register: info_2
+
+ - 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
+ - remove_2.diff.before.digests | length == 1
+ - remove_2.diff.after.id == pulled_image.image.Id
+ - remove_2.diff.after.tags | length == 3
+ - remove_2.diff.after.digests | length == 1
+ - 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)
+ docker_image_remove:
+ name: "{{ iname_prefix }}-tagged-1:latest"
+ register: remove_3_check
+ check_mode: true
+ diff: true
+
+ - name: Remove tagged image (idempotent)
+ docker_image_remove:
+ name: "{{ iname_prefix }}-tagged-1:latest"
+ register: remove_3
+ diff: true
+
+ - 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
+ docker_image_info:
+ name:
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: info_3
+
+ - name: Remove tagged image (force, check mode)
+ 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)
+ docker_image_remove:
+ name: "{{ iname_prefix }}-tagged-1:foo"
+ force: true
+ register: remove_4
+ diff: true
+
+ - name: Inspect image with tag foo and bar
+ docker_image_info:
+ name:
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: info_4
+
+ - 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
+ - remove_4.diff.before.digests | length == 1
+ - remove_4.diff.after.id == pulled_image.image.Id
+ - remove_4.diff.after.tags | length == 2
+ - remove_4.diff.after.digests | length == 1
+ - 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)
+ 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)
+ docker_image_remove:
+ name: "{{ iname_prefix }}-tagged-1:foo"
+ force: true
+ register: remove_5
+ diff: true
+
+ - 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)
+ docker_image_remove:
+ name: "{{ pulled_image.image.Id }}"
+ force: true
+ register: remove_6_check
+ check_mode: true
+ diff: true
+
+ - name: Remove image ID (force)
+ docker_image_remove:
+ name: "{{ pulled_image.image.Id }}"
+ force: true
+ register: remove_6
+ diff: true
+
+ - name: Inspect image with tag foo and bar
+ docker_image_info:
+ name:
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: info_5
+
+ - 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
+ - remove_6.diff.before.digests | length == 1
+ - remove_6.diff.after.exists is false
+ - remove_6.deleted | length > 1
+ - pulled_image.image.Id in remove_6.deleted
+ - remove_6.untagged | length == 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
+ - remove_6_check.untagged == remove_6.untagged
+ - info_5.images | length == 0
+
+ - name: Remove image ID (force, idempotent, check mode)
+ 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)
+ docker_image_remove:
+ name: "{{ pulled_image.image.Id }}"
+ force: true
+ register: remove_7
+ diff: true
+
+ - 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
+ docker_image_remove:
+ name: "{{ item }}"
+ loop: "{{ image_names }}"
+
+ when: docker_api_version is version('1.25', '>=')
+
+- 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)
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_tag/aliases b/ansible_collections/community/docker/tests/integration/targets/docker_image_tag/aliases
new file mode 100644
index 000000000..2e1acc0ad
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_tag/aliases
@@ -0,0 +1,6 @@
+# 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
+
+azp/4
+destructive
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_tag/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_tag/meta/main.yml
new file mode 100644
index 000000000..471ddd412
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_tag/meta/main.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+dependencies:
+ - setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_image_tag/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_image_tag/tasks/main.yml
new file mode 100644
index 000000000..327917485
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_image_tag/tasks/main.yml
@@ -0,0 +1,402 @@
+---
+# 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 #
+####################################################################
+
+- block:
+ - name: Pick image prefix
+ set_fact:
+ iname_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
+
+ - name: Define image names
+ set_fact:
+ image_1: "{{ docker_test_image_hello_world }}"
+ image_2: "{{ docker_test_image_alpine }}"
+ image_3: "{{ docker_test_image_digest_base }}@sha256:{{ docker_test_image_digest_v1 }}"
+ image_names:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ - "{{ iname_prefix }}-tagged-2:baz"
+
+ - name: Make sure images we work with are there
+ docker_image_pull:
+ name: "{{ item }}"
+ loop:
+ - "{{ image_1 }}"
+ - "{{ image_2 }}"
+ - "{{ image_3 }}"
+ register: pulled_images
+ diff: true
+
+ - name: Remove tagged images
+ docker_image_remove:
+ name: "{{ item }}"
+ loop: "{{ image_names }}"
+
+ - name: Tag image 1 (check mode)
+ docker_image_tag:
+ name: "{{ image_1 }}"
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ register: tag_1_check
+ diff: true
+ check_mode: true
+
+ - name: Tag image 1
+ docker_image_tag:
+ name: "{{ image_1 }}"
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ register: tag_1
+ diff: true
+
+ - name: Fetch image infos
+ docker_image_info:
+ name: "{{ image_names }}"
+ register: info_1
+
+ - assert:
+ that:
+ - tag_1 is changed
+ - tag_1.diff.before.images | length == 2
+ - tag_1.diff.before.images[0] != tag_1.diff.after.images[0]
+ - tag_1.diff.before.images[1] != tag_1.diff.after.images[1]
+ - tag_1.diff.before.images[0].exists is false
+ - tag_1.diff.before.images[1].exists is false
+ - tag_1.diff.after.images[0].id == pulled_images.results[0].image.Id
+ - tag_1.diff.after.images[1].id == pulled_images.results[0].image.Id
+ - info_1.images | length == 2
+ - info_1.images[0].Id == pulled_images.results[0].image.Id
+ - info_1.images[1].Id == pulled_images.results[0].image.Id
+ - tag_1_check == tag_1
+
+ - name: Tag image 1 (idempotent, check mode)
+ docker_image_tag:
+ name: "{{ image_1 }}"
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ register: tag_2_check
+ diff: true
+ check_mode: true
+
+ - name: Tag image 1 (idempotent)
+ docker_image_tag:
+ name: "{{ image_1 }}"
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ register: tag_2
+ diff: true
+
+ - assert:
+ that:
+ - tag_2 is not changed
+ - tag_2.diff.before == tag_2.diff.after
+ - tag_2.diff.before.images | length == 2
+ - tag_2_check == tag_2
+
+ - name: Tag image 1 (idempotent, different input format, check mode)
+ docker_image_tag:
+ name: "{{ image_1 }}"
+ tag: foo
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1"
+ register: tag_3_check
+ diff: true
+ check_mode: true
+
+ - name: Tag image 1 (idempotent, different input format)
+ docker_image_tag:
+ name: "{{ image_1 }}"
+ tag: foo
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1"
+ register: tag_3
+ diff: true
+
+ - assert:
+ that:
+ - tag_3 is not changed
+ - tag_3.diff.before == tag_3.diff.after
+ - tag_3.diff.before.images | length == 2
+ - tag_3_check == tag_3
+
+ - name: Tag image 1 (one more, check mode)
+ docker_image_tag:
+ name: "{{ image_1 }}"
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-2:baz"
+ register: tag_4_check
+ diff: true
+ check_mode: true
+
+ - name: Tag image 1 (one more)
+ docker_image_tag:
+ name: "{{ image_1 }}"
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-2:baz"
+ register: tag_4
+ diff: true
+
+ - name: Fetch image infos
+ docker_image_info:
+ name: "{{ image_names }}"
+ register: info_4
+
+ - assert:
+ that:
+ - tag_4 is changed
+ - tag_4.diff.before.images | length == 3
+ - tag_4.diff.before.images[0] == tag_4.diff.after.images[0]
+ - tag_4.diff.before.images[1] == tag_4.diff.after.images[1]
+ - tag_4.diff.before.images[2] != tag_4.diff.after.images[2]
+ - tag_4.diff.before.images[2].exists is false
+ - tag_4.diff.after.images[0].id == pulled_images.results[0].image.Id
+ - tag_4.diff.after.images[1].id == pulled_images.results[0].image.Id
+ - tag_4.diff.after.images[2].id == pulled_images.results[0].image.Id
+ - info_4.images | length == 3
+ - info_4.images[0].Id == pulled_images.results[0].image.Id
+ - info_4.images[1].Id == pulled_images.results[0].image.Id
+ - info_4.images[2].Id == pulled_images.results[0].image.Id
+ - tag_4_check == tag_4
+
+ - name: Tag image 2 (only change missing one, check mode)
+ docker_image_tag:
+ name: "{{ image_2 }}"
+ existing_images: keep
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: tag_5_check
+ diff: true
+ check_mode: true
+
+ - name: Tag image 2 (only change missing one)
+ docker_image_tag:
+ name: "{{ image_2 }}"
+ existing_images: keep
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: tag_5
+ diff: true
+
+ - name: Fetch image infos
+ docker_image_info:
+ name: "{{ image_names }}"
+ register: info_5
+
+ - assert:
+ that:
+ - tag_5 is changed
+ - tag_5.diff.before.images | length == 3
+ - tag_5.diff.before.images[0] == tag_5.diff.after.images[0]
+ - tag_5.diff.before.images[1] == tag_5.diff.after.images[1]
+ - tag_5.diff.before.images[2] != tag_5.diff.after.images[2]
+ - tag_5.diff.before.images[2].exists is false
+ - tag_5.diff.after.images[0].id == pulled_images.results[0].image.Id
+ - tag_5.diff.after.images[1].id == pulled_images.results[0].image.Id
+ - tag_5.diff.after.images[2].id == pulled_images.results[1].image.Id
+ - info_5.images | length == 4
+ - info_5.images[0].Id == pulled_images.results[0].image.Id
+ - info_5.images[1].Id == pulled_images.results[0].image.Id
+ - info_5.images[2].Id == pulled_images.results[1].image.Id
+ - info_5.images[3].Id == pulled_images.results[0].image.Id
+ - tag_5_check == tag_5
+
+ - name: Tag image 2 (idempotent, check mode)
+ docker_image_tag:
+ name: "{{ image_2 }}"
+ existing_images: keep
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: tag_6_check
+ diff: true
+ check_mode: true
+
+ - name: Tag image 2 (idempotent)
+ docker_image_tag:
+ name: "{{ image_2 }}"
+ existing_images: keep
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: tag_6
+ diff: true
+
+ - assert:
+ that:
+ - tag_6 is not changed
+ - tag_6.diff.before == tag_6.diff.after
+ - tag_6.diff.before.images | length == 3
+ - tag_6_check == tag_6
+
+ - name: Tag image 2 (only change wrong ones, check mode)
+ docker_image_tag:
+ name: "{{ image_2 }}"
+ existing_images: overwrite
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: tag_7_check
+ diff: true
+ check_mode: true
+
+ - name: Tag image 2 (only change wrong ones)
+ docker_image_tag:
+ name: "{{ image_2 }}"
+ existing_images: overwrite
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: tag_7
+ diff: true
+
+ - name: Fetch image infos
+ docker_image_info:
+ name: "{{ image_names }}"
+ register: info_7
+
+ - assert:
+ that:
+ - tag_7 is changed
+ - tag_7.diff.before.images | length == 3
+ - tag_7.diff.before.images[0] != tag_7.diff.after.images[0]
+ - tag_7.diff.before.images[1] != tag_7.diff.after.images[1]
+ - tag_7.diff.before.images[2] == tag_7.diff.after.images[2]
+ - tag_7.diff.before.images[0].id == pulled_images.results[0].image.Id
+ - tag_7.diff.before.images[1].id == pulled_images.results[0].image.Id
+ - tag_7.diff.after.images[0].id == pulled_images.results[1].image.Id
+ - tag_7.diff.after.images[1].id == pulled_images.results[1].image.Id
+ - tag_7.diff.after.images[2].id == pulled_images.results[1].image.Id
+ - info_7.images | length == 4
+ - info_7.images[0].Id == pulled_images.results[1].image.Id
+ - info_7.images[1].Id == pulled_images.results[1].image.Id
+ - info_7.images[2].Id == pulled_images.results[1].image.Id
+ - info_7.images[3].Id == pulled_images.results[0].image.Id
+ - tag_7_check == tag_7
+
+ - name: Tag image 2 (idempotent, check mode)
+ docker_image_tag:
+ name: "{{ image_2 }}"
+ existing_images: overwrite
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: tag_8_check
+ diff: true
+ check_mode: true
+
+ - name: Tag image 2 (idempotent)
+ docker_image_tag:
+ name: "{{ image_2 }}"
+ existing_images: overwrite
+ repository:
+ - "{{ iname_prefix }}-tagged-1:latest"
+ - "{{ iname_prefix }}-tagged-1:foo"
+ - "{{ iname_prefix }}-tagged-1:bar"
+ register: tag_8
+ diff: true
+
+ - assert:
+ that:
+ - tag_8 is not changed
+ - tag_8.diff.before == tag_8.diff.after
+ - tag_8.diff.before.images | length == 3
+ - tag_8_check == tag_8
+
+ - name: Tag image 3 (source image has digest)
+ docker_image_tag:
+ name: "{{ image_3 }}"
+ existing_images: overwrite
+ repository:
+ - "{{ iname_prefix }}-tagged-2:baz"
+ register: tag_9
+ diff: true
+
+ - assert:
+ that:
+ - tag_9 is changed
+ - tag_9.diff.before.images | length == 1
+ - tag_9.diff.before.images[0].id == pulled_images.results[0].image.Id
+ - tag_9.diff.after.images[0].id == pulled_images.results[2].image.Id
+
+ - name: Tag image 3 (source image is ID)
+ docker_image_tag:
+ name: "{{ pulled_images.results[2].image.Id }}"
+ existing_images: overwrite
+ repository:
+ - "{{ iname_prefix }}-tagged-1:foo"
+ register: tag_10
+ diff: true
+
+ - assert:
+ that:
+ - tag_10 is changed
+ - tag_10.diff.before.images | length == 1
+ - tag_10.diff.before.images[0].id == pulled_images.results[1].image.Id
+ - tag_10.diff.after.images[0].id == pulled_images.results[2].image.Id
+
+ - name: Tag image 3 (fail because of digest)
+ docker_image_tag:
+ name: "{{ image_3 }}"
+ existing_images: overwrite
+ repository:
+ - "{{ iname_prefix }}-tagged-2@sha256:{{ docker_test_image_digest_v1 }}"
+ register: tag_11
+ ignore_errors: true
+
+ - assert:
+ that:
+ - tag_11 is failed
+ - >-
+ tag_11.msg == 'repository[1] must not have a digest; got: ' ~ iname_prefix ~ '-tagged-2@sha256:' ~ docker_test_image_digest_v1
+
+ - name: Tag image 3 (fail because of image ID)
+ docker_image_tag:
+ name: "{{ image_3 }}"
+ existing_images: overwrite
+ repository:
+ - "sha256:{{ docker_test_image_digest_v1 }}"
+ register: tag_12
+ ignore_errors: true
+
+ - assert:
+ that:
+ - tag_12 is failed
+ - >-
+ tag_12.msg == 'repository[1] must not be an image ID; got: sha256:' ~ docker_test_image_digest_v1
+
+ always:
+ - name: Remove tagged images
+ docker_image_remove:
+ name: "{{ item }}"
+ loop: "{{ image_names }}"
+
+ when: docker_api_version is version('1.25', '>=')
+
+- 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)
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_login/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_login/meta/main.yml
index 3133a0360..ff316450e 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_login/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_login/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker_registry
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/test.yml
index bd99acc0a..b56fe799f 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_login/tasks/test.yml
@@ -4,9 +4,11 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
when: docker_api_version is version('1.25', '>=')
- fail: msg="Too old docker / docker-py version to run docker_image tests!"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_network/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_network/meta/main.yml
index 5769ff1cb..44bdbe8d5 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_network/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_network/meta/main.yml
@@ -5,3 +5,5 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
+ - setup_docker_sdk_for_python # for Swarm support
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/main.yml
index 4a056151b..d2f7f0258 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/main.yml
@@ -28,23 +28,25 @@
msg: "Using name prefix {{ name_prefix }}"
- block:
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- - name: "Make sure all containers are removed"
- docker_container:
- name: "{{ item }}"
- state: absent
- force_kill: true
- loop: "{{ cnames }}"
- - name: "Make sure all networks are removed"
- docker_network:
- name: "{{ item }}"
- state: absent
- force: true
- loop: "{{ dnetworks }}"
+ - name: "Make sure all containers are removed"
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ force_kill: true
+ loop: "{{ cnames }}"
+ - name: "Make sure all networks are removed"
+ docker_network:
+ name: "{{ item }}"
+ state: absent
+ force: true
+ loop: "{{ dnetworks }}"
when: docker_api_version is version('1.25', '>=') # FIXME: find out API version!
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_network/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_network_info/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_network_info/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_network_info/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_network_info/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_node/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_node/meta/main.yml
index 5769ff1cb..6407d95b0 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_node/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_node/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_node/tasks/test_node.yml b/ansible_collections/community/docker/tests/integration/targets/docker_node/tasks/test_node.yml
index 89c9b3555..c326fc9f3 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_node/tasks/test_node.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_node/tasks/test_node.yml
@@ -697,7 +697,7 @@
- label6
- label7
check_mode: true
- register: output_add_del_overlap_lables_1
+ register: output_add_del_overlap_labels_1
- name: Try to add or update and remove overlapping labels at the same time
docker_node:
@@ -708,7 +708,7 @@
labels_to_remove:
- label6
- label7
- register: output_add_del_overlap_lables_2
+ register: output_add_del_overlap_labels_2
- name: Try to add or update and remove overlapping labels at the same time (idempotent)
docker_node:
@@ -719,7 +719,7 @@
labels_to_remove:
- label6
- label7
- register: output_add_del_overlap_lables_3
+ register: output_add_del_overlap_labels_3
- name: Try to add or update and remove overlapping labels at the same time (idempotent check)
docker_node:
@@ -731,19 +731,19 @@
- label6
- label7
check_mode: true
- register: output_add_del_overlap_lables_4
+ register: output_add_del_overlap_labels_4
- name: assert adding or updating and removing overlapping labels from swarm node
assert:
that:
- - 'output_add_del_overlap_lables_1 is changed'
- - 'output_add_del_overlap_lables_2 is changed'
- - 'output_add_del_overlap_lables_3 is not changed'
- - 'output_add_del_overlap_lables_4 is not changed'
- - 'output_add_del_overlap_lables_2.node.Spec.Labels | length == 3'
- - '"label7" not in output_add_del_overlap_lables_2.node.Spec.Labels'
- - 'output_add_del_overlap_lables_2.node.Spec.Labels.label6 == "value6666"'
- - 'output_add_del_overlap_lables_2.node.Spec.Labels.label22 == "value22"'
+ - 'output_add_del_overlap_labels_1 is changed'
+ - 'output_add_del_overlap_labels_2 is changed'
+ - 'output_add_del_overlap_labels_3 is not changed'
+ - 'output_add_del_overlap_labels_4 is not changed'
+ - 'output_add_del_overlap_labels_2.node.Spec.Labels | length == 3'
+ - '"label7" not in output_add_del_overlap_labels_2.node.Spec.Labels'
+ - 'output_add_del_overlap_labels_2.node.Spec.Labels.label6 == "value6666"'
+ - 'output_add_del_overlap_labels_2.node.Spec.Labels.label22 == "value22"'
####################################################################
## Replace labels #############################################
@@ -828,7 +828,7 @@
check_mode: true
register: output_remove_labels_4
- - name: assert removing all lables from swarm node
+ - name: assert removing all labels from swarm node
assert:
that:
- 'output_remove_labels_1 is changed'
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_node_info/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_node_info/meta/main.yml
index 5769ff1cb..6407d95b0 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_node_info/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_node_info/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_plugin/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_plugin/meta/main.yml
index 5769ff1cb..6407d95b0 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_plugin/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_plugin/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/main.yml
index 142614332..8684ca117 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/main.yml
@@ -17,16 +17,18 @@
register: dev_fuse_stat
- block:
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- - name: "Make sure plugin is removed"
- docker_plugin:
- plugin_name: "{{ item }}"
- state: absent
- with_items: "{{ plugin_names }}"
+ - name: "Make sure plugin is removed"
+ docker_plugin:
+ plugin_name: "{{ item }}"
+ state: absent
+ with_items: "{{ plugin_names }}"
when: docker_api_version is version('1.25', '>=') and dev_fuse_stat.stat.exists
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_plugin/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_prune/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_prune/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_prune/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_prune/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_secret/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_secret/meta/main.yml
index 2650229d8..9eeb6626b 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_secret/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_secret/meta/main.yml
@@ -5,4 +5,5 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
- setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_stack_info/tasks/test_stack_info.yml b/ansible_collections/community/docker/tests/integration/targets/docker_stack_info/tasks/test_stack_info.yml
index 58d6d5bb9..cca26c802 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_stack_info/tasks/test_stack_info.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_stack_info/tasks/test_stack_info.yml
@@ -18,7 +18,7 @@
assert:
that:
- 'output is failed'
- - '"Error running docker stack" in output.msg'
+ - '"Error response from daemon: This node is not a swarm manager" in output.msg'
- name: Create a swarm cluster
docker_swarm:
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_stack_task_info/tasks/test_stack_task_info.yml b/ansible_collections/community/docker/tests/integration/targets/docker_stack_task_info/tasks/test_stack_task_info.yml
index 30b5ca9e8..cb905d5cf 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_stack_task_info/tasks/test_stack_task_info.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_stack_task_info/tasks/test_stack_task_info.yml
@@ -18,7 +18,7 @@
assert:
that:
- 'output is failed'
- - '"Error running docker stack" in output.msg'
+ - '"Error response from daemon: This node is not a swarm manager" in output.msg'
- name: Create a swarm cluster
docker_swarm:
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm/meta/main.yml
index e7ff3d68b..13f97ae20 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm/meta/main.yml
@@ -5,5 +5,6 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
- setup_openssl
- setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/main.yml
index 16f681530..f2b90167c 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/main.yml
@@ -14,9 +14,11 @@
- docker_api_version is version('1.25', '>=')
block:
- - include_tasks: "{{ item }}"
+ - include_tasks: run-test.yml
with_fileglob:
- - 'tests/*.yml'
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- import_tasks: cleanup.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/run-test.yml
index f55df21f8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm/tasks/run-test.yml
@@ -2,3 +2,6 @@
# 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
+
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/meta/main.yml
index 5769ff1cb..6407d95b0 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/tasks/test_swarm_info.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/tasks/test_swarm_info.yml
index 288e2a0b0..a2cd5f8f9 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/tasks/test_swarm_info.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_info/tasks/test_swarm_info.yml
@@ -14,7 +14,7 @@
ignore_errors: true
register: output
- - name: assert failure when called when swarm is not in use or not run on mamager node
+ - name: assert failure when called when swarm is not in use or not run on manager node
assert:
that:
- 'output is failed'
@@ -58,7 +58,7 @@
nodes: true
register: output
- - name: assert reding swarm facts with list of nodes option
+ - name: assert reading swarm facts with list of nodes option
assert:
that:
- 'output.swarm_facts.JoinTokens.Manager'
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/meta/main.yml
index 5769ff1cb..6407d95b0 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/main.yml
index 5a5795b5f..bbea0a031 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/main.yml
@@ -24,14 +24,16 @@
# Run the tests
- block:
- - name: Create a Swarm cluster
- docker_swarm:
- state: present
- advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
+ - name: Create a Swarm cluster
+ docker_swarm:
+ state: present
+ advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- name: Make sure all services are removed
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service_info/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service_info/meta/main.yml
index 5769ff1cb..6407d95b0 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service_info/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_swarm_service_info/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_volume/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_volume/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_volume/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_volume/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/main.yml
index b356e5618..055898402 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/main.yml
@@ -17,16 +17,18 @@
msg: "Using name prefix {{ name_prefix }}"
- block:
- - include_tasks: run-test.yml
- with_fileglob:
- - "tests/*.yml"
+ - include_tasks: run-test.yml
+ with_fileglob:
+ - "tests/*.yml"
+ loop_control:
+ loop_var: test_name
always:
- - name: "Make sure all volumes are removed"
- docker_volume:
- name: "{{ item }}"
- state: absent
- with_items: "{{ vnames }}"
+ - name: "Make sure all volumes are removed"
+ docker_volume:
+ name: "{{ item }}"
+ state: absent
+ with_items: "{{ vnames }}"
when: docker_api_version is version('1.25', '>=')
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/run-test.yml b/ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/run-test.yml
index 65853ddd8..72a58962d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/run-test.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_volume/tasks/run-test.yml
@@ -3,5 +3,5 @@
# 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
-- name: "Loading tasks from {{ item }}"
- include_tasks: "{{ item }}"
+- name: "Loading tasks from {{ test_name }}"
+ include_tasks: "{{ test_name }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/docker_volume_info/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/docker_volume_info/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/docker_volume_info/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/docker_volume_info/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/meta/main.yml
index e7ff3d68b..7440275b2 100644
--- a/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/meta/main.yml
@@ -5,5 +5,7 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
+ - setup_docker_current_container_network_ip
- setup_openssl
- setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/vars/main.yml b/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/vars/main.yml
index e4eafc24e..1859bdfe6 100644
--- a/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/vars/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/generic_connection_tests/vars/main.yml
@@ -4,10 +4,14 @@
# SPDX-License-Identifier: GPL-3.0-or-later
docker_test_image_digest_v1: e004c2cc521c95383aebb1fb5893719aa7a8eae2e7a71f316a4410784edb00a9
+docker_test_image_digest_v1_image_id: 758ec7f3a1ee85f8f08399b55641bfb13e8c1109287ddc5e22b68c3d653152ee
docker_test_image_digest_v2: ee44b399df993016003bf5466bd3eeb221305e9d0fa831606bc7902d149c775b
+docker_test_image_digest_v2_image_id: dc3bacd8b5ea796cea5d6070c8f145df9076f26a6bc1c8981fd5b176d37de843
docker_test_image_digest_base: quay.io/ansible/docker-test-containers
docker_test_image_hello_world: quay.io/ansible/docker-test-containers:hello-world
+docker_test_image_hello_world_image_id: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
docker_test_image_hello_world_base: quay.io/ansible/docker-test-containers
+docker_test_image_hello_world_platform: docker.io/library/hello-world:latest
docker_test_image_busybox: quay.io/ansible/docker-test-containers:busybox
docker_test_image_alpine: quay.io/ansible/docker-test-containers:alpine3.8
docker_test_image_alpine_different: quay.io/ansible/docker-test-containers:alpine3.7
diff --git a/ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/meta/main.yml
index 6fdc1c8ec..ee4a358cb 100644
--- a/ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/meta/main.yml
@@ -6,3 +6,4 @@
dependencies:
- setup_docker
- setup_paramiko
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/tasks/main.yml
index 94554f716..8bfa52511 100644
--- a/ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/generic_ssh_connection/tasks/main.yml
@@ -68,7 +68,6 @@
docker_host: "ssh://root@localhost"
use_ssh_client: true
register: output
- ignore_errors: true
- name: Make sure we got information
assert:
@@ -80,11 +79,3 @@
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- when: docker_py_version is version('4.4.0', '>=')
-
-- name: Make sure we got information
- assert:
- that:
- - output is failed
- - "'use_ssh_client=True requires Docker SDK for Python 4.4.0 or newer' in output.msg"
- when: docker_py_version is version('4.4.0', '<')
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/meta/main.yml
index 5769ff1cb..471ddd412 100644
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_cleanup.yml b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_cleanup.yml
index 6f2a3b6c5..9a01aa289 100644
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_cleanup.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_cleanup.yml
@@ -15,12 +15,3 @@
loop:
- ansible-docker-test-docker-inventory-container-1
- ansible-docker-test-docker-inventory-container-2
-
- - name: remove docker pagkages
- action: "{{ ansible_facts.pkg_mgr }}"
- args:
- name:
- - docker
- - docker-ce
- - docker-ce-cli
- state: absent
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_setup.yml b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_setup.yml
index 0c1f33685..72507e414 100644
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_setup.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/docker_setup.yml
@@ -13,6 +13,10 @@
import_role:
name: setup_docker
+ - name: Setup Docker Python deps
+ import_role:
+ name: setup_docker_python_deps
+
- name: Start containers
docker_container:
name: "{{ item.name }}"
@@ -21,6 +25,8 @@
command: '/bin/sh -c "sleep 10m"'
published_ports:
- 22/tcp
+ labels:
+ foo: !unsafe 'EVALU{{ "" }}ATED'
loop:
- name: ansible-docker-test-docker-inventory-container-1
- name: ansible-docker-test-docker-inventory-container-2
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_1.yml b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_1.yml
index c0f28f57d..976b25b21 100644
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_1.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_1.yml
@@ -25,7 +25,6 @@
# will be other containers.
- inventory_hostname.startswith('ansible-docker-test-docker-inventory-container-')
block:
-
- name: Run raw command
raw: ls /
register: output
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_2.yml b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_2.yml
index 28f8dc008..71346bfa1 100644
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_2.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/playbooks/test_inventory_2.yml
@@ -47,3 +47,13 @@
# When the integration tests are run inside a docker container, there
# will be other containers.
- inventory_hostname.startswith('ansible-docker-test-docker-inventory-container-')
+ - name: Write labels into file
+ copy:
+ dest: "/tmp/{{ inventory_hostname }}-labels.txt"
+ content: |-
+ {{ docker_config.Labels }}
+ delegate_to: localhost
+ when:
+ # When the integration tests are run inside a docker container, there
+ # will be other containers.
+ - inventory_hostname.startswith('ansible-docker-test-docker-inventory-container-')
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/runme.sh b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/runme.sh
index acc1d5f45..318275d99 100755
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/runme.sh
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_containers/runme.sh
@@ -9,17 +9,23 @@ set -euo pipefail
cleanup() {
echo "Cleanup"
- ansible-playbook playbooks/docker_cleanup.yml
+ ansible-playbook playbooks/docker_cleanup.yml "$@"
echo "Done"
}
trap cleanup INT TERM EXIT
echo "Setup"
-ANSIBLE_ROLES_PATH=.. ansible-playbook playbooks/docker_setup.yml
+ANSIBLE_ROLES_PATH=.. ansible-playbook playbooks/docker_setup.yml "$@"
echo "Test docker_containers inventory 1"
-ansible-playbook -i inventory_1.docker.yml playbooks/test_inventory_1.yml
+ansible-playbook -i inventory_1.docker.yml playbooks/test_inventory_1.yml "$@"
echo "Test docker_containers inventory 2"
-ansible-playbook -i inventory_2.docker.yml playbooks/test_inventory_2.yml
+rm -f /tmp/ansible-docker-test-docker-inventory-container-*-labels.txt
+ansible-playbook -i inventory_2.docker.yml playbooks/test_inventory_2.yml "$@"
+
+echo "Validate that 'EVALUATED' does not appear in the labels"
+for FILENAME in /tmp/ansible-docker-test-docker-inventory-container-*-labels.txt; do
+ grep -qv EVALUATED "${FILENAME}" || ( echo "${FILENAME} contains EVALUATED!" && exit 1 )
+done
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/playbooks/pre-setup.yml b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/playbooks/pre-setup.yml
index 3c6c1367c..aacaf67bf 100644
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/playbooks/pre-setup.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/playbooks/pre-setup.yml
@@ -10,6 +10,10 @@
include_role:
name: setup_docker
+ - name: Setup Docker Python deps
+ import_role:
+ name: setup_docker_python_deps
+
# There seems to be no better way to install docker-machine. At least I couldn't find any packages for RHEL7/8.
- name: Download docker-machine binary
vars:
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/runme.sh b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/runme.sh
index b39a08c41..5d00aa666 100755
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/runme.sh
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_machine/runme.sh
@@ -23,14 +23,14 @@ SAVED_PATH="$PATH"
cleanup() {
PATH="${SAVED_PATH}"
echo "Cleanup"
- ansible-playbook -i teardown.docker_machine.yml playbooks/teardown.yml
+ ansible-playbook -i teardown.docker_machine.yml playbooks/teardown.yml "$@"
echo "Done"
}
trap cleanup INT TERM EXIT
echo "Pre-setup (install docker, docker-machine)"
-ANSIBLE_ROLES_PATH=.. ansible-playbook playbooks/pre-setup.yml
+ANSIBLE_ROLES_PATH=.. ansible-playbook playbooks/pre-setup.yml "$@"
echo "Print docker-machine version"
docker-machine --version
@@ -43,10 +43,10 @@ echo "Test that the docker_machine inventory plugin is being loaded"
ANSIBLE_DEBUG=yes ansible-inventory -i inventory_1.docker_machine.yml --list | grep -F "Loading InventoryModule 'docker_machine'"
echo "Setup"
-ansible-playbook playbooks/setup.yml
+ansible-playbook playbooks/setup.yml "$@"
echo "Test docker_machine inventory 1"
-ansible-playbook -i inventory_1.docker_machine.yml playbooks/test_inventory_1.yml
+ansible-playbook -i inventory_1.docker_machine.yml playbooks/test_inventory_1.yml "$@"
echo "Activate Docker Machine mock"
PATH=${SCRIPT_DIR}:$PATH
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/meta/main.yml
index 5769ff1cb..6407d95b0 100644
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/meta/main.yml
@@ -5,3 +5,4 @@
dependencies:
- setup_docker
+ - setup_docker_sdk_for_python
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_cleanup.yml b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_cleanup.yml
index 4039a6bde..a6bedd41a 100644
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_cleanup.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_cleanup.yml
@@ -11,12 +11,3 @@
docker_swarm:
state: absent
force: true
-
- - name: remove docker pagkages
- action: "{{ ansible_facts.pkg_mgr }}"
- args:
- name:
- - docker
- - docker-ce
- - docker-ce-cli
- state: absent
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_setup.yml b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_setup.yml
index 1ae4c63fe..9dd43dd2e 100644
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_setup.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/playbooks/swarm_setup.yml
@@ -13,6 +13,10 @@
import_role:
name: setup_docker
+ - name: Setup Docker SDK for Python
+ import_role:
+ name: setup_docker_sdk_for_python
+
- name: Create a Swarm cluster
community.docker.docker_swarm:
state: present
diff --git a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/runme.sh b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/runme.sh
index 746b8592f..1759b888b 100755
--- a/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/runme.sh
+++ b/ansible_collections/community/docker/tests/integration/targets/inventory_docker_swarm/runme.sh
@@ -9,17 +9,17 @@ set -euo pipefail
cleanup() {
echo "Cleanup"
- ansible-playbook playbooks/swarm_cleanup.yml
+ ansible-playbook playbooks/swarm_cleanup.yml "$@"
echo "Done"
}
trap cleanup INT TERM EXIT
echo "Setup"
-ANSIBLE_ROLES_PATH=.. ansible-playbook playbooks/swarm_setup.yml
+ANSIBLE_ROLES_PATH=.. ansible-playbook playbooks/swarm_setup.yml "$@"
echo "Test docker_swarm inventory 1"
-ansible-playbook -i inventory_1.docker_swarm.yml playbooks/test_inventory_1.yml
+ansible-playbook -i inventory_1.docker_swarm.yml playbooks/test_inventory_1.yml "$@"
echo "Test docker_swarm inventory 2"
-ansible-playbook -i inventory_2.docker_swarm.yml playbooks/test_inventory_2.yml
+ansible-playbook -i inventory_2.docker_swarm.yml playbooks/test_inventory_2.yml "$@"
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker/defaults/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker/defaults/main.yml
index 0509fe0ef..412fc5644 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker/defaults/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker/defaults/main.yml
@@ -5,7 +5,6 @@
docker_cli_version: '0.0'
docker_api_version: '0.0'
-docker_py_version: '0.0'
docker_skip_cleanup: true
docker_prereq_packages: []
docker_packages:
@@ -13,10 +12,6 @@ docker_packages:
docker_cli_packages:
- docker-ce-cli
-docker_pip_extra_packages: []
-docker_pip_package: docker
-docker_pip_package_limit: ''
-
docker_cleanup_packages:
- docker
- docker-ce
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker/handlers/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker/handlers/main.yml
index 96ca226c7..ec68f655c 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker/handlers/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker/handlers/main.yml
@@ -3,13 +3,6 @@
# 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
-- name: Remove pip packages
- pip:
- state: present
- name: "{{ [docker_pip_package] | union(docker_pip_extra_packages) }}"
- listen: cleanup docker
- when: not docker_skip_cleanup | bool
-
- name: Remove docker pagkages
action: "{{ ansible_facts.pkg_mgr }}"
args:
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/Alpine.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/Alpine.yml
index 64f6eb34a..cb07fbf78 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/Alpine.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/Alpine.yml
@@ -5,6 +5,7 @@
- name: Install docker
apk:
- name: docker
+ name:
+ - docker
update_cache: true
notify: cleanup docker
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml
index e8f078d3b..e3d7c413f 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker/tasks/main.yml
@@ -25,6 +25,14 @@
set_fact:
needs_docker_daemon: '{{ not ansible_module_running_in_container }}'
+ - name:
+ debug:
+ msg: |-
+ OS family: {{ ansible_facts.os_family }}
+ Distribution: {{ ansible_facts.distribution }}
+ Distribution major version: {{ ansible_facts.distribution_major_version }}
+ Distribution full version: {{ ansible_facts.distribution_version }}
+
- name: Include distribution specific variables
include_vars: "{{ lookup('first_found', params) }}"
vars:
@@ -68,36 +76,18 @@
register: docker_api_version_stdout
ignore_errors: true
- - name: Limit docker pypi package version to < 4.3.0
- set_fact:
- docker_pip_package_limit: '<4.3.0'
- when: (docker_api_version_stdout.stdout | default('0.0')) is version('1.39', '<')
-
- - name: Install/upgrade Python requirements
- pip:
- name: "{{ [docker_pip_package ~ docker_pip_package_limit] + docker_pip_extra_packages }}"
- extra_args: "-c {{ remote_constraints }}"
- state: "{{ 'latest' if force_docker_sdk_for_python_pypi | default(false) else 'present' }}"
- notify: cleanup docker
-
# Detect docker CLI and docker-py versions
- name: Check Docker CLI version
command: "docker version -f {% raw %}'{{.Client.Version}}'{% endraw %}"
register: docker_cli_version_stdout
ignore_errors: true
- - name: Check docker-py version
- command: "{{ ansible_python.executable }} -c 'import docker; print(docker.__version__)'"
- register: docker_py_version_stdout
- ignore_errors: true
-
- set_fact:
docker_cli_version: "{{ docker_cli_version_stdout.stdout | default('0.0') }}"
docker_api_version: "{{ docker_api_version_stdout.stdout | default('0.0') }}"
- docker_py_version: "{{ docker_py_version_stdout.stdout | default('0.0') }}"
- debug:
- msg: "Docker CLI version: {{ docker_cli_version }}; Docker API version: {{ docker_api_version }}; docker-py library version: {{ docker_py_version }}"
+ msg: "Docker CLI version: {{ docker_cli_version }}; Docker API version: {{ docker_api_version }}"
- block:
# Cleanup docker daemon
@@ -162,13 +152,3 @@
images: "{{ docker_images.stdout_lines | default([]) }}"
when: docker_cli_version is version('0.0', '>')
-
- - name: Inspect current container
- docker_container_info:
- name: "{{ ansible_module_container_id }}"
- register: current_container_info
- when: ansible_module_running_in_container
-
- - name: Determine network name
- set_fact:
- current_container_network_ip: "{{ (current_container_info.container.NetworkSettings.Networks | dictsort)[0].0 | default('') if ansible_module_running_in_container else '' }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/RedHat-7.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/RedHat-7.yml
index b1e28987c..bbf9ed32c 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/RedHat-7.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/RedHat-7.yml
@@ -8,6 +8,3 @@ docker_prereq_packages:
- device-mapper-persistent-data
- lvm2
- libseccomp
-
-docker_pip_extra_packages:
- - requests==2.6.0
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/Ubuntu-14.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/Ubuntu-14.yml
index d7c82455b..f55df21f8 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/Ubuntu-14.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/Ubuntu-14.yml
@@ -2,9 +2,3 @@
# 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
-
-docker_pip_extra_packages:
- # Installing requests >=2.12.0 on Ubuntu 14.04 breaks certificate validation. We restrict to an older version
- # to ensure out get_url tests work out fine. This is only an issue if pyOpenSSL is also installed.
- # Not sure why RHEL7 needs this specific version
- - requests==2.6.0
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/main.yml
index e4eafc24e..1859bdfe6 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker/vars/main.yml
@@ -4,10 +4,14 @@
# SPDX-License-Identifier: GPL-3.0-or-later
docker_test_image_digest_v1: e004c2cc521c95383aebb1fb5893719aa7a8eae2e7a71f316a4410784edb00a9
+docker_test_image_digest_v1_image_id: 758ec7f3a1ee85f8f08399b55641bfb13e8c1109287ddc5e22b68c3d653152ee
docker_test_image_digest_v2: ee44b399df993016003bf5466bd3eeb221305e9d0fa831606bc7902d149c775b
+docker_test_image_digest_v2_image_id: dc3bacd8b5ea796cea5d6070c8f145df9076f26a6bc1c8981fd5b176d37de843
docker_test_image_digest_base: quay.io/ansible/docker-test-containers
docker_test_image_hello_world: quay.io/ansible/docker-test-containers:hello-world
+docker_test_image_hello_world_image_id: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
docker_test_image_hello_world_base: quay.io/ansible/docker-test-containers
+docker_test_image_hello_world_platform: docker.io/library/hello-world:latest
docker_test_image_busybox: quay.io/ansible/docker-test-containers:busybox
docker_test_image_alpine: quay.io/ansible/docker-test-containers:alpine3.8
docker_test_image_alpine_different: quay.io/ansible/docker-test-containers:alpine3.7
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/meta/main.yml
new file mode 100644
index 000000000..5769ff1cb
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/meta/main.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+dependencies:
+ - setup_docker
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Alpine.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Alpine.yml
new file mode 100644
index 000000000..48d357a3b
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Alpine.yml
@@ -0,0 +1,13 @@
+---
+# 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
+
+- name: Buildx is available from Alpine 3.14 on
+ set_fact:
+ docker_has_buildx: "{{ ansible_facts.distribution_version is version('3.14', '>=') }}"
+
+- name: Install Docker buildx CLI plugin
+ apk:
+ name: docker-cli-buildx
+ when: docker_has_buildx
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Archlinux.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Archlinux.yml
new file mode 100644
index 000000000..5d2709017
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Archlinux.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+- name: Install Docker buildx CLI plugin
+ community.general.pacman:
+ name: docker-buildx
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Debian.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Debian.yml
new file mode 100644
index 000000000..a93d788ac
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Debian.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Fedora.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Fedora.yml
new file mode 100644
index 000000000..a93d788ac
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Fedora.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/RedHat-7.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-7.yml
index c5d18002b..a93d788ac 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/RedHat-7.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-7.yml
@@ -3,4 +3,5 @@
# 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
-skip_docker_compose: true
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-8.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-8.yml
new file mode 100644
index 000000000..6bb81a941
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-8.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+- name: For some reason we don't have the buildx plugin
+ set_fact:
+ docker_has_buildx: false
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-9.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-9.yml
new file mode 100644
index 000000000..a93d788ac
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/RedHat-9.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Suse.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Suse.yml
new file mode 100644
index 000000000..fd667cc24
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/Suse.yml
@@ -0,0 +1,14 @@
+---
+# 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
+
+- name: Buildx is available in OpenSuSE 15.5, not sure which versions before
+ set_fact:
+ docker_has_buildx: "{{ ansible_facts.distribution_version is version('15.5', '>=') }}"
+
+- name: Install Docker buildx CLI plugin
+ community.general.zypper:
+ name: docker-buildx
+ disable_gpg_check: true
+ when: docker_has_buildx
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/main.yml
new file mode 100644
index 000000000..979ad2ba6
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/main.yml
@@ -0,0 +1,49 @@
+---
+# 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 #
+####################################################################
+
+- name: Setup Docker
+ when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
+ block:
+ - name:
+ debug:
+ msg: |-
+ OS family: {{ ansible_facts.os_family }}
+ Distribution: {{ ansible_facts.distribution }}
+ Distribution major version: {{ ansible_facts.distribution_major_version }}
+ Distribution full version: {{ ansible_facts.distribution_version }}
+
+ - name: Set facts for Docker features to defaults
+ set_fact:
+ docker_has_buildx: true
+
+ - name: Include distribution specific variables
+ include_vars: "{{ lookup('first_found', params) }}"
+ vars:
+ params:
+ files:
+ - "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.distribution }}.yml"
+ - "{{ ansible_facts.os_family }}.yml"
+ - default.yml
+ paths:
+ - "{{ role_path }}/vars"
+
+ - name: Include distribution specific tasks
+ include_tasks: "{{ lookup('first_found', params) }}"
+ vars:
+ params:
+ files:
+ - "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.distribution }}.yml"
+ - "{{ ansible_facts.os_family }}.yml"
+ paths:
+ - "{{ role_path }}/tasks"
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/nothing.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/nothing.yml
new file mode 100644
index 000000000..a93d788ac
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/tasks/nothing.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/default.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/vars/default.yml
index f55df21f8..f55df21f8 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/default.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_buildx/vars/default.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/meta/main.yml
new file mode 100644
index 000000000..5769ff1cb
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/meta/main.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+dependencies:
+ - setup_docker
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Alpine.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Alpine.yml
new file mode 100644
index 000000000..7190dbad5
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Alpine.yml
@@ -0,0 +1,13 @@
+---
+# 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
+
+- name: Compose is available from Alpine 3.15 on
+ set_fact:
+ docker_has_compose: "{{ ansible_facts.distribution_version is version('3.15', '>=') }}"
+
+- name: Install Docker compose CLI plugin
+ apk:
+ name: docker-cli-compose
+ when: docker_has_compose
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Archlinux.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Archlinux.yml
new file mode 100644
index 000000000..89dedb0b2
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Archlinux.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+- name: Install Docker compose CLI plugin
+ community.general.pacman:
+ name: docker-compose
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Debian.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Debian.yml
new file mode 100644
index 000000000..a93d788ac
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Debian.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Fedora.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Fedora.yml
new file mode 100644
index 000000000..a93d788ac
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Fedora.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-7.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-7.yml
new file mode 100644
index 000000000..a93d788ac
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-7.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-8.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-8.yml
new file mode 100644
index 000000000..b4ece59ae
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-8.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+- name: For some reason we don't have the buildx plugin
+ set_fact:
+ docker_has_compose: false
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-9.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-9.yml
new file mode 100644
index 000000000..a93d788ac
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/RedHat-9.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Suse.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Suse.yml
new file mode 100644
index 000000000..5b80302bf
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/Suse.yml
@@ -0,0 +1,14 @@
+---
+# 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
+
+- name: Compose is available in OpenSuSE 15.5, not sure which versions before
+ set_fact:
+ docker_has_compose: "{{ ansible_facts.distribution_version is version('15.5', '>=') }}"
+
+- name: Install Docker compose CLI plugin
+ community.general.zypper:
+ name: docker-compose
+ disable_gpg_check: true
+ when: docker_has_compose
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/main.yml
new file mode 100644
index 000000000..7a971c229
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/main.yml
@@ -0,0 +1,65 @@
+---
+# 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 #
+####################################################################
+
+- name: Setup Docker
+ when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
+ block:
+ - name:
+ debug:
+ msg: |-
+ OS family: {{ ansible_facts.os_family }}
+ Distribution: {{ ansible_facts.distribution }}
+ Distribution major version: {{ ansible_facts.distribution_major_version }}
+ Distribution full version: {{ ansible_facts.distribution_version }}
+
+ - name: Set facts for Docker features to defaults
+ set_fact:
+ docker_has_compose: true
+ docker_compose_version: "0.0"
+
+ - name: Include distribution specific variables
+ include_vars: "{{ lookup('first_found', params) }}"
+ vars:
+ params:
+ files:
+ - "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.distribution }}.yml"
+ - "{{ ansible_facts.os_family }}.yml"
+ - default.yml
+ paths:
+ - "{{ role_path }}/vars"
+
+ - name: Include distribution specific tasks
+ include_tasks: "{{ lookup('first_found', params) }}"
+ vars:
+ params:
+ files:
+ - "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.distribution }}.yml"
+ - "{{ ansible_facts.os_family }}.yml"
+ paths:
+ - "{{ role_path }}/tasks"
+
+ - name: Obtain Docker Compose version
+ when: docker_has_compose
+ block:
+ - command:
+ cmd: docker info --format '{% raw %}{{ json .ClientInfo.Plugins }}{% endraw %}'
+ register: docker_cli_plugins_stdout
+ - set_fact:
+ docker_has_compose: >-
+ {{ docker_cli_plugins_stdout.stdout | from_json | selectattr('Name', 'eq', 'compose') | map(attribute='Version') | length > 0 }}
+ docker_compose_version: >-
+ {{ docker_cli_plugins_stdout.stdout | from_json | selectattr('Name', 'eq', 'compose') | map(attribute='Version') | first | default('0.0') | regex_replace('^v', '') }}
+
+ - debug:
+ msg: "Has Docker compoes plugin: {{ docker_has_compose }}; Docker compose plugin version: {{ docker_compose_version }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/nothing.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/nothing.yml
new file mode 100644
index 000000000..a93d788ac
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/tasks/nothing.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+# nothing to do
+[]
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/vars/default.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/vars/default.yml
new file mode 100644
index 000000000..f55df21f8
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_cli_compose/vars/default.yml
@@ -0,0 +1,4 @@
+---
+# 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
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/defaults/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/defaults/main.yml
new file mode 100644
index 000000000..0ebf5269f
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/defaults/main.yml
@@ -0,0 +1,15 @@
+---
+# 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
+
+skip_docker_compose: false
+
+docker_pip_extra_packages: []
+docker_pip_package: docker
+docker_pip_package_limit: '<7.0.0'
+
+docker_compose_packages:
+ - docker-compose
+docker_compose_pip_packages:
+ - docker-compose
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/meta/main.yml
index b6e985d7f..b6e985d7f 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/meta/main.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Alpine.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Alpine.yml
index 85042fdf0..85042fdf0 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Alpine.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Alpine.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Archlinux.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Archlinux.yml
index 2e62ff052..2e62ff052 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Archlinux.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Archlinux.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Debian.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Debian.yml
index 1729ccabe..1729ccabe 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Debian.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Debian.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Fedora.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Fedora.yml
index a5f3d467b..a5f3d467b 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Fedora.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Fedora.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/RedHat-7.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/RedHat-7.yml
index 62f0e3738..62f0e3738 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/RedHat-7.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/RedHat-7.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/RedHat-8.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/RedHat-8.yml
index 549868455..549868455 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/RedHat-8.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/RedHat-8.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/RedHat-9.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/RedHat-9.yml
index 549868455..549868455 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/RedHat-9.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/RedHat-9.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Suse.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Suse.yml
index 46e50fd4d..46e50fd4d 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/Suse.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/Suse.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/main.yml
index 630885104..630885104 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/main.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/setup.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/setup.yml
index 08c68a89a..0db7293df 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/tasks/setup.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/tasks/setup.yml
@@ -37,21 +37,41 @@
paths:
- "{{ role_path }}/tasks"
+ - name: Limit docker pypi package version to < 4.3.0
+ set_fact:
+ docker_pip_package_limit: '<4.3.0'
+ when: docker_api_version is version('1.39', '<')
+
+ - name: Install/upgrade Docker SDK for Python
+ pip:
+ name: "{{ [docker_pip_package ~ docker_pip_package_limit] + docker_pip_extra_packages }}"
+ extra_args: "-c {{ remote_constraints }}"
+ state: present
+
- name: Install docker-compose
pip:
state: present
name: "{{ docker_compose_pip_packages }}"
extra_args: "-c {{ remote_constraints }}"
+ - name: Check docker-py version
+ command: "{{ ansible_python.executable }} -c 'import docker; print(docker.__version__)'"
+ register: docker_py_version_stdout
+ ignore_errors: true
+
- name: Register docker-compose version
command: "{{ ansible_python.executable }} -c 'import compose; print(compose.__version__)'"
register: docker_compose_version
ignore_errors: true
- - name: Declare docker-compose version
+ - name: Declare docker-py and docker-compose version
set_fact:
+ docker_py_version: "{{ docker_py_version_stdout.stdout | default('0.0') }}"
docker_compose_version: "{{ docker_compose_version.stdout | default('0.0.0') }}"
+ - debug:
+ msg: "Docker SDK for Python version: {{ docker_py_version }}; Docker Compose version: {{ docker_compose_version }}"
+
- name: Declare docker-compose as existing
set_fact:
has_docker_compose: true
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/defaults/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Alpine.yml
index f701c90e3..fb03ae738 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/defaults/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Alpine.yml
@@ -3,8 +3,9 @@
# 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
-skip_docker_compose: false
docker_compose_packages:
- docker-compose
docker_compose_pip_packages:
- docker-compose
+ # Force PyYAML to 5.3.1
+ - PyYAML==5.3.1
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Archlinux.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Archlinux.yml
new file mode 100644
index 000000000..f0698a3e4
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Archlinux.yml
@@ -0,0 +1,9 @@
+---
+# 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
+
+docker_compose_pip_packages:
+ - docker-compose
+ # Force PyYAML to 5.3.1
+ - PyYAML==5.3.1
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/CentOS-8.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/CentOS-8.yml
index c5d18002b..c5d18002b 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/CentOS-8.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/CentOS-8.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Debian-11.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Debian-11.yml
new file mode 100644
index 000000000..727d541fd
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Debian-11.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+docker_pip_extra_packages:
+ # https://github.com/docker/docker-py/issues/3113
+ - requests<2.29.0
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Debian-12.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Debian-12.yml
new file mode 100644
index 000000000..727d541fd
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Debian-12.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+docker_pip_extra_packages:
+ # https://github.com/docker/docker-py/issues/3113
+ - requests<2.29.0
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-7.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-7.yml
new file mode 100644
index 000000000..99b27c1c6
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-7.yml
@@ -0,0 +1,10 @@
+---
+# 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
+
+skip_docker_compose: true
+
+docker_pip_extra_packages:
+ # Not sure why RHEL7 needs this specific version
+ - requests==2.6.0
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/RedHat-8.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-8.yml
index 7279eac17..7279eac17 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/RedHat-8.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-8.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/RedHat-9.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-9.yml
index 7279eac17..7279eac17 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/RedHat-9.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/RedHat-9.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Suse-py2.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Suse-py2.yml
index c5d18002b..c5d18002b 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Suse-py2.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Suse-py2.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Suse-py3.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Suse-py3.yml
index 46c58b253..7279eac17 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Suse-py3.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Suse-py3.yml
@@ -3,4 +3,4 @@
# 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
-docker_compose_pip_packages: []
+docker_compose_packages: []
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-14.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-14.yml
new file mode 100644
index 000000000..f701e1f77
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-14.yml
@@ -0,0 +1,9 @@
+---
+# 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
+
+docker_pip_extra_packages:
+ # Installing requests >=2.12.0 on Ubuntu 14.04 breaks certificate validation. We restrict to an older version
+ # to ensure out get_url tests work out fine. This is only an issue if pyOpenSSL is also installed.
+ - requests==2.6.0
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Ubuntu-16.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-16.yml
index c5d18002b..c5d18002b 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Ubuntu-16.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-16.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Ubuntu-18.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-18.yml
index c5d18002b..c5d18002b 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Ubuntu-18.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu-18.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Ubuntu.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu.yml
index 46c58b253..46c58b253 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose/vars/Ubuntu.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/Ubuntu.yml
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/default.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/default.yml
new file mode 100644
index 000000000..f55df21f8
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_compose_v1/vars/default.yml
@@ -0,0 +1,4 @@
+---
+# 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
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_current_container_network_ip/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_current_container_network_ip/meta/main.yml
new file mode 100644
index 000000000..2a770b722
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_current_container_network_ip/meta/main.yml
@@ -0,0 +1,7 @@
+---
+# 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
+
+dependencies:
+ - setup_docker_python_deps
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_current_container_network_ip/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_current_container_network_ip/tasks/main.yml
new file mode 100644
index 000000000..21ed39723
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_current_container_network_ip/tasks/main.yml
@@ -0,0 +1,25 @@
+---
+# 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 #
+####################################################################
+
+- name: Setup Docker
+ when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
+ block:
+ - name: Detect whether we are running inside a container
+ current_container_facts:
+
+ - name: Inspect current container
+ docker_container_info:
+ name: "{{ ansible_module_container_id }}"
+ register: current_container_info
+ when: ansible_module_running_in_container
+
+ - name: Determine network name
+ set_fact:
+ current_container_network_ip: "{{ (current_container_info.container.NetworkSettings.Networks | dictsort)[0].0 | default('') if ansible_module_running_in_container else '' }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/aliases b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/aliases
new file mode 100644
index 000000000..0a430dff1
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/aliases
@@ -0,0 +1,5 @@
+# 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
+
+needs/target/setup_epel
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/defaults/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/defaults/main.yml
new file mode 100644
index 000000000..cd11129ed
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/defaults/main.yml
@@ -0,0 +1,12 @@
+---
+# 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
+
+docker_pip_api_packages:
+ - requests
+ # - paramiko
+ # - pyOpenSSL
+
+docker_pip_api_packages_python2:
+ - backports.ssl-match-hostname
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/meta/main.yml
new file mode 100644
index 000000000..d4a5c7d05
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/meta/main.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+dependencies:
+ - setup_remote_constraints
+ - setup_pkg_mgr
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/tasks/main.yml
new file mode 100644
index 000000000..67c2651d2
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/tasks/main.yml
@@ -0,0 +1,15 @@
+---
+# 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 #
+####################################################################
+
+- name: Install/upgrade Python requirements
+ pip:
+ name: "{{ docker_pip_api_packages + (docker_pip_api_packages_python2 if ansible_facts.python.version.major == 2 else []) }}"
+ extra_args: "-c {{ remote_constraints }}"
+ state: present
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/RedHat-7.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/RedHat-7.yml
new file mode 100644
index 000000000..ff5720177
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/RedHat-7.yml
@@ -0,0 +1,10 @@
+---
+# 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
+
+docker_pip_api_packages:
+ # Not sure why RHEL7 needs this specific version of requests
+ - requests==2.6.0
+ # - paramiko
+ # - pyOpenSSL
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/Ubuntu-14.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/Ubuntu-14.yml
new file mode 100644
index 000000000..41a8bceb5
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/Ubuntu-14.yml
@@ -0,0 +1,11 @@
+---
+# 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
+
+docker_pip_api_packages:
+ # Installing requests >=2.12.0 on Ubuntu 14.04 breaks certificate validation. We restrict to an older version
+ # to ensure out get_url tests work out fine. This is only an issue if pyOpenSSL is also installed.
+ - requests==2.6.0
+ # - paramiko
+ # - pyOpenSSL
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/default.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/default.yml
new file mode 100644
index 000000000..f55df21f8
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_python_deps/vars/default.yml
@@ -0,0 +1,4 @@
+---
+# 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
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/aliases b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/aliases
index 357972ff5..e1026a831 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/aliases
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/aliases
@@ -3,4 +3,5 @@
# SPDX-License-Identifier: GPL-3.0-or-later
needs/target/setup_docker
+needs/target/setup_docker_current_container_network_ip
needs/target/setup_openssl
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/handlers/cleanup.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/handlers/cleanup.yml
index 0a1f363cb..6833be48a 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/handlers/cleanup.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/handlers/cleanup.yml
@@ -4,9 +4,8 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- name: "Make sure all images are removed"
- docker_image:
+ docker_image_remove:
name: "{{ item }}"
- state: absent
with_items: "{{ docker_registry_setup_inames }}"
- name: "Get registry logs"
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/meta/main.yml
index 4ab14ed10..f13fc1adc 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/meta/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/meta/main.yml
@@ -5,5 +5,7 @@
dependencies:
#- setup_docker -- done in setup.yml, to work around cleanup problems!
+ #- setup_docker_current_container_network_ip
+ - setup_docker_python_deps
- setup_openssl
- setup_remote_tmp_dir
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/tasks/setup.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/tasks/setup.yml
index b3a8662ee..454c6604a 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/tasks/setup.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/tasks/setup.yml
@@ -16,6 +16,10 @@
include_role:
name: setup_docker
+- name: Figure out current container's network IP
+ include_role:
+ name: setup_docker_current_container_network_ip
+
- name: Create random name prefix and test registry name
set_fact:
docker_registry_container_name_registry: '{{ ''ansible-docker-test-registry-%0x'' % ((2**32) | random) }}'
@@ -36,10 +40,10 @@
- debug:
msg: Using test registry name {{ docker_registry_container_name_registry }} and nginx frontend names {{ docker_registry_container_name_nginx }} and {{ docker_registry_container_name_nginx2 }}
-- fail: msg="Too old docker / docker-py version to set up docker registry!"
- when: not(docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)
+- fail: msg="Too old docker version to set up docker registry!"
+ when: not(docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)
-- when: docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.25', '>=')
+- when: docker_api_version is version('1.25', '>=')
block:
# Set up registry container
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/vars/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/vars/main.yml
index e4eafc24e..1859bdfe6 100644
--- a/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/vars/main.yml
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_registry/vars/main.yml
@@ -4,10 +4,14 @@
# SPDX-License-Identifier: GPL-3.0-or-later
docker_test_image_digest_v1: e004c2cc521c95383aebb1fb5893719aa7a8eae2e7a71f316a4410784edb00a9
+docker_test_image_digest_v1_image_id: 758ec7f3a1ee85f8f08399b55641bfb13e8c1109287ddc5e22b68c3d653152ee
docker_test_image_digest_v2: ee44b399df993016003bf5466bd3eeb221305e9d0fa831606bc7902d149c775b
+docker_test_image_digest_v2_image_id: dc3bacd8b5ea796cea5d6070c8f145df9076f26a6bc1c8981fd5b176d37de843
docker_test_image_digest_base: quay.io/ansible/docker-test-containers
docker_test_image_hello_world: quay.io/ansible/docker-test-containers:hello-world
+docker_test_image_hello_world_image_id: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
docker_test_image_hello_world_base: quay.io/ansible/docker-test-containers
+docker_test_image_hello_world_platform: docker.io/library/hello-world:latest
docker_test_image_busybox: quay.io/ansible/docker-test-containers:busybox
docker_test_image_alpine: quay.io/ansible/docker-test-containers:alpine3.8
docker_test_image_alpine_different: quay.io/ansible/docker-test-containers:alpine3.7
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/aliases b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/aliases
new file mode 100644
index 000000000..0a430dff1
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/aliases
@@ -0,0 +1,5 @@
+# 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
+
+needs/target/setup_epel
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/defaults/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/defaults/main.yml
new file mode 100644
index 000000000..29a257f81
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/defaults/main.yml
@@ -0,0 +1,10 @@
+---
+# 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
+
+docker_py_version: '0.0'
+
+docker_pip_extra_packages: []
+docker_pip_package: docker
+docker_pip_package_limit: ''
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/meta/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/meta/main.yml
new file mode 100644
index 000000000..d4a5c7d05
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/meta/main.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+dependencies:
+ - setup_remote_constraints
+ - setup_pkg_mgr
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/tasks/main.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/tasks/main.yml
new file mode 100644
index 000000000..91cd5fcba
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/tasks/main.yml
@@ -0,0 +1,47 @@
+---
+# 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 #
+####################################################################
+
+- name: Setup Docker SDK for Python
+ when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
+ block:
+ - name: Include distribution specific variables
+ include_vars: "{{ lookup('first_found', params) }}"
+ vars:
+ params:
+ files:
+ - "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
+ - "{{ ansible_facts.distribution }}.yml"
+ - "{{ ansible_facts.os_family }}.yml"
+ - default.yml
+ paths:
+ - "{{ role_path }}/vars"
+
+ - name: Limit docker pypi package version to < 4.3.0
+ set_fact:
+ docker_pip_package_limit: '<4.3.0'
+ when: docker_api_version is version('1.39', '<')
+
+ - name: Install/upgrade Python requirements
+ pip:
+ name: "{{ [docker_pip_package ~ docker_pip_package_limit] + docker_pip_extra_packages }}"
+ extra_args: "-c {{ remote_constraints }}"
+ state: "{{ 'latest' if force_docker_sdk_for_python_pypi | default(false) else 'present' }}"
+
+ - name: Check docker-py version
+ command: "{{ ansible_python.executable }} -c 'import docker; print(docker.__version__)'"
+ register: docker_py_version_stdout
+ ignore_errors: true
+
+ - set_fact:
+ docker_py_version: "{{ docker_py_version_stdout.stdout | default('0.0') }}"
+
+ - debug:
+ msg: "Docker SDK for Python version: {{ docker_py_version }}"
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/RedHat-7.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/RedHat-7.yml
new file mode 100644
index 000000000..9fa5efa5c
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/RedHat-7.yml
@@ -0,0 +1,8 @@
+---
+# 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
+
+docker_pip_extra_packages:
+ # Not sure why RHEL7 needs this specific version
+ - requests==2.6.0
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/Ubuntu-14.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/Ubuntu-14.yml
new file mode 100644
index 000000000..f701e1f77
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/Ubuntu-14.yml
@@ -0,0 +1,9 @@
+---
+# 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
+
+docker_pip_extra_packages:
+ # Installing requests >=2.12.0 on Ubuntu 14.04 breaks certificate validation. We restrict to an older version
+ # to ensure out get_url tests work out fine. This is only an issue if pyOpenSSL is also installed.
+ - requests==2.6.0
diff --git a/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/default.yml b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/default.yml
new file mode 100644
index 000000000..f55df21f8
--- /dev/null
+++ b/ansible_collections/community/docker/tests/integration/targets/setup_docker_sdk_for_python/vars/default.yml
@@ -0,0 +1,4 @@
+---
+# 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