--- - name: Create ClusterSwarm group group_by: key=ClusterSwarm when: - docker_swarmmode - name: Checking Swarm Mode Status ansible.builtin.command: "docker info" register: "docker_info" changed_when: false check_mode: false - name: Create Master Swarm group group_by: key=MasterSwarm when: - '"Swarm: active" in docker_info.stdout' - '" Is Manager: true" in docker_info.stdout' - name: Init Docker Swarm Mode On First Manager ansible.builtin.command: > docker swarm init --listen-addr {{ internal_interface }}:{{ docker_swarm_port }} --advertise-addr {{ internal_interface }} when: - not MasterSwarm is defined - '"Swarm: inactive" in docker_info.stdout' - inventory_hostname == groups['ClusterSwarm'][0] - name: Add the new master to MasterSwarm group add_host: name: '{{ inventory_hostname }}' groups: MasterSwarm when: - not MasterSwarm is defined - inventory_hostname == groups['ClusterSwarm'][0] # - name: cluster | Capturing Docker Swarm Worker join-token # ansible.builtin.command: "docker swarm join-token -q worker" # changed_when: false # register: "docker_swarm_worker_token" # delegate_to: groups['MasterSwarm'][0] # when: # - inventory_hostname != groups['MasterSwarm'][0] # - '"Swarm: inactive" in docker_info.stdout' # - name: cluster | Capturing Docker Swarm Manager join-token # ansible.builtin.command: "docker swarm join-token -q manager" # changed_when: false # register: "docker_swarm_manager_token" # when: > # inventory_hostname == groups['MasterSwarm'][0] # - name: cluster | Defining Docker Swarm Manager Address # ansible.builtin.set_fact: # docker_swarm_manager_address: "{{ docker_swarm_addr }}:{{ docker_swarm_port }}" # changed_when: false # when: > # inventory_hostname == groups['MasterSwarm'][0] # - name: cluster | Defining Docker Swarm Manager Address # ansible.builtin.set_fact: # docker_swarm_manager_address: "{{ hostvars[docker_swarm_primary_manager]['docker_swarm_manager_address'] }}" # changed_when: false # when: > # inventory_hostname != docker_swarm_primary_manager # - name: cluster | Defining Docker Swarm Manager join-token # ansible.builtin.set_fact: # docker_swarm_manager_token: "{{ hostvars[docker_swarm_primary_manager]['docker_swarm_manager_token'] }}" # changed_when: false # when: > # inventory_hostname != docker_swarm_primary_manager # - name: cluster | Defining Docker Swarm Worker join-token # ansible.builtin.set_fact: # docker_swarm_worker_token: "{{ hostvars[docker_swarm_primary_manager]['docker_swarm_worker_token'] }}" # changed_when: false # when: > # inventory_hostname != docker_swarm_primary_manager # - name: cluster | Joining Additional Docker Swarm Managers To Cluster # ansible.builtin.command: > # docker swarm join # --listen-addr {{ docker_swarm_addr }}:{{ docker_swarm_port }} # --advertise-addr {{ docker_swarm_addr }} # --token {{ docker_swarm_manager_token.stdout }} # {{ docker_swarm_manager_address }} # when: > # inventory_hostname != groups['MasterSwarm'][0] and # inventory_hostname not in groups[docker_swarm_workers_ansible_group] and # 'Swarm: active' not in docker_info.stdout and # 'Swarm: pending' not in docker_info.stdout # - name: cluster | Joining Docker Swarm Workers To Cluster # ansible.builtin.command: > # docker swarm join # --listen-addr {{ docker_swarm_addr }}:{{ docker_swarm_port }} # --advertise-addr {{ docker_swarm_addr }} # --token {{ docker_swarm_worker_token.stdout }} # {{ docker_swarm_manager_address }} # when: > # inventory_hostname in groups[docker_swarm_workers_ansible_group] and # 'Swarm: active' not in docker_info.stdout and # 'Swarm: pending' not in docker_info.stdout # ############### # - name: Initialize Swarm Master # hosts: swarm-master # gather_facts: yes # tasks: # - ansible.builtin.command: "docker swarm init --advertise-addr {{inventory_hostname}}" # - ansible.builtin.command: "docker swarm join-token -q worker" # register: swarm_token # - set_fact: swarmtoken="{{swarm_token.stdout}}" # # - name: Join Swarm Nodes # hosts: swarm-nodes # gather_facts: yes # tasks: # - ansible.builtin.command: "docker swarm join --advertise-addr {{inventory_hostname}} --token {{hostvars[groups['swarm-master'][0]].swarmtoken}} {{hostvars[groups['swarm-master'][0]].inventory_hostname}}:2377" # ## - name: Leave Swarm ## hosts: swarm-master:swarm-nodes ## gather_facts: yes ## tasks: ## - ansible.builtin.command: "docker swarm leave --force" # ## - name: docker_swarm | Managing Docker Swarm Networks ## docker_network: ## name: "{{ item.name }}" ## driver: "{{ item.driver }}" ## state: "{{ item.state }}" ## with_items: '{{ docker_swarm_networks }}' ## when: > ## inventory_hostname == docker_swarm_primary_manager