- name: Create a Swarm cluster docker_swarm: state: present advertise_addr: "{{ansible_default_ipv4.address}}" - name: install docker_stack python requirements pip: name: jsondiff,pyyaml - name: Create a stack without name register: output docker_stack: state: present ignore_errors: yes - name: assert failure when name not set assert: that: - output is failed - 'output.msg == "missing required arguments: name"' - name: Create a stack without compose register: output docker_stack: name: test_stack ignore_errors: yes - name: assert failure when compose not set 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 docker_stack: state: absent name: test_stack absent_retries: 30 - name: Copy compose files copy: src: "{{item}}" dest: "{{output_dir}}/" with_items: - stack_compose_base.yml - stack_compose_overrides.yml - name: Create stack with compose file register: output docker_stack: state: present name: test_stack compose: - "{{output_dir}}/stack_compose_base.yml" - name: assert test_stack changed on stack creation with compose file 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.docker_stack_spec_diff == stack_update_expected_diff - name: Delete stack register: output docker_stack: state: absent name: test_stack absent_retries: 30 - name: assert delete of existing stack returns changed assert: that: - output is changed - name: Delete stack again register: output docker_stack: state: absent name: test_stack absent_retries: 30 - name: assert state=absent idempotency assert: that: - output is not changed - name: Remove a Swarm cluster docker_swarm: state: absent force: true