#!/bin/bash # Skript zur Überprüfung der YAML-Syntax in Ansible-Dateien SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Farbdefinitionen GREEN="\033[0;32m" YELLOW="\033[1;33m" RED="\033[0;31m" NC="\033[0m" # No Color echo -e "${GREEN}=== Überprüfe YAML-Syntax in Ansible-Dateien ===${NC}\n" # Fehler-Zähler errors=0 # Prüfe alle .yml-Dateien im Ansible-Verzeichnis find "$SCRIPT_DIR" -name "*.yml" | sort | while read -r file; do # Überspringe bestimmte Verzeichnisse if [[ "$file" == *"/templates/"* ]]; then continue fi echo -e "Prüfe: ${YELLOW}$(basename "$file")${NC} (${file})" # Prüfe ob die Datei leer ist if [ ! -s "$file" ]; then echo -e " ${YELLOW}Warnung: Datei ist leer${NC}" continue fi # Überprüfung mit ansible-playbook syntax-check if grep -q "^---" "$file"; then ansible-playbook --syntax-check "$file" &>/dev/null if [ $? -ne 0 ]; then echo -e " ${RED}Fehler: Syntax-Fehler in der Datei${NC}" echo -e " Detaillierte Prüfung:" ansible-playbook --syntax-check "$file" errors=$((errors+1)) continue fi fi # Überprüfung mit yamllint if command -v yamllint &>/dev/null; then yamllint -d relaxed "$file" &>/dev/null if [ $? -ne 0 ]; then echo -e " ${YELLOW}Warnung: yamllint hat Probleme gefunden${NC}" yamllint -d relaxed "$file" fi fi # Überprüfung auf mehrere YAML-Dokumente doc_count=$(grep -c "^---" "$file") if [ "$doc_count" -gt 1 ]; then echo -e " ${RED}Fehler: Mehrere YAML-Dokumente in einer Datei (${doc_count} Dokumente)${NC}" echo -e " Betroffene Zeilen:" grep -n "^---" "$file" errors=$((errors+1)) fi # Wenn alles ok ist if [ "$errors" -eq 0 ]; then echo -e " ${GREEN}✓ OK${NC}" fi done if [ "$errors" -gt 0 ]; then echo -e "\n${RED}Fehler gefunden! $errors Dateien haben Probleme.${NC}" echo -e "Bitte korrigieren Sie die YAML-Syntax-Fehler, bevor Sie fortfahren." exit 1 else echo -e "\n${GREEN}Alle YAML-Dateien haben die Syntax-Prüfung bestanden!${NC}" exit 0 fi