Files
michaelschiemer/x_ansible/check_yaml.sh

76 lines
2.2 KiB
Bash
Executable File

#!/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