--- - name: Create cuyper directory ansible.builtin.file: path: "/etc/docker" state: directory mode: '0755' - name: Install Docker and Docker Compose block: - name: Ensure Docker and Docker Compose plugin are installed apt: name: - docker-cli - docker.io - docker-compose state: present update_cache: yes - name: Ensure Docker service is running and enabled on boot service: name: docker state: started enabled: yes - name: Install Python Docker SDK via APT (Debian) ansible.builtin.apt: name: - python3-docker - python3-requests state: present update_cache: true - name: Configure docker ansible.builtin.copy: src: "daemon.json" dest: "/etc/docker/daemon.json" mode: '0644' - name: Initialize Swarm community.docker.docker_swarm: state: present advertise_addr: "{{ swarm_advertise_addr }}" listen_addr: "{{ swarm_advertise_addr }}:2377" - name: Create Swarm overlay networks community.docker.docker_network: name: "{{ item.name }}" driver: "{{ item.driver | default('overlay') }}" attachable: "{{ item.attachable | default(false) }}" internal: "{{ item.internal | default(false) }}" scope: swarm state: present loop: "{{ swarm_networks }}" # - name: Get manager join token # community.docker.docker_swarm_info: # delegate_to: "{{ swarm_init_hostdahkasjhkla }}" # run_once: true # register: swarm_info # - name: Check local Swarm state # community.docker.docker_swarm_info: # register: local_swarm_info # failed_when: false # - name: Join worker to Swarm # community.docker.docker_swarm: # state: join # remote_addrs: # - "{{ swarm_manager_endpoint }}" # join_token: "{{ hostvars[swarm_init_host].swarm_info.swarm_facts.JoinTokens.Worker }}" # advertise_addr: "{{ swarm_advertise_addr }}" # listen_addr: "0.0.0.0:2377" # when: # - inventory_hostname in groups[swarm_worker_group] # - not local_swarm_info.swarm_facts.IsSwarmActive | default(false) # - name: Join manager to Swarm # community.docker.docker_swarm: # state: join # remote_addrs: # - "{{ swarm_manager_endpoint }}" # join_token: "{{ hostvars[swarm_init_host].swarm_info.swarm_facts.JoinTokens.Manager }}" # advertise_addr: "{{ swarm_advertise_addr }}" # listen_addr: "0.0.0.0:2377" # when: # - inventory_hostname in groups[swarm_manager_group] # - not local_swarm_info.swarm_facts.IsSwarmActive | default(false) # - name: Create Swarm overlay networks # community.docker.docker_network: # name: "{{ item.name }}" # driver: "{{ item.driver | default('overlay') }}" # attachable: "{{ item.attachable | default(false) }}" # internal: "{{ item.internal | default(false) }}" # scope: swarm # state: present # loop: "{{ swarm_networks }}" # - name: Ensure Swarm ports are allowed # ansible.posix.firewalld: # port: "{{ item }}" # permanent: true # immediate: true # state: enabled # loop: # - 2377/tcp # - 7946/tcp # - 7946/udp # - 4789/udp # when: # - ansible_facts.services['firewalld.service'] is defined # - ansible_facts.services['firewalld.service'].state == "running" # - name: Check Swarm state # community.docker.docker_swarm_info: # register: swarm_info # failed_when: false # - name: Initialize Docker Swarm # community.docker.docker_swarm: # state: present # advertise_addr: "{{ swarm_advertise_addr }}" # listen_addr: "0.0.0.0:2377" # when: not swarm_info.swarm_facts.IsSwarmActive | default(false) # when: my_custom_role__enabled | d(True) | bool