#!/usr/bin/env bash set -euo pipefail # Final Fix: Remove Old Nodes, Keep Valid, Collect Missing # Simplified approach to clean and update node lists set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" STATIC_NODES_FILE="$PROJECT_ROOT/smom-dbis-138/config/static-nodes.json" PERMISSIONED_NODES_FILE="$PROJECT_ROOT/smom-dbis-138-proxmox/config/permissioned-nodes.json" # Valid IPs to keep (current configuration) VALID_IPS=( "192.168.11.100" # Validator 1000 "192.168.11.101" # Validator 1001 "192.168.11.102" # Validator 1002 "192.168.11.103" # Validator 1003 "192.168.11.104" # Validator 1004 "192.168.11.150" # Sentry 1500 "192.168.11.151" # Sentry 1501 "192.168.11.152" # Sentry 1502 "192.168.11.153" # Sentry 1503 "192.168.11.211" # RPC 2101 "192.168.11.240" # RPC 2400 "192.168.11.241" # RPC 2401 "192.168.11.242" # RPC 2402 "192.168.11.250" # RPC 2500 "192.168.11.251" # RPC 2501 "192.168.11.252" # RPC 2502 "192.168.11.253" # RPC 2503 "192.168.11.254" # RPC 2504 "192.168.11.201" # RPC 2505 "192.168.11.202" # RPC 2506 "192.168.11.203" # RPC 2507 "192.168.11.204" # RPC 2508 ) echo "=== Filtering Node Lists ===" echo "" # Create associative array of valid IPs declare -A VALID_IP_MAP for ip in "${VALID_IPS[@]}"; do VALID_IP_MAP["$ip"]=1 done # Parse current file and keep only valid IPs declare -A KEPT_ENODES KEPT_COUNT=0 REMOVED_COUNT=0 while IFS= read -r line; do enode=$(echo "$line" | grep -o 'enode://[^"]*' || echo "") if [ -n "$enode" ]; then ip=$(echo "$enode" | sed -n 's/.*@\([0-9.]*\):.*/\1/p') if [ -n "${VALID_IP_MAP[$ip]}" ]; then KEPT_ENODES["$ip"]="$enode" ((KEPT_COUNT++)) else echo "Removing old/migrated IP: $ip" ((REMOVED_COUNT++)) fi fi done < <(cat "$STATIC_NODES_FILE" | jq -r '.[]' 2>/dev/null || grep -o 'enode://[^"]*' "$STATIC_NODES_FILE" 2>/dev/null || echo "") echo "" echo "Kept: $KEPT_COUNT enodes" echo "Removed: $REMOVED_COUNT old/migrated enodes" echo "" # Generate cleaned file OUTPUT_FILE="${STATIC_NODES_FILE}.fixed" echo "[" > "$OUTPUT_FILE" FIRST=true for ip in "${VALID_IPS[@]}"; do if [ -n "${KEPT_ENODES[$ip]}" ]; then if [ "$FIRST" = false ]; then echo "," >> "$OUTPUT_FILE" fi echo -n " \"${KEPT_ENODES[$ip]}\"" >> "$OUTPUT_FILE" FIRST=false fi done echo "" >> "$OUTPUT_FILE" echo "]" >> "$OUTPUT_FILE" # Verify and update if jq empty "$OUTPUT_FILE" 2>/dev/null; then BACKUP="${STATIC_NODES_FILE}.backup.$(date +%Y%m%d_%H%M%S)" cp "$STATIC_NODES_FILE" "$BACKUP" cp "$OUTPUT_FILE" "$STATIC_NODES_FILE" cp "$OUTPUT_FILE" "$PERMISSIONED_NODES_FILE" echo "✓ Files updated (backup: $BACKUP)" echo "✓ Kept $KEPT_COUNT enodes, removed $REMOVED_COUNT old entries" else echo "✗ Generated invalid JSON" exit 1 fi