#!/usr/bin/env bash # Collect enodes via RPC or data directory set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" source "$PROJECT_ROOT/config/ip-addresses.conf" get_host_for_vmid() { local vmid=$1 if [[ "$vmid" =~ ^(1505|1506|1507|1508)$ ]]; then echo "${PROXMOX_HOST_ML110}" elif [[ "$vmid" =~ ^(2500|2501|2502|2503|2504|2505)$ ]]; then echo "${PROXMOX_HOST_R630_01}" else echo "${PROXMOX_HOST_R630_01}" fi } collect_enode() { local vmid=$1 local ip=$2 local hostname=$3 local host=$(get_host_for_vmid $vmid) # Try RPC first local enode=$(ssh -o StrictHostKeyChecking=no root@${host} "pct exec $vmid -- curl -s -X POST -H 'Content-Type: application/json' --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_nodeInfo\",\"params\":[],\"id\":1}' http://localhost:8545 2>/dev/null | grep -o '\"enode\":\"[^\"]*\"' | cut -d'\"' -f4" 2>/dev/null) # If RPC fails, try to get from data directory if [[ -z "$enode" ]]; then local node_id=$(ssh -o StrictHostKeyChecking=no root@${host} "pct exec $vmid -- cat /data/besu/key 2>/dev/null | head -c 128" 2>/dev/null || \ ssh -o StrictHostKeyChecking=no root@${host} "pct exec $vmid -- find /data/besu -name 'key' -o -name 'nodekey' 2>/dev/null | head -1 | xargs cat 2>/dev/null | head -c 128" 2>/dev/null) if [[ -n "$node_id" ]]; then enode="enode://${node_id}@${ip}:30303" fi fi if [[ -z "$enode" ]]; then enode="PENDING" fi echo "$vmid|$hostname|$ip|$enode" } for vmid in 1505 1506 2500 2501 2502 1507 1508 2503 2504 2505; do case $vmid in 1505) collect_enode 1505 "${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-192.168.11.21}}}}}3" "besu-sentry-alltra-1" ;; 1506) collect_enode 1506 "${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-192.168.11.21}}}}}4" "besu-sentry-alltra-2" ;; 2500) collect_enode 2500 "${IP_SERVICE_172:-${IP_SERVICE_172:-192.168.11.172}}" "besu-rpc-alltra-1" ;; 2501) collect_enode 2501 "${IP_SERVICE_173:-${IP_SERVICE_173:-192.168.11.173}}" "besu-rpc-alltra-2" ;; 2502) collect_enode 2502 "${IP_SERVICE_174:-${IP_SERVICE_174:-192.168.11.174}}" "besu-rpc-alltra-3" ;; 1507) collect_enode 1507 "${IP_RPC_244:-${IP_RPC_244:-${IP_RPC_244:-192.168.11.244}}}" "besu-sentry-hybx-1" ;; 1508) collect_enode 1508 "${IP_RPC_245:-${IP_RPC_245:-${IP_RPC_245:-192.168.11.245}}}" "besu-sentry-hybx-2" ;; 2503) collect_enode 2503 "${IP_RPC_246:-${IP_RPC_246:-${IP_RPC_246:-192.168.11.246}}}" "besu-rpc-hybx-1" ;; 2504) collect_enode 2504 "${IP_RPC_247:-${IP_RPC_247:-${IP_RPC_247:-192.168.11.247}}}" "besu-rpc-hybx-2" ;; 2505) collect_enode 2505 "${IP_RPC_248:-${IP_RPC_248:-${IP_RPC_248:-192.168.11.248}}}" "besu-rpc-hybx-3" ;; esac done