--- # roles/swarm_dozzle_agent/tasks/main.yml # Deploy a global Dozzle agent service so the Watchtower Dozzle UI can read logs from all swarm nodes. - name: Check if dozzle-agent service exists ansible.builtin.command: docker service ls --format '{{"{{"}}.Name{{"}}"}}' register: swarm_services changed_when: false - name: Create dozzle-agent swarm service ansible.builtin.command: >- docker service create --name {{ dozzle_agent_service_name }} --mode global --restart-condition any --publish mode=host,target={{ dozzle_agent_port }},published={{ dozzle_agent_port }} --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock,ro {{ dozzle_agent_image }} agent when: dozzle_agent_service_name not in swarm_services.stdout_lines - name: Update dozzle-agent swarm service ansible.builtin.command: >- docker service update --image {{ dozzle_agent_image }} --force {{ dozzle_agent_service_name }} when: dozzle_agent_service_name in swarm_services.stdout_lines changed_when: true - name: Verify dozzle-agent is running globally ansible.builtin.command: docker service ps --filter desired-state=running {{ dozzle_agent_service_name }} --format '{{"{{"}}.Node{{"}}"}}' register: dozzle_agent_ps changed_when: false - name: Assert dozzle-agent replicas running on all nodes ansible.builtin.assert: that: - dozzle_agent_ps.stdout_lines | length >= groups['swarm_hosts'] | length fail_msg: "Dozzle agents are not running on all swarm nodes yet" success_msg: "Dozzle agents running across swarm nodes"