--- - name: SWARM | Ensure Docker SDK for Python is installed ansible.builtin.apt: name: python3-docker state: present - name: SWARM | Get interface IP address for the manager ansible.builtin.set_fact: manager_ip: "{{ hostvars[inventory_hostname]['ansible_' + private_interface]['ipv4']['address'] }}" when: inventory_hostname == groups['managers'][0] - name: SWARM | Initialize the Docker Swarm community.docker.docker_swarm: state: present advertise_addr: "{{ manager_ip }}" when: inventory_hostname == groups['managers'][0] register: swarm_init_result - name: SWARM | Get the join tokens community.docker.docker_swarm_info: register: swarm_info when: inventory_hostname == groups['managers'][0] - name: SWARM | Verify that join tokens were fetched ansible.builtin.assert: that: - swarm_info is defined - swarm_info.swarm_facts is defined - swarm_info.swarm_facts.JoinTokens.Manager is defined - swarm_info.swarm_facts.JoinTokens.Worker is defined fail_msg: "Konnte die Join-Tokens vom Swarm Manager nicht abrufen. Ist der Swarm korrekt initialisiert?" success_msg: "Join-Tokens erfolgreich abgerufen." when: inventory_hostname == groups['managers'][0] - name: SWARM | Join manager nodes to the Swarm community.docker.docker_swarm: state: join remote_addrs: [ "{{ hostvars[groups['managers'][0]]['manager_ip'] }}:2377" ] join_token: "{{ hostvars[groups['managers'][0]]['swarm_info']['swarm_facts']['JoinTokens']['Manager'] }}" when: inventory_hostname in groups['managers'] - name: SWARM | Join worker nodes to the Swarm community.docker.docker_swarm: state: join remote_addrs: [ "{{ hostvars[groups['managers'][0]]['manager_ip'] }}:2377" ] join_token: "{{ hostvars[groups['managers'][0]]['swarm_info']['swarm_facts']['JoinTokens']['Worker'] }}" when: inventory_hostname in groups['workers'] - name: SWARM | Verify Swarm Cluster State (run on manager) ansible.builtin.command: docker node ls register: swarm_nodes changed_when: false when: inventory_hostname == groups['managers'][0] - name: SWARM | Display cluster state ansible.builtin.debug: msg: "{{ swarm_nodes.stdout_lines }}" when: inventory_hostname == groups['managers'][0]