--- # Check and Restart Gitea if Unhealthy - name: Check if Gitea stack directory exists ansible.builtin.stat: path: "{{ gitea_stack_path }}" register: gitea_stack_exists - name: Fail if Gitea stack directory does not exist ansible.builtin.fail: msg: "Gitea stack directory not found at {{ gitea_stack_path }}" when: not gitea_stack_exists.stat.exists - name: Check Gitea container status ansible.builtin.shell: | cd {{ gitea_stack_path }} docker compose ps {{ gitea_container_name }} --format json register: gitea_container_status changed_when: false failed_when: false - name: Display Gitea container status ansible.builtin.debug: msg: | ================================================================================ Gitea Container Status: {{ gitea_container_status.stdout | default('Container not found or error') }} ================================================================================ when: gitea_show_status | default(true) | bool - name: Check Gitea health endpoint ansible.builtin.uri: url: "{{ gitea_url }}/api/healthz" method: GET status_code: [200] validate_certs: false timeout: "{{ gitea_health_check_timeout | default(10) }}" register: gitea_health ignore_errors: yes changed_when: false - name: Display Gitea health check result ansible.builtin.debug: msg: | ================================ Gitea Health Check: - Status Code: {{ gitea_health.status | default('UNREACHABLE') }} - Response Time: {{ gitea_health.elapsed | default('N/A') }}s - Status: {% if gitea_health.status | default(0) == 200 %}✅ HEALTHY{% else %}❌ UNHEALTHY or TIMEOUT{% endif %} ================================ when: gitea_show_status | default(true) | bool - name: Get Gitea container logs ansible.builtin.shell: | cd {{ gitea_stack_path }} docker compose logs --tail={{ gitea_logs_tail | default(50) }} {{ gitea_container_name }} 2>&1 || echo "LOGS_NOT_AVAILABLE" register: gitea_logs changed_when: false failed_when: false - name: Display Gitea container logs ansible.builtin.debug: msg: | ================================================================================ Gitea Container Logs (last {{ gitea_logs_tail | default(50) }} lines): {{ gitea_logs.stdout | default('No logs available') }} ================================================================================ when: gitea_show_logs | default(true) | bool - name: Check if Gitea container is running ansible.builtin.set_fact: gitea_is_running: "{{ 'State\":\"running' in (gitea_container_status.stdout | default('')) }}" - name: Check if Gitea is healthy ansible.builtin.set_fact: gitea_is_healthy: "{{ (gitea_health.status | default(0)) == 200 }}" - name: Restart Gitea container if unhealthy or not running ansible.builtin.shell: | cd {{ gitea_stack_path }} docker compose restart {{ gitea_container_name }} when: - (not gitea_is_healthy | bool or not gitea_is_running | bool) - gitea_auto_restart | default(true) | bool register: gitea_restart changed_when: gitea_restart.rc == 0 notify: wait for gitea - name: Wait for Gitea to be ready after restart ansible.builtin.uri: url: "{{ gitea_url }}/api/healthz" method: GET status_code: [200] validate_certs: false timeout: "{{ gitea_health_check_timeout | default(10) }}" register: gitea_health_after_restart until: gitea_health_after_restart.status == 200 retries: "{{ gitea_restart_retries | default(30) }}" delay: "{{ gitea_restart_delay | default(2) }}" when: gitea_restart.changed | default(false) ignore_errors: yes changed_when: false - name: Display final status ansible.builtin.debug: msg: | ======================================== ======================================== Gitea Status Summary ======================================== Container Running: {% if gitea_is_running | bool %}✅ YES{% else %}❌ NO{% endif %} Health Check: {% if gitea_health_after_restart.status | default(0) == 200 %}✅ HEALTHY{% elif gitea_is_healthy | bool %}✅ HEALTHY{% else %}❌ UNHEALTHY{% endif %} Action Taken: {% if gitea_restart.changed | default(false) %}🔄 Container restarted{% else %}ℹ️ No restart needed{% endif %} Final Status: {% if gitea_is_running | bool and (gitea_health_after_restart.status | default(0) == 200 or gitea_is_healthy | bool) %}✅ HEALTHY{% else %}❌ STILL UNHEALTHY{% endif %} ======================================== {% if gitea_is_running | bool and (gitea_health_after_restart.status | default(0) == 200 or gitea_is_healthy | bool) %} ✅ Gitea is now accessible and healthy! {% else %} ❌ Gitea is still not fully healthy. Manual intervention may be required. {% endif %} ======================================== when: gitea_show_status | default(true) | bool