--- - block: - name: Make sure we're not already using Docker swarm docker_swarm: state: absent force: true - name: Try to get docker_swarm_facts when docker is not running in swarm mode docker_swarm_facts: ignore_errors: yes register: output - name: assert failure when called when swarm is not in use or not run on mamager node assert: that: - 'output is failed' - 'output.msg == "Error running docker swarm module: must run on swarm manager node"' - 'output.can_talk_to_docker == true' - 'output.docker_swarm_active == false' - 'output.docker_swarm_manager == false' - name: Create a Swarm cluster docker_swarm: state: present register: output - name: assert changed when create a new swarm cluster assert: that: - 'output is changed' - 'output.actions[0] | regex_search("New Swarm cluster created: ")' - 'output.swarm_facts.JoinTokens.Manager' - 'output.swarm_facts.JoinTokens.Worker' - name: Try to get docker_swarm_facts when docker is running in swarm mode and as manager docker_swarm_facts: register: output - name: assert creding docker swarm facts assert: that: - 'output.swarm_facts.JoinTokens.Manager' - 'output.swarm_facts.JoinTokens.Worker' - 'output.swarm_facts.ID' - 'output.can_talk_to_docker == true' - 'output.docker_swarm_active == true' - 'output.docker_swarm_manager == true' - name: Try to get docker_swarm_facts and list of nodes when docker is running in swarm mode and as manager docker_swarm_facts: nodes: yes register: output - name: assert reding swarm facts with list of nodes option assert: that: - 'output.swarm_facts.JoinTokens.Manager' - 'output.swarm_facts.JoinTokens.Worker' - 'output.swarm_facts.ID' - 'output.nodes[0].ID is string' - 'output.can_talk_to_docker == true' - 'output.docker_swarm_active == true' - 'output.docker_swarm_manager == true' - name: Get local docker node name set_fact: localnodename: "{{ output.nodes[0].Hostname }}" - name: Try to get docker_swarm_facts and verbose list of nodes when docker is running in swarm mode and as manager docker_swarm_facts: nodes: yes verbose_output: yes register: output - name: assert reading swarm facts with list of nodes and versbose output options assert: that: - 'output.swarm_facts.JoinTokens.Manager' - 'output.swarm_facts.JoinTokens.Worker' - 'output.swarm_facts.ID' - 'output.nodes[0].ID is string' - 'output.nodes[0].CreatedAt' - 'output.can_talk_to_docker == true' - 'output.docker_swarm_active == true' - 'output.docker_swarm_manager == true' - name: Try to get docker_swarm_facts and list of nodes with filters providing existing node name docker_swarm_facts: nodes: yes nodes_filters: name: "{{ localnodename }}" register: output - name: assert reading reading swarm facts and using node filter (random node name) assert: that: - 'output.swarm_facts.JoinTokens.Manager' - 'output.swarm_facts.JoinTokens.Worker' - 'output.swarm_facts.ID' - 'output.nodes | length == 1' - 'output.can_talk_to_docker == true' - 'output.docker_swarm_active == true' - 'output.docker_swarm_manager == true' - name: Create random name set_fact: randomnodename: "{{ 'node-%0x' % ((2**32) | random) }}" - name: Try to get docker_swarm_facts and list of nodes with filters providing non-existing random node name docker_swarm_facts: nodes: yes nodes_filters: name: "{{ randomnodename }}" register: output - name: assert reading reading swarm facts and using node filter (random node name) assert: that: - 'output.swarm_facts.JoinTokens.Manager' - 'output.swarm_facts.JoinTokens.Worker' - 'output.swarm_facts.ID' - 'output.nodes | length == 0' - 'output.can_talk_to_docker == true' - 'output.docker_swarm_active == true' - 'output.docker_swarm_manager == true' always: - name: Cleanup docker_swarm: state: absent force: true