42 lines
1.6 KiB
YAML

---
# 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"