--- - hosts: swarm_workers become: true gather_facts: yes vars: roles: - role: geerlingguy.swap - role: geerlingguy.docker - role: common tasks: - name: Get worker join token from master slurp: src: /tmp/swarm_worker_token register: worker_token_file delegate_to: "{{ groups['swarm_master'][0] }}" - name: Decode worker join token set_fact: worker_token: "{{ worker_token_file.content | b64decode | trim }}" - name: Gather master facts ansible.builtin.setup: delegate_to: "{{ groups['swarm_master'][0] }}" run_once: true register: master_facts # Needed as gathering master facts will overwrite - name: Regather node facts ansible.builtin.setup: - name: Add nodes community.docker.docker_swarm: state: join join_token: "{{ worker_token }}" remote_addrs: - "{{ master_facts.ansible_facts['ansible_eth1']['ipv4']['address'] }}:2377" advertise_addr: "{{ ansible_eth1.ipv4.address }}" - name: Replace node labels with new labels community.docker.docker_node: hostname: "{{ inventory_hostname }}" labels: "{{ dict(group_names | zip(['true'] * group_names | length)) }}" labels_state: replace delegate_to: "{{ groups['swarm_master'][0] }}"