Files
proxmox/scripts/check-vmid-consistency.sh

228 lines
8.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Check VMID consistency across all documentation and scripts
# Validates that all references match the expected ranges
set -euo pipefail
PROJECT_ROOT="/home/intlc/projects/proxmox"
cd "$PROJECT_ROOT"
# Expected VMID ranges
VALIDATORS_START=1000
VALIDATORS_END=1004
VALIDATORS_COUNT=5
SENTRIES_START=1500
SENTRIES_END=1503
SENTRIES_COUNT=4
RPC_START=2500
RPC_END=2502
RPC_COUNT=3
echo "=== VMID Consistency Check ==="
echo ""
echo "Expected Ranges:"
echo " Validators: $VALIDATORS_START-$VALIDATORS_END ($VALIDATORS_COUNT nodes)"
echo " Sentries: $SENTRIES_START-$SENTRIES_END ($SENTRIES_COUNT nodes)"
echo " RPC: $RPC_START-$RPC_END ($RPC_COUNT nodes)"
echo ""
errors=0
warnings=0
# Check for validator VMID inconsistencies
echo "=== Checking Validator VMIDs ==="
echo ""
# Find all validator VMID references
validator_refs=$(grep -rE "\b(100[0-4]|1000-1004|validator.*VMID|VALIDATOR.*=)" \
--include="*.md" --include="*.sh" --include="*.js" --include="*.py" \
--include="*.conf" --include="*.example" \
smom-dbis-138-proxmox/ 2>/dev/null | grep -v ".git" | cut -d: -f1 | sort -u)
if [[ -n "$validator_refs" ]]; then
for file in $validator_refs; do
# Check if file contains correct validator ranges
if grep -qE "\b(1000-1004|1000.*1004|100[0-4])\b" "$file" 2>/dev/null; then
# Check for incorrect validator ranges
if grep -qE "\b(106|107|108|109|110|1110|1100-1104)\b" "$file" 2>/dev/null && ! grep -qE "\b(1000|1001|1002|1003|1004)\b" "$file" 2>/dev/null; then
echo "$file - Contains OLD validator VMIDs only"
errors=$((errors + 1))
elif grep -qE "\b(106|107|108|109|110)\b" "$file" 2>/dev/null; then
echo " ⚠️ $file - Contains BOTH old and new validator VMIDs"
warnings=$((warnings + 1))
else
echo "$file - Validator VMIDs look correct"
fi
fi
done
fi
echo ""
echo "=== Checking Sentry VMIDs ==="
echo ""
# Find all sentry VMID references
sentry_refs=$(grep -rE "\b(150[0-3]|1500-1503|sentry.*VMID|SENTRY.*=)" \
--include="*.md" --include="*.sh" --include="*.js" --include="*.py" \
--include="*.conf" --include="*.example" \
smom-dbis-138-proxmox/ 2>/dev/null | grep -v ".git" | cut -d: -f1 | sort -u)
if [[ -n "$sentry_refs" ]]; then
for file in $sentry_refs; do
# Check if file contains correct sentry ranges
if grep -qE "\b(1500-1503|150[0-3])\b" "$file" 2>/dev/null; then
# Check for incorrect sentry ranges
if grep -qE "\b(111|112|113|114|1110|1110-1113)\b" "$file" 2>/dev/null && ! grep -qE "\b(1500|1501|1502|1503)\b" "$file" 2>/dev/null; then
echo "$file - Contains OLD sentry VMIDs only"
errors=$((errors + 1))
elif grep -qE "\b(111|112|113|114)\b" "$file" 2>/dev/null; then
echo " ⚠️ $file - Contains BOTH old and new sentry VMIDs"
warnings=$((warnings + 1))
else
echo "$file - Sentry VMIDs look correct"
fi
fi
done
fi
echo ""
echo "=== Checking RPC VMIDs ==="
echo ""
# Find all RPC VMID references
rpc_refs=$(grep -rE "\b(250[0-2]|2500-2502|rpc.*VMID|RPC.*=)" \
--include="*.md" --include="*.sh" --include="*.js" --include="*.py" \
--include="*.conf" --include="*.example" \
smom-dbis-138-proxmox/ 2>/dev/null | grep -v ".git" | cut -d: -f1 | sort -u)
if [[ -n "$rpc_refs" ]]; then
for file in $rpc_refs; do
# Check if file contains correct RPC ranges
if grep -qE "\b(2500-2502|250[0-2])\b" "$file" 2>/dev/null; then
# Check for incorrect RPC ranges
if grep -qE "\b(115|116|117|1120|1120-1122)\b" "$file" 2>/dev/null && ! grep -qE "\b(2500|2501|2502)\b" "$file" 2>/dev/null; then
echo "$file - Contains OLD RPC VMIDs only"
errors=$((errors + 1))
elif grep -qE "\b(115|116|117)\b" "$file" 2>/dev/null; then
echo " ⚠️ $file - Contains BOTH old and new RPC VMIDs"
warnings=$((warnings + 1))
else
echo "$file - RPC VMIDs look correct"
fi
fi
done
fi
echo ""
echo "=== Checking Count Consistency ==="
echo ""
# Check for count mismatches
validator_count_refs=$(grep -rE "(VALIDATOR.*COUNT|validators?.*count|5.*validator)" \
--include="*.md" --include="*.sh" --include="*.conf" \
smom-dbis-138-proxmox/ 2>/dev/null | grep -v ".git")
sentry_count_refs=$(grep -rE "(SENTRY.*COUNT|sentries?.*count|4.*sentry)" \
--include="*.md" --include="*.sh" --include="*.conf" \
smom-dbis-138-proxmox/ 2>/dev/null | grep -v ".git")
rpc_count_refs=$(grep -rE "(RPC.*COUNT|rpc.*count|3.*rpc)" \
--include="*.md" --include="*.sh" --include="*.conf" \
smom-dbis-138-proxmox/ 2>/dev/null | grep -v ".git")
# Check validator counts
for line in $validator_count_refs; do
file=$(echo "$line" | cut -d: -f1)
content=$(echo "$line" | cut -d: -f2-)
if echo "$content" | grep -qE "\b(4|3|6|7|8)\b" && echo "$content" | grep -qi validator; then
if ! echo "$content" | grep -qE "\b($VALIDATORS_COUNT|5)\b"; then
echo " ⚠️ $file - Validator count may be incorrect: $content"
warnings=$((warnings + 1))
fi
fi
done
# Check sentry counts
for line in $sentry_count_refs; do
file=$(echo "$line" | cut -d: -f1)
content=$(echo "$line" | cut -d: -f2-)
if echo "$content" | grep -qE "\b(3|5|6|7|8)\b" && echo "$content" | grep -qi sentry; then
if ! echo "$content" | grep -qE "\b($SENTRIES_COUNT|4)\b"; then
echo " ⚠️ $file - Sentry count may be incorrect: $content"
warnings=$((warnings + 1))
fi
fi
done
# Check RPC counts
for line in $rpc_count_refs; do
file=$(echo "$line" | cut -d: -f1)
content=$(echo "$line" | cut -d: -f2-)
if echo "$content" | grep -qE "\b(2|4|5|6)\b" && echo "$content" | grep -qi rpc; then
if ! echo "$content" | grep -qE "\b($RPC_COUNT|3)\b"; then
echo " ⚠️ $file - RPC count may be incorrect: $content"
warnings=$((warnings + 1))
fi
fi
done
echo ""
echo "=== Checking Array Definitions ==="
echo ""
# Check for hardcoded VMID arrays
array_files=$(grep -rE "(VALIDATORS|SENTRIES|RPCS?)=\(.*\)" \
--include="*.sh" --include="*.py" \
smom-dbis-138-proxmox/ 2>/dev/null | cut -d: -f1 | sort -u)
for file in $array_files; do
echo " Checking: $file"
# Check validators array
if grep -qE "VALIDATORS.*=" "$file" 2>/dev/null; then
validator_array=$(grep -A 1 "VALIDATORS.*=" "$file" 2>/dev/null | grep -E "\(.*\)")
if echo "$validator_array" | grep -qE "\b(106|107|108|109|110)\b" && ! echo "$validator_array" | grep -qE "\b(1000|1001|1002|1003|1004)\b"; then
echo " ❌ Validators array contains old VMIDs: $validator_array"
errors=$((errors + 1))
fi
fi
# Check sentries array
if grep -qE "SENTRIES.*=" "$file" 2>/dev/null; then
sentry_array=$(grep -A 1 "SENTRIES.*=" "$file" 2>/dev/null | grep -E "\(.*\)")
if echo "$sentry_array" | grep -qE "\b(111|112|113|114)\b" && ! echo "$sentry_array" | grep -qE "\b(1500|1501|1502|1503)\b"; then
echo " ❌ Sentries array contains old VMIDs: $sentry_array"
errors=$((errors + 1))
fi
fi
# Check RPC array
if grep -qE "RPCS?.*=" "$file" 2>/dev/null; then
rpc_array=$(grep -A 1 "RPCS?.*=" "$file" 2>/dev/null | grep -E "\(.*\)")
if echo "$rpc_array" | grep -qE "\b(115|116|117)\b" && ! echo "$rpc_array" | grep -qE "\b(2500|2501|2502)\b"; then
echo " ❌ RPC array contains old VMIDs: $rpc_array"
errors=$((errors + 1))
fi
fi
done
echo ""
echo "=== Summary ==="
echo ""
echo "Errors found: $errors"
echo "Warnings found: $warnings"
echo ""
if [[ $errors -eq 0 && $warnings -eq 0 ]]; then
echo "✅ All VMID references appear consistent!"
exit 0
elif [[ $errors -eq 0 ]]; then
echo "⚠️ Some warnings found - review recommended"
exit 0
else
echo "❌ Errors found - fix required"
exit 1
fi