--- # 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 - block: - name: Make sure we're not already using Docker swarm community.docker.docker_swarm: state: absent force: true - name: Create a Swarm cluster community.docker.docker_swarm: state: present advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}" - name: install docker_stack python requirements ansible.builtin.pip: name: jsondiff,pyyaml - name: Create a stack without name register: output community.docker.docker_stack: # noqa: args[module] state: present ignore_errors: true - name: assert failure when name not set ansible.builtin.assert: that: - output is failed - 'output.msg == "missing required arguments: name"' - name: Create a stack without compose register: output community.docker.docker_stack: name: test_stack ignore_errors: true - name: assert failure when compose not set ansible.builtin.assert: that: - output is failed - 'output.msg == "compose parameter must be a list containing at least one element"' - name: Ensure stack is absent register: output community.docker.docker_stack: state: absent name: test_stack absent_retries: 30 - name: Template compose files ansible.builtin.template: src: "{{ item }}" dest: "{{ remote_tmp_dir }}/" with_items: - stack_compose_base.yml - stack_compose_overrides.yml - name: Create stack with compose file register: output community.docker.docker_stack: state: present name: test_stack compose: - "{{ remote_tmp_dir }}/stack_compose_base.yml" - name: assert test_stack changed on stack creation with compose file ansible.builtin.assert: that: - output is changed # FIXME: updating the stack prevents leaving the swarm on Shippable # - name: Update stack with YAML # register: output # docker_stack: # state: present # name: test_stack # compose: # - "{{ stack_compose_base }}" # - "{{ stack_compose_overrides }}" # # - name: assert test_stack correctly changed on update with yaml # assert: # that: # - output is changed # - output.stack_spec_diff == stack_update_expected_diff - name: Delete stack register: output community.docker.docker_stack: state: absent name: test_stack absent_retries: 30 - name: assert delete of existing stack returns changed ansible.builtin.assert: that: - output is changed - name: Delete stack again register: output community.docker.docker_stack: state: absent name: test_stack absent_retries: 30 - name: assert state=absent idempotency ansible.builtin.assert: that: - output is not changed always: - name: Remove a Swarm cluster community.docker.docker_swarm: state: absent force: true