diff --git a/tests/integration/targets/docker_context_info/aliases b/tests/integration/targets/docker_context_info/aliases new file mode 100644 index 00000000..0837c740 --- /dev/null +++ b/tests/integration/targets/docker_context_info/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/5 +destructive diff --git a/tests/integration/targets/docker_context_info/meta/main.yml b/tests/integration/targets/docker_context_info/meta/main.yml new file mode 100644 index 00000000..471ddd41 --- /dev/null +++ b/tests/integration/targets/docker_context_info/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/tests/integration/targets/docker_context_info/tasks/main.yml b/tests/integration/targets/docker_context_info/tasks/main.yml new file mode 100644 index 00000000..51c4380d --- /dev/null +++ b/tests/integration/targets/docker_context_info/tasks/main.yml @@ -0,0 +1,40 @@ +--- +# 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 containers, networks, ...) +- name: Create random container name prefix + set_fact: + cname_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}" + cnames: [] + +- debug: + msg: "Using container name prefix {{ cname_prefix }}" + +# Run the tests +- block: + - 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 + + when: docker_api_version is version('1.25', '>=') + +- fail: msg="Too old docker / docker-py version to run all docker_container tests!" + when: not(docker_api_version is version('1.25', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6) diff --git a/tests/integration/targets/docker_context_info/tasks/run-test.yml b/tests/integration/targets/docker_context_info/tasks/run-test.yml new file mode 100644 index 00000000..72a58962 --- /dev/null +++ b/tests/integration/targets/docker_context_info/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/tests/integration/targets/docker_context_info/tasks/tests/default-context.yml b/tests/integration/targets/docker_context_info/tasks/tests/default-context.yml new file mode 100644 index 00000000..5958d671 --- /dev/null +++ b/tests/integration/targets/docker_context_info/tasks/tests/default-context.yml @@ -0,0 +1,121 @@ +--- +# 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 container name + set_fact: + cname: "{{ cname_prefix ~ '-hi' }}" +- name: Registering container name + set_fact: + cnames: "{{ cnames + [cname] }}" + +- name: Get current context + community.docker.docker_context_info: + only_current: true + register: docker_current_context + +- assert: + that: + - docker_current_context is not changed + # Some of the following tests will not be true on all machines, but they should be in CI: + - docker_current_context.current_context_name == 'default' + - docker_current_context.contexts | length == 1 + - docker_current_context.contexts[0].name == 'default' + - docker_current_context.contexts[0].current == true + - docker_current_context.contexts[0].description == 'Current DOCKER_HOST based configuration' + - docker_current_context.contexts[0].meta_path is none + - docker_current_context.contexts[0].tls_path is none + - docker_current_context.contexts[0].config.docker_host == 'unix:///var/run/docker.sock' + - docker_current_context.contexts[0].config.tls == false + +- name: Run community.docker modules with current context + module_defaults: + group/community.docker.docker: "{{ docker_current_context.contexts[0].config }}" + block: + - name: Create container + docker_container: + image: "{{ docker_test_image_alpine }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + state: present + register: create_1 + + - name: Create container (idempotent) + docker_container: + image: "{{ docker_test_image_alpine }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + state: present + register: create_2 + + - assert: + that: + - create_1 is changed + - create_2 is not changed + + - name: Inspect container with CLI tool + ansible.builtin.command: + cmd: docker inspect {{ cname }} + register: result + + - assert: + that: + - (result.stdout | from_json) | length == 1 + - (result.stdout | from_json)[0].State.Status == "created" + + - name: Start container + docker_container: + name: "{{ cname }}" + state: started + register: start_1 + + - name: Start container (idempotent) + docker_container: + name: "{{ cname }}" + state: started + register: start_2 + + - assert: + that: + - start_1 is changed + - start_2 is not changed + + - name: Inspect container with CLI tool + ansible.builtin.command: + cmd: docker inspect {{ cname }} + register: result + + - assert: + that: + - (result.stdout | from_json) | length == 1 + - (result.stdout | from_json)[0].State.Status == "running" + + - name: Remove container + docker_container: + name: "{{ cname }}" + state: absent + force_kill: true + register: remove_1 + + - name: Remove container (idempotent) + docker_container: + name: "{{ cname }}" + state: absent + force_kill: true + register: remove_2 + + - assert: + that: + - remove_1 is changed + - remove_2 is not changed + + - name: Inspect container with CLI tool + ansible.builtin.command: + cmd: docker inspect {{ cname }} + register: result + failed_when: result.rc != 1 + + - assert: + that: + - (result.stdout | from_json) | length == 0