feat: Add Ansible playbook to restart Traefik and verify configuration
Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Successful in 34s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Successful in 11s
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Successful in 13s
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 12m24s
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Failing after 4m10s
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled
Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Successful in 34s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Successful in 11s
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Successful in 13s
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 12m24s
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Failing after 4m10s
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled
- Add restart-traefik.yml playbook to restart Traefik container - Verify Traefik health after restart - Check for ACME challenge errors in logs - Display status summary with next steps - Useful after Traefik configuration changes
This commit is contained in:
126
deployment/ansible/playbooks/restart-traefik.yml
Normal file
126
deployment/ansible/playbooks/restart-traefik.yml
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
---
|
||||||
|
- name: Restart Traefik and Verify Configuration
|
||||||
|
hosts: production
|
||||||
|
gather_facts: yes
|
||||||
|
become: no
|
||||||
|
|
||||||
|
vars:
|
||||||
|
traefik_stack_path: "{{ stacks_base_path | default('/home/deploy/deployment/stacks') }}/traefik"
|
||||||
|
traefik_container_name: "traefik"
|
||||||
|
traefik_url: "https://traefik.michaelschiemer.de"
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Check if Traefik stack directory exists
|
||||||
|
stat:
|
||||||
|
path: "{{ traefik_stack_path }}"
|
||||||
|
register: traefik_stack_exists
|
||||||
|
|
||||||
|
- name: Fail if Traefik stack directory does not exist
|
||||||
|
fail:
|
||||||
|
msg: "Traefik stack directory not found at {{ traefik_stack_path }}"
|
||||||
|
when: not traefik_stack_exists.stat.exists
|
||||||
|
|
||||||
|
- name: Check Traefik container status before restart
|
||||||
|
shell: |
|
||||||
|
cd {{ traefik_stack_path }}
|
||||||
|
docker compose ps {{ traefik_container_name }} --format json
|
||||||
|
register: traefik_status_before
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Display Traefik status before restart
|
||||||
|
debug:
|
||||||
|
msg: |
|
||||||
|
================================================================================
|
||||||
|
Traefik Container Status (Before Restart):
|
||||||
|
{{ traefik_status_before.stdout | default('Container not found or Docker not running') }}
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
- name: Restart Traefik container
|
||||||
|
shell: |
|
||||||
|
cd {{ traefik_stack_path }}
|
||||||
|
docker compose restart {{ traefik_container_name }}
|
||||||
|
register: traefik_restart
|
||||||
|
changed_when: traefik_restart.rc == 0
|
||||||
|
|
||||||
|
- name: Wait for Traefik to be ready
|
||||||
|
wait_for:
|
||||||
|
timeout: 30
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Check Traefik container status after restart
|
||||||
|
shell: |
|
||||||
|
cd {{ traefik_stack_path }}
|
||||||
|
docker compose ps {{ traefik_container_name }} --format json
|
||||||
|
register: traefik_status_after
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Check Traefik health endpoint
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ traefik_url }}/ping"
|
||||||
|
method: GET
|
||||||
|
status_code: [200]
|
||||||
|
validate_certs: no
|
||||||
|
timeout: 10
|
||||||
|
register: traefik_health
|
||||||
|
ignore_errors: yes
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Get Traefik logs (last 50 lines)
|
||||||
|
shell: |
|
||||||
|
cd {{ traefik_stack_path }}
|
||||||
|
docker compose logs --tail=50 {{ traefik_container_name }}
|
||||||
|
register: traefik_logs
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: Check for ACME challenge errors in logs
|
||||||
|
shell: |
|
||||||
|
cd {{ traefik_stack_path }}
|
||||||
|
docker compose logs {{ traefik_container_name }} 2>&1 | grep -i "acme challenge" | tail -10 || echo "No ACME challenge errors found"
|
||||||
|
register: acme_errors
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Display Traefik logs
|
||||||
|
debug:
|
||||||
|
msg: |
|
||||||
|
================================================================================
|
||||||
|
Traefik Container Logs (last 50 lines):
|
||||||
|
{{ traefik_logs.stdout | default('No logs available') }}
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
- name: Display ACME challenge status
|
||||||
|
debug:
|
||||||
|
msg: |
|
||||||
|
================================
|
||||||
|
ACME Challenge Status:
|
||||||
|
{{ acme_errors.stdout | default('No ACME errors found in recent logs') }}
|
||||||
|
================================
|
||||||
|
|
||||||
|
- name: Display final status
|
||||||
|
debug:
|
||||||
|
msg: |
|
||||||
|
========================================
|
||||||
|
========================================
|
||||||
|
Traefik Restart Summary
|
||||||
|
========================================
|
||||||
|
Container Status: {% if 'State":"running' in (traefik_status_after.stdout | default('')) %}✅ RUNNING{% else %}❌ NOT RUNNING{% endif %}
|
||||||
|
Health Check: {% if traefik_health.status | default(0) == 200 %}✅ HEALTHY{% else %}❌ UNHEALTHY or TIMEOUT{% endif %}
|
||||||
|
Restart Action: {% if traefik_restart.changed | default(false) %}🔄 Container restarted{% else %}ℹ️ No restart needed{% endif %}
|
||||||
|
========================================
|
||||||
|
{% if 'State":"running' in (traefik_status_after.stdout | default('')) and traefik_health.status | default(0) == 200 %}
|
||||||
|
✅ Traefik is running and healthy!
|
||||||
|
|
||||||
|
Next steps:
|
||||||
|
1. Monitor logs for ACME challenge errors: tail -f {{ traefik_stack_path }}/logs/traefik.log | grep -i acme
|
||||||
|
2. Check certificate status in Traefik dashboard: {{ traefik_url }}
|
||||||
|
3. Wait for next certificate renewal attempt (usually hourly)
|
||||||
|
{% else %}
|
||||||
|
❌ Traefik is not fully healthy. Check logs for details:
|
||||||
|
docker logs {{ traefik_container_name }}
|
||||||
|
{% endif %}
|
||||||
|
========================================
|
||||||
|
|
||||||
Reference in New Issue
Block a user