# Rolle `healthcheck` Post-Update Quality-Gate. Die Rolle prüft nach einem OS-Update, ob alle Docker-Container wieder laufen, und protokolliert das Ergebnis im selben Update-Log, das auch von der `os-updates`-Rolle verwendet wird. > Siehe auch das Playbook `playbooks/os-updates-deb.yml` sowie die > [Repo-README](../../README.md). ## Voraussetzungen - Debian-Ziel-Host - Optional installiertes Docker (wird automatisch erkannt) - Idealerweise vorheriger Lauf der `os-updates`-Rolle (für gemeinsames Log) ## Einbindung Die Rolle ist fest in `playbooks/os-updates-deb.yml` nach der `os-updates`- Rolle eingebunden und wird in der Regel nicht separat aufgerufen: ```yaml - hosts: all become: true user: admin roles: - role: os-updates - role: healthcheck ``` ```bash ansible-playbook -i inventory/dmc12.yml playbooks/os-updates-deb.yml ``` ## Funktionsweise `tasks/main.yml` führt nacheinander folgende Schritte aus: 1. **Docker-Binary erkennen** – `which docker` (fehlertolerant) 2. **Docker-Präsenz festhalten** – Fakt `healthcheck_docker_installed` 3. **Alle Container auflisten** – `docker ps -a --format {{.Names}}` 4. **Laufende Container auflisten** – `docker ps --filter status=running` 5. **Container-Health bewerten** – Differenz aus allen und laufenden Containern ergibt `healthcheck_non_running_containers` 6. **Gesamtergebnis bestimmen** – `healthcheck_all_running`, `healthcheck_passed` 7. **Default-Ergebnis ohne Docker** – falls Docker nicht installiert ist, gilt der Healthcheck als bestanden (`passed: true`, 0 Container) 8. **Log-Verzeichnis sicherstellen** – delegiert an localhost 9. **Quality-Gate in Update-Log schreiben** – `blockinfile` mit Marker `# {mark} ANSIBLE-HEALTHCHECK`, Abschnitt `quality_gate:` 10. **Fehlschlagen bei ungesunden Containern** – nur wenn `healthcheck_fail_on_unhealthy` gesetzt ist ## Variablen | Variable | Typ | Default | Beschreibung | |------------------------------|-------|------------------------------------------------------------------|-----------------------------------------------| | `healthcheck_logging_enabled`| bool | `{{ os_update_logging_enabled \| default(true) }}` | Logging aktivieren | | `healthcheck_log_dir` | string| `{{ os_update_log_dir \| default('/ansible/logs') }}` | Basis-Verzeichnis für Logs | | `healthcheck_log_inventory` | string| `{{ inventory_file \| basename \| splitext \| first }}` | Inventory-Name (abgeleitet) | | `healthcheck_log_file` | string| `///update.log` | Pfad zur Update-Log-Datei | | `healthcheck_fail_on_unhealthy`| bool| `false` | Playbook fehlschlagen lassen, wenn Container nicht laufen | Die Variablen leiten sich standardmäßig aus den Werten der `os-updates`-Rolle ab, sodass beide Rollen in dasselbe Log schreiben. ## Templates Keine Templates. ## Handler Keine Handler. ## Tags Die Rolle vergibt keine eigenen Tags. ## Abhängigkeiten - Keine weiteren Rollen. - Collections: `ansible.builtin` (Bordmittel). - Empfohlener Partner: `os-updates`-Rolle (für gemeinsames Log-Format). ## Hinweise - Wird Docker nicht gefunden, gilt der Healthcheck als bestanden – nützlich für Hosts, die keine Container betreiben. - Das Log wird **delegiert auf localhost** geschrieben (auf dem Ansible- Controller), nicht auf dem Zielhost. Das Verzeichnis `logs/` ist git-ignored. - Die `quality_gate`-Sektion im Log ist an denselben Eintrag gekoppelt wie der `os-updates`-Preflight, sodass ein Update-Lauf inkl. Healthcheck nachvollziehbar dokumentiert ist. - `healthcheck_fail_on_unhealthy: false` (Default) bricht das Playbook nicht ab – bewusst gewählt, damit nach Updates nicht versehentlich ganze Host-Gruppen blockiert werden. Für kritische Hosts individuell setzen.