- name: Manage Docker Compose services hosts: paperless, mongodb, gitea, newt, jenkins, jellyfin, n8n, vaultwarden, ora-ubuntu-01 become: true vars: host_compose_configs: paperless: project_dir: "/home/admin" compose_files: - docker-compose.yaml mongodb: project_dir: "/home/admin/mongodb" compose_files: - docker-compose.yaml gitea: project_dir: "/home/admin/gitea" compose_files: - docker-compose.yaml newt: project_dir: "/home/admin/newt" compose_files: - docker-compose.yaml jenkins: project_dir: "/home/admin/jenkins" compose_files: - docker-compose.yaml jellyfin: project_dir: "/home/admin" compose_files: - docker-compose.yaml n8n: project_dir: "/home/admin/n8n" compose_files: - docker-compose.yaml vaultwarden: project_dir: "/home/admin/vaultwarden" compose_files: - docker-compose.yaml ora-ubuntu-01: project_dir: "/home/ubuntu/pangolin" compose_files: - docker-compose-monitoring.yaml - docker-compose.yaml force_pull: false force_recreate: false tasks: - name: Stop and remove containers community.docker.docker_compose_v2: project_src: "{{ host_compose_configs[inventory_hostname].project_dir }}" files: "{{ host_compose_configs[inventory_hostname].compose_files }}" state: absent register: compose_down - name: Pull latest images community.docker.docker_compose_v2: project_src: "{{ host_compose_configs[inventory_hostname].project_dir }}" files: "{{ host_compose_configs[inventory_hostname].compose_files }}" pull: always when: compose_down.changed or force_pull register: compose_pull - name: Start services community.docker.docker_compose_v2: project_src: "{{ host_compose_configs[inventory_hostname].project_dir }}" files: "{{ host_compose_configs[inventory_hostname].compose_files }}" state: present recreate: "{{ 'always' if force_recreate else 'auto' }}" register: compose_up - name: Docker prune community.docker.docker_prune: containers: true images: true register: prune_result - name: Display operation results debug: msg: | Host: {{ inventory_hostname }} Services down: {{ compose_down.changed }} Images pulled: {{ compose_pull.changed if compose_pull is defined else 'skipped' }} Services up: {{ compose_up.changed }}