180 lines
5.5 KiB
Bash
180 lines
5.5 KiB
Bash
#!/bin/bash
|
|
# =============================================================================
|
|
# Syntax validation script for rsyslog GitOps
|
|
# =============================================================================
|
|
# This script validates:
|
|
# 1. Bash script syntax
|
|
# 2. Configuration file format
|
|
# 3. Ansible playbook syntax
|
|
# 4. rsyslog config syntax (if rsyslogd available)
|
|
#
|
|
# Exit codes:
|
|
# 0 = all checks passed
|
|
# 1 = one or more checks failed
|
|
# =============================================================================
|
|
|
|
set -o pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
EXIT_CODE=0
|
|
|
|
# Color codes
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
log_pass() {
|
|
echo -e "${GREEN}✓${NC} $1"
|
|
}
|
|
|
|
log_fail() {
|
|
echo -e "${RED}✗${NC} $1"
|
|
EXIT_CODE=1
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}⚠${NC} $1"
|
|
}
|
|
|
|
log_info() {
|
|
echo " $1"
|
|
}
|
|
|
|
# =============================================================================
|
|
# 1. Check shell script syntax
|
|
# =============================================================================
|
|
echo "Checking shell script syntax..."
|
|
|
|
for script in apply.sh drift-check.sh validate-syntax.sh; do
|
|
if [ -f "$SCRIPT_DIR/$script" ]; then
|
|
if bash -n "$SCRIPT_DIR/$script" 2>/dev/null; then
|
|
log_pass "$script"
|
|
else
|
|
log_fail "$script (bash -n failed)"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# =============================================================================
|
|
# 2. Check configuration file
|
|
# =============================================================================
|
|
echo
|
|
echo "Checking configuration file..."
|
|
|
|
if [ ! -f "$SCRIPT_DIR/config.env" ]; then
|
|
log_fail "config.env not found"
|
|
else
|
|
# Check for required variables
|
|
required_vars=(
|
|
"REPO_NAME"
|
|
"RSYSLOG_MAIN_CONFIG"
|
|
"RSYSLOG_CONFIG_DIR"
|
|
"GIT_RSYSLOG_MAIN_CONFIG"
|
|
"GIT_RSYSLOG_CONFIG_DIR"
|
|
)
|
|
|
|
config_valid=true
|
|
for var in "${required_vars[@]}"; do
|
|
if grep -q "^$var=" "$SCRIPT_DIR/config.env"; then
|
|
log_info "Found: $var"
|
|
else
|
|
log_fail "Missing required variable in config.env: $var"
|
|
config_valid=false
|
|
fi
|
|
done
|
|
|
|
if [ "$config_valid" = true ]; then
|
|
log_pass "config.env has all required variables"
|
|
fi
|
|
fi
|
|
|
|
# =============================================================================
|
|
# 3. Check Ansible syntax
|
|
# =============================================================================
|
|
echo
|
|
echo "Checking Ansible syntax..."
|
|
|
|
if command -v ansible-playbook &>/dev/null; then
|
|
if [ -f "$SCRIPT_DIR/ansible.cfg" ] && [ -f "$SCRIPT_DIR/ansible/inventory/hosts.yml" ]; then
|
|
if ansible-playbook -i "$SCRIPT_DIR/ansible/inventory/hosts.yml" \
|
|
--syntax-check "$SCRIPT_DIR/ansible/playbooks/"*.yml 2>/dev/null; then
|
|
log_pass "Ansible playbook syntax is valid"
|
|
else
|
|
log_fail "Ansible playbook syntax check failed"
|
|
fi
|
|
else
|
|
log_warn "Ansible configuration not found (ansible.cfg or hosts.yml) - skipping Ansible syntax check"
|
|
fi
|
|
else
|
|
log_warn "ansible-playbook not installed - skipping Ansible syntax check"
|
|
fi
|
|
|
|
# =============================================================================
|
|
# 4. Check rsyslog configuration files exist
|
|
# =============================================================================
|
|
echo
|
|
echo "Checking rsyslog configuration files..."
|
|
|
|
# Load config to get the paths
|
|
if [ -f "$SCRIPT_DIR/config.local.env" ]; then
|
|
# shellcheck disable=SC1090
|
|
source "$SCRIPT_DIR/config.local.env"
|
|
elif [ -f "$SCRIPT_DIR/config.env" ]; then
|
|
# shellcheck disable=SC1090
|
|
source "$SCRIPT_DIR/config.env"
|
|
fi
|
|
|
|
if [ -f "$SCRIPT_DIR/$GIT_RSYSLOG_MAIN_CONFIG" ]; then
|
|
log_pass "$GIT_RSYSLOG_MAIN_CONFIG exists"
|
|
|
|
# Try to validate rsyslog syntax if rsyslogd is available
|
|
if command -v rsyslogd &>/dev/null; then
|
|
if rsyslogd -N1 -f "$SCRIPT_DIR/$GIT_RSYSLOG_MAIN_CONFIG" 2>/dev/null; then
|
|
log_pass "$GIT_RSYSLOG_MAIN_CONFIG syntax is valid"
|
|
else
|
|
log_fail "$GIT_RSYSLOG_MAIN_CONFIG syntax check failed"
|
|
fi
|
|
else
|
|
log_warn "rsyslogd not installed - skipping rsyslog syntax validation"
|
|
fi
|
|
else
|
|
log_fail "$GIT_RSYSLOG_MAIN_CONFIG not found"
|
|
fi
|
|
|
|
if [ -d "$SCRIPT_DIR/$GIT_RSYSLOG_CONFIG_DIR" ]; then
|
|
conf_count=$(find "$SCRIPT_DIR/$GIT_RSYSLOG_CONFIG_DIR" -name "*.conf" | wc -l)
|
|
if [ "$conf_count" -gt 0 ]; then
|
|
log_pass "Found $conf_count rsyslog config files in $GIT_RSYSLOG_CONFIG_DIR/"
|
|
|
|
# Try to validate each file if rsyslogd is available
|
|
if command -v rsyslogd &>/dev/null; then
|
|
for conf in "$SCRIPT_DIR/$GIT_RSYSLOG_CONFIG_DIR"/*.conf; do
|
|
if rsyslogd -N1 -f "$conf" 2>/dev/null; then
|
|
log_info "Valid: $(basename "$conf")"
|
|
else
|
|
log_fail "Invalid: $(basename "$conf")"
|
|
fi
|
|
done
|
|
fi
|
|
else
|
|
log_warn "No .conf files found in $GIT_RSYSLOG_CONFIG_DIR/"
|
|
fi
|
|
else
|
|
log_fail "$GIT_RSYSLOG_CONFIG_DIR/ directory not found"
|
|
fi
|
|
|
|
# =============================================================================
|
|
# 5. Summary
|
|
# =============================================================================
|
|
echo
|
|
echo "=========================================="
|
|
if [ "$EXIT_CODE" -eq 0 ]; then
|
|
echo -e "${GREEN}All checks passed!${NC}"
|
|
else
|
|
echo -e "${RED}Some checks failed. Please review above.${NC}"
|
|
fi
|
|
echo "=========================================="
|
|
|
|
exit "$EXIT_CODE"
|