Ansible Validierungs-Skript

Wie ich ein zuverlässiges Validierungstool für meine Ansible-Infrastruktur entwickelte

Ursprünglich plante ich, Woodpecker für die Überprüfung meiner Ansible-Dateien einzusetzen. Als die initiale Strategie nicht optimal funktionierte, entwickelte ich ein lokales Skript, das vor jedem Commit alle geänderten Dateien automatisch prüft. Was zunächst wie eine pragmatische Anpassung aussah, entwickelte sich zu einem unverzichtbaren Werkzeug in meinem Entwicklungsprozess.

Was macht das Skript?

Das Skript .helper/validate_ansible.sh ist ein Validierungstool für Ansible-Projekte. Es führt verschiedene Checks durch, die sicherstellen, dass meine Infrastruktur-als-Code sauber, konsistent und fehlerfrei bleibt.

Funktionen

  1. Syntax-Prüfung für YAML-Dateien

    • Verwendet ansible-playbook --syntax-check
    • Prüft Playbooks, Rolle-Tasks und andere YAML-Dateien
    • Erkennt Strukturfehler bereits vor dem Commit
  2. Ansible-Lint

    • Zusätzliche Qualitätsprüfung der Ansible-Dateien
    • Gibt Hinweise bei Verbesserungsmöglichkeiten
    • Hilft, Best Practices einzuhalten
  3. Inventar-Validierung

    • Überprüft Inventar-Dateien mit ansible-inventory
    • Erkennt Konfigurationsunstimmigkeiten
    • Stellt sicher, dass Hostgruppen und Variablen korrekt definiert sind
  4. Jinja2 Template-Check

    • Validiert Syntax von .j2 Template-Dateien
    • Stellt sicher, dass Templates korrekt aufgebaut sind
    • Verhindert Rendering-Fehler zur Laufzeit

Flexibilität der Nutzung

Das Skript kann in verschiedenen Modi ausgeführt werden:

  • Standard: Prüft nur git-veränderte Dateien
  • --all: Prüft alle Dateien im Projekt
  • Selektive Prüfung: Nur Playbooks, Inventare oder Templates nach Bedarf

Integration als Git-Hook

Um die Prüfung direkt beim Commit zu erzwingen, habe ich einen .git/hooks/pre-commit Hook implementiert:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash
SCRIPT_PATH=".helper/validate_ansible.sh"

if [[ ! -x "$SCRIPT_PATH" ]]; then
  echo "Fehler: Skript nicht ausführbar"
  exit 1
fi

if ! "$SCRIPT_PATH"; then
  echo "Fehler: Commit abgebrochen"
  exit 1
fi

exit 0

Dieser Hook stellt sicher, dass kein potenziell problematischer Code committed werden kann.

Vorteile

  • Automatische Qualitätssicherung
  • Frühe Fehlererkennung
  • Konsistente Code-Qualität
  • Nahtlose Integration in Entwicklungsprozess
  • Reduzierung manueller Überprüfungen
  • Erhöhung der Infrastruktur-Stabilität

Technische Details

Fazit

Was als pragmatische Lösung begann, entwickelte sich zu einem robusten Werkzeug. Das Skript spart nicht nur Zeit, sondern erhöht auch die Qualität und Zuverlässigkeit meiner Ansible-Infrastruktur. Es ist ein Paradebeispiel dafür, wie kleine, selbstentwickelte Tools große Herausforderungen elegant bewältigen können.

Tipp: Investiere Zeit in Automatisierung und Validierung - es zahlt sich immer aus!