--- - name: Deploy Homepage to replicant hosts: replicant vars: service_name: homepage service_dir: "{{ docker_appdata }}/{{ service_name }}" compose_src: "{{ playbook_dir }}/../compose-files/replicant/{{ service_name }}" tasks: - name: Create service directory ansible.builtin.file: path: "{{ service_dir }}" state: directory mode: '0755' - name: Copy docker-compose.yml ansible.builtin.copy: src: "{{ compose_src }}/docker-compose.yml" dest: "{{ service_dir }}/docker-compose.yml" mode: '0644' - name: Create config directory ansible.builtin.file: path: "{{ service_dir }}/config" state: directory mode: '0755' - name: Pull latest image community.docker.docker_image: name: ghcr.io/gethomepage/homepage:latest source: pull force_source: yes - name: Deploy Homepage community.docker.docker_compose_v2: project_src: "{{ service_dir }}" state: present pull: missing register: deploy_result - name: Show deployment result ansible.builtin.debug: msg: "Homepage deployed: {{ deploy_result.changed }}" - name: Wait for container to be healthy ansible.builtin.shell: | for i in {1..30}; do status=$(docker inspect --format='{{ "{{" }}.State.Health.Status{{ "}}" }}' homepage 2>/dev/null || echo "starting") if [ "$status" = "healthy" ]; then echo "Container is healthy" exit 0 fi sleep 2 done echo "Warning: Container not healthy after 60s" docker logs homepage 2>&1 | tail -20 register: health_check changed_when: false - name: Display health status ansible.builtin.debug: msg: "{{ health_check.stdout }}"