--- - name: Pull latest images and recreate updated containers hosts: Docker tasks: - name: Pull latest images ansible.builtin.command: cmd: docker compose pull chdir: ~/docker register: pull_result changed_when: "'Downloaded newer image' in pull_result.stdout or 'Pulled' in pull_result.stdout" - name: Recreate containers with updated images ansible.builtin.command: cmd: docker compose up -d --remove-orphans chdir: ~/docker - name: Pause for 30 seconds to allow containers to stabilize ansible.builtin.pause: seconds: 30 - name: Verify all containers are running ansible.builtin.shell: | expected=$(docker compose config --services | wc -l | tr -d ' ') running=$(docker compose ps --status running -q | wc -l | tr -d ' ') if [ "$expected" != "$running" ]; then echo "FAIL: $running/$expected containers running" docker compose ps exit 1 fi echo "OK: all $running containers running" args: chdir: ~/docker changed_when: false - name: Remove dangling images ansible.builtin.command: cmd: docker image prune -f