84 lines
3.1 KiB
Bash
84 lines
3.1 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Fetch enode for a Besu VMID via admin_nodeInfo (RPC must be on 8545).
|
||
|
|
# Usage: bash scripts/get-enode-for-vmid.sh <VMID> [proxmox-host]
|
||
|
|
# Example: bash scripts/get-enode-for-vmid.sh 2401 192.168.11.10
|
||
|
|
# Output: enode URL with correct IP (from config). Use to fix duplicate enode in node lists.
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
VMID="${1:-}"
|
||
|
|
HOST="${2:-}"
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
|
|
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
|
||
|
|
|
||
|
|
# VMID -> IP mapping (all 32 Besu nodes; see config/besu-node-lists and BESU_NODES_FILE_REFERENCE)
|
||
|
|
case "$VMID" in
|
||
|
|
1000) IP="192.168.11.100" ;;
|
||
|
|
1001) IP="192.168.11.101" ;;
|
||
|
|
1002) IP="192.168.11.102" ;;
|
||
|
|
1003) IP="192.168.11.103" ;;
|
||
|
|
1004) IP="192.168.11.104" ;;
|
||
|
|
1500) IP="192.168.11.150" ;;
|
||
|
|
1501) IP="192.168.11.151" ;;
|
||
|
|
1502) IP="192.168.11.152" ;;
|
||
|
|
1503) IP="192.168.11.153" ;;
|
||
|
|
1504) IP="192.168.11.154" ;;
|
||
|
|
1505) IP="192.168.11.213" ;;
|
||
|
|
1506) IP="192.168.11.214" ;;
|
||
|
|
1507) IP="192.168.11.244" ;;
|
||
|
|
1508) IP="192.168.11.245" ;;
|
||
|
|
2101) IP="${RPC_CORE_1:-192.168.11.211}" ;;
|
||
|
|
2102) IP="${RPC_CORE_2:-192.168.11.212}" ;;
|
||
|
|
2201) IP="${RPC_PUBLIC_1:-192.168.11.221}" ;;
|
||
|
|
2301) IP="${RPC_PRIVATE_1:-192.168.11.232}" ;;
|
||
|
|
2303) IP="192.168.11.233" ;;
|
||
|
|
2304) IP="192.168.11.234" ;;
|
||
|
|
2305) IP="192.168.11.235" ;;
|
||
|
|
2306) IP="192.168.11.236" ;;
|
||
|
|
2400) IP="${RPC_THIRDWEB_PRIMARY:-192.168.11.240}" ;;
|
||
|
|
2401) IP="${RPC_THIRDWEB_1:-192.168.11.241}" ;;
|
||
|
|
2402) IP="192.168.11.242" ;;
|
||
|
|
2403) IP="192.168.11.243" ;;
|
||
|
|
2500) IP="192.168.11.172" ;;
|
||
|
|
2501) IP="192.168.11.173" ;;
|
||
|
|
2502) IP="192.168.11.174" ;;
|
||
|
|
2503) IP="192.168.11.246" ;;
|
||
|
|
2504) IP="192.168.11.247" ;;
|
||
|
|
2505) IP="192.168.11.248" ;;
|
||
|
|
*) IP="" ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
if [[ -z "$VMID" ]]; then
|
||
|
|
echo "Usage: $0 <VMID> [proxmox-host]" >&2
|
||
|
|
echo "Example: $0 2401 192.168.11.10" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ -z "$HOST" ]]; then
|
||
|
|
# Per BESU_VMIDS_FROM_PROXMOX: r630-01 = 1000,1001,1002,1500-1502,2101,2500-2505; r630-02 = 2201,2303,2401; ml110 = rest
|
||
|
|
if [[ "$VMID" =~ ^(1000|1001|1002|1500|1501|1502|2101|2500|2501|2502|2503|2504|2505)$ ]]; then
|
||
|
|
HOST="${PROXMOX_R630_01:-192.168.11.11}"
|
||
|
|
elif [[ "$VMID" =~ ^(2201|2303|2401)$ ]]; then
|
||
|
|
HOST="${PROXMOX_R630_02:-192.168.11.12}"
|
||
|
|
else
|
||
|
|
HOST="${PROXMOX_ML110:-192.168.11.10}"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
ENODE=$(ssh -o ConnectTimeout=10 -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://127.0.0.1:8545 2>/dev/null" | jq -r '.result.enode // empty' 2>/dev/null)
|
||
|
|
[[ -z "$ENODE" ]] && ENODE=$(ssh -o ConnectTimeout=10 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://127.0.0.1:8545 2>/dev/null" | grep -o '"enode":"[^"]*"' | cut -d'"' -f4)
|
||
|
|
|
||
|
|
if [[ -z "$ENODE" ]]; then
|
||
|
|
echo "Could not get enode from VMID $VMID on $HOST. Is Besu running and RPC on 8545?" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Normalize IP in enode to expected IP
|
||
|
|
if [[ -n "$IP" ]]; then
|
||
|
|
ENODE=$(echo "$ENODE" | sed "s/@[0-9.]*:/@$IP:/")
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "$ENODE"
|