104 lines
2.6 KiB
Bash
Executable File
104 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Run all Ansible linters with proper configuration
|
|
|
|
set -euo pipefail
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Counters
|
|
TOTAL_CHECKS=0
|
|
FAILED_CHECKS=0
|
|
|
|
# Function to print section header
|
|
print_header() {
|
|
echo ""
|
|
echo "========================================="
|
|
echo "$1"
|
|
echo "========================================="
|
|
}
|
|
|
|
# Function to run a check
|
|
run_check() {
|
|
local name="$1"
|
|
local command="$2"
|
|
|
|
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
|
|
|
|
echo -n "Running $name... "
|
|
|
|
if eval "$command" > /tmp/lint-output.txt 2>&1; then
|
|
echo -e "${GREEN}✓ PASS${NC}"
|
|
return 0
|
|
else
|
|
echo -e "${RED}✗ FAIL${NC}"
|
|
cat /tmp/lint-output.txt
|
|
FAILED_CHECKS=$((FAILED_CHECKS + 1))
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Change to ansible directory if not already there
|
|
if [[ ! -d "playbooks" ]] && [[ -d "ansible" ]]; then
|
|
cd ansible
|
|
fi
|
|
|
|
print_header "Ansible Playbook Linting"
|
|
|
|
# Check if ansible-lint is available
|
|
if command -v ansible-lint &> /dev/null; then
|
|
run_check "ansible-lint (playbooks)" "ansible-lint playbooks/"
|
|
run_check "ansible-lint (roles)" "ansible-lint roles/ || true" # May not have roles
|
|
else
|
|
echo -e "${YELLOW}⚠ ansible-lint not found, skipping${NC}"
|
|
fi
|
|
|
|
# Check YAML syntax
|
|
print_header "YAML Syntax Validation"
|
|
|
|
if command -v yamllint &> /dev/null; then
|
|
run_check "yamllint (playbooks)" "yamllint playbooks/"
|
|
run_check "yamllint (group_vars)" "yamllint group_vars/ || true"
|
|
run_check "yamllint (host_vars)" "yamllint host_vars/ || true"
|
|
else
|
|
echo -e "${YELLOW}⚠ yamllint not found, skipping${NC}"
|
|
fi
|
|
|
|
# Check playbook syntax
|
|
print_header "Ansible Syntax Check"
|
|
|
|
for playbook in playbooks/*.yml; do
|
|
if [[ -f "$playbook" ]]; then
|
|
playbook_name=$(basename "$playbook")
|
|
run_check "syntax ($playbook_name)" "ansible-playbook $playbook --syntax-check"
|
|
fi
|
|
done
|
|
|
|
# Custom idempotency check (if tool exists)
|
|
print_header "Idempotency Check"
|
|
|
|
IDEMPOTENCY_TOOL="../.claude/skills/ansible-best-practices/tools/check_idempotency.py"
|
|
if [[ -f "$IDEMPOTENCY_TOOL" ]]; then
|
|
run_check "idempotency check" "uv run $IDEMPOTENCY_TOOL playbooks/*.yml"
|
|
else
|
|
echo -e "${YELLOW}⚠ Idempotency checker not found, skipping${NC}"
|
|
fi
|
|
|
|
# Summary
|
|
print_header "Summary"
|
|
|
|
echo "Total checks: $TOTAL_CHECKS"
|
|
echo "Passed: $((TOTAL_CHECKS - FAILED_CHECKS))"
|
|
echo "Failed: $FAILED_CHECKS"
|
|
|
|
if [[ $FAILED_CHECKS -eq 0 ]]; then
|
|
echo -e "${GREEN}✓ All checks passed!${NC}"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}✗ Some checks failed${NC}"
|
|
exit 1
|
|
fi
|