- Remove middleware reference from Gitea Traefik labels (caused routing issues) - Optimize Gitea connection pool settings (MAX_IDLE_CONNS=30, authentication_timeout=180s) - Add explicit service reference in Traefik labels - Fix intermittent 504 timeouts by improving PostgreSQL connection handling Fixes Gitea unreachability via git.michaelschiemer.de
Ansible Callback Plugin - default_with_clean_msg
Stand: 2025-11-07
Status: Dokumentation des Custom Callback Plugins
Übersicht
Das default_with_clean_msg Callback Plugin erweitert Ansible's Standard-Output mit verbesserter Formatierung für multiline msg Felder. Multiline Nachrichten werden als lesbare Blöcke mit Borders angezeigt, anstatt als escaped Newline-Zeichen.
Datei: deployment/ansible/callback_plugins/default_with_clean_msg.py
Zweck
Problem
Ansible's Standard Callback Plugin zeigt multiline msg Felder so an:
"msg": "Line 1\nLine 2\nLine 3"
Dies macht es schwierig, multiline Debug-Ausgaben zu lesen und zu kopieren.
Lösung
Das Custom Plugin formatiert multiline Nachrichten als lesbare Blöcke:
================================================================================
Line 1
Line 2
Line 3
================================================================================
Funktionalität
Multiline Message Formatting
Automatische Erkennung:
- Nur Nachrichten mit mehr als einer Zeile werden formatiert
- Einzeilige Nachrichten bleiben unverändert
Format:
- Border oben und unten (aus
=Zeichen) - Maximale Border-Breite: 80 Zeichen
- Farbcodierung entsprechend Task-Status
Method Overrides
Das Plugin überschreibt folgende Methoden des Default Callbacks:
v2_playbook_on_task_start- Task Startv2_runner_on_start- Runner Startv2_runner_on_ok- Erfolgreiche Tasksv2_runner_on_failed- Fehlgeschlagene Tasksv2_runner_on_skipped- Übersprungene Tasksv2_runner_on_unreachable- Unerreichbare Hosts
Grund: Diese Methoden werden überschrieben, um Warnings zu vermeiden, die auftreten, wenn get_option() vor der vollständigen Initialisierung aufgerufen wird.
Konfiguration
ansible.cfg
Datei: deployment/ansible/ansible.cfg
[defaults]
stdout_callback = default_with_clean_msg
callback_plugins = ./callback_plugins
Wichtig:
stdout_callbackaktiviert das Plugin als Standard-Outputcallback_pluginsgibt den Pfad zu den Plugin-Dateien an
Plugin-Datei
Pfad: deployment/ansible/callback_plugins/default_with_clean_msg.py
Struktur:
- Erbt von
ansible.plugins.callback.default.CallbackModule - Überschreibt spezifische Methoden
- Fügt
_print_clean_msg()Methode hinzu
Verwendung
Automatisch
Das Plugin wird automatisch verwendet, wenn ansible.cfg korrekt konfiguriert ist:
cd deployment/ansible
ansible-playbook -i inventory/production.yml playbooks/setup-infrastructure.yml
Manuell
Falls das Plugin nicht automatisch geladen wird:
ansible-playbook \
--callback-plugin ./callback_plugins \
--stdout-callback default_with_clean_msg \
-i inventory/production.yml \
playbooks/setup-infrastructure.yml
Beispiel-Ausgabe
Vorher (Standard Callback)
ok: [server] => {
"msg": "Container Status:\nNAME IMAGE COMMAND SERVICE CREATED STATUS PORTS\nproduction-php-1 localhost:5000/framework:latest \"/usr/local/bin/entr…\" php About a minute ago Restarting (255) 13 seconds ago"
}
Nachher (Custom Callback)
ok: [server] => {
================================================================================
Container Status:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
production-php-1 localhost:5000/framework:latest "/usr/local/bin/entr…" php About a minute ago Restarting (255) 13 seconds ago
================================================================================
}
Bekannte Limitationen
Warnings bei Option Access
Problem: Frühere Versionen des Plugins riefen get_option() auf, bevor Ansible's Optionen vollständig initialisiert waren, was zu Warnings führte:
[WARNING]: Failure using method (v2_playbook_on_task_start) in callback plugin: 'display_skipped_hosts'
Lösung: Das Plugin überschreibt die problematischen Methoden direkt, ohne get_option() aufzurufen.
Option-Checks
Aktuell: Das Plugin zeigt immer alle Hosts an (ok, changed, skipped), ohne Option-Checks.
Grund: Option-Checks würden get_option() erfordern, was Warnings verursacht.
Workaround: Falls Option-Checks benötigt werden, können sie nach vollständiger Initialisierung implementiert werden.
Technische Details
Inheritance
from ansible.plugins.callback.default import CallbackModule as DefaultCallbackModule
class CallbackModule(DefaultCallbackModule):
CALLBACK_NAME = 'default_with_clean_msg'
def _print_clean_msg(self, result, color=C.COLOR_VERBOSE):
# Custom formatting logic
Vorteil: Erbt alle Standard-Funktionalität und erweitert nur die Formatierung.
Method Overrides
Warum Overrides?
Die Standard-Methoden rufen get_option() auf, um zu prüfen, ob bestimmte Hosts angezeigt werden sollen. Dies schlägt fehl, wenn Optionen noch nicht initialisiert sind.
Lösung: Direkte Implementierung ohne Option-Checks:
def v2_runner_on_ok(self, result):
# Eigene Implementierung ohne get_option()
# ...
self._print_clean_msg(result, color=color)
Entwicklung
Plugin testen
# Plugin-Verzeichnis
cd deployment/ansible/callback_plugins
# Syntax prüfen
python3 -m py_compile default_with_clean_msg.py
# Mit Ansible testen
cd ..
ansible-playbook -i inventory/production.yml playbooks/check-container-status.yml
Plugin erweitern
Neue Formatierung hinzufügen:
_print_clean_msg()Methode erweitern- Neue Formatierungslogik implementieren
- Tests durchführen
Beispiel:
def _print_clean_msg(self, result, color=C.COLOR_VERBOSE):
msg_body = result._result.get('msg')
if isinstance(msg_body, str) and msg_body.strip():
# Custom formatting logic here
# ...
Troubleshooting
Plugin wird nicht geladen
Problem: Plugin wird nicht verwendet, Standard-Output bleibt
Lösung:
-
ansible.cfgprüfen:stdout_callback = default_with_clean_msg callback_plugins = ./callback_plugins -
Plugin-Datei prüfen:
ls -la deployment/ansible/callback_plugins/default_with_clean_msg.py -
Syntax prüfen:
python3 -m py_compile default_with_clean_msg.py
Warnings erscheinen
Problem: Warnings wie 'display_skipped_hosts'
Lösung: Plugin-Version prüfen - sollte Method Overrides ohne get_option() verwenden.
Aktueller Stand: Plugin verwendet direkte Overrides ohne Option-Checks.
Referenz
- Ansible Callback Plugins Documentation
- Ansible Callback Development Guide
- Initial Deployment Troubleshooting - Problem 8: Ansible Debug Messages
Changelog
2025-11-07
- Initial Version erstellt
- Multiline Message Formatting implementiert
- Method Overrides ohne Option-Checks
- Warnings behoben