Files
smom-dbis-138/terraform/phases/phase1/scripts/configure-all-besu-nodes.sh
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

166 lines
5.5 KiB
Bash
Executable File

#!/bin/bash
# Configure Besu Nodes on All Backend VMs
# This script automates the configuration of Besu on all 5 backend VMs
# Requires: VPN/Bastion access to backend VMs
set -euo pipefail
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m' # No Color
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PHASE1_DIR="$SCRIPT_DIR/../"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../../.." && pwd)"
echo "=========================================="
echo "Configure All Besu Nodes"
echo "=========================================="
echo ""
# Backend VM configuration
declare -A BACKEND_VMS=(
["centralus"]="10.3.1.4:az-p-cus-vm-besu-node-0"
["eastus"]="10.1.1.4:az-p-eus-vm-besu-node-0"
["eastus2"]="10.4.1.4:az-p-eus2-vm-besu-node-0"
["westus"]="10.2.1.4:az-p-wus-vm-besu-node-0"
["westus2"]="10.5.1.4:az-p-wus2-vm-besu-node-0"
)
# Check if genesis file exists
GENESIS_FILE="$PHASE1_DIR/config/genesis-138.json"
if [ ! -f "$GENESIS_FILE" ]; then
echo -e "${RED}Error: Genesis file not found: $GENESIS_FILE${NC}"
exit 1
fi
echo -e "${BLUE}Genesis file: $GENESIS_FILE${NC}"
echo ""
# Function to configure a single Besu node
configure_besu_node() {
local region=$1
local ip=$2
local vm_name=$3
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}Configuring Besu Node: $region${NC}"
echo -e "${BLUE}IP: $ip${NC}"
echo -e "${BLUE}VM: $vm_name${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
# Copy setup script
echo -e "${YELLOW}Copying setup script to VM...${NC}"
scp "$SCRIPT_DIR/setup-besu-node.sh" besuadmin@$ip:/tmp/ 2>/dev/null || {
echo -e "${RED}Error: Could not copy setup script to $ip${NC}"
echo -e "${YELLOW}Please ensure VPN/Bastion access is configured${NC}"
return 1
}
# Copy genesis file
echo -e "${YELLOW}Copying genesis file to VM...${NC}"
scp "$GENESIS_FILE" besuadmin@$ip:/tmp/genesis.json 2>/dev/null || {
echo -e "${RED}Error: Could not copy genesis file to $ip${NC}"
return 1
}
# Run setup script
echo -e "${YELLOW}Running Besu setup script...${NC}"
ssh besuadmin@$ip "chmod +x /tmp/setup-besu-node.sh && sudo /tmp/setup-besu-node.sh besu-node 0 $region" || {
echo -e "${RED}Error: Setup script failed on $ip${NC}"
return 1
}
# Copy genesis file to correct location
echo -e "${YELLOW}Installing genesis file...${NC}"
ssh besuadmin@$ip "sudo cp /tmp/genesis.json /opt/besu/config/genesis.json && sudo chown besuadmin:besuadmin /opt/besu/config/genesis.json" || {
echo -e "${RED}Error: Failed to install genesis file${NC}"
return 1
}
# Start Besu service
echo -e "${YELLOW}Starting Besu service...${NC}"
ssh besuadmin@$ip "sudo systemctl start besu.service && sleep 5 && sudo systemctl status besu.service --no-pager | head -10" || {
echo -e "${YELLOW}Warning: Service start may have failed. Check logs.${NC}"
}
# Verify Besu is running
echo -e "${YELLOW}Verifying Besu is running...${NC}"
sleep 10
if ssh besuadmin@$ip "docker ps | grep -q besu"; then
echo -e "${GREEN}✓ Besu container is running${NC}"
else
echo -e "${YELLOW}⚠ Besu container not running. Check logs:${NC}"
echo -e "${YELLOW} ssh besuadmin@$ip 'docker logs besu-besu-node-0'${NC}"
fi
# Test RPC endpoint
echo -e "${YELLOW}Testing RPC endpoint...${NC}"
sleep 5
if ssh besuadmin@$ip "curl -s http://localhost:8545 -X POST -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}' | grep -q jsonrpc"; then
echo -e "${GREEN}✓ RPC endpoint is responding${NC}"
else
echo -e "${YELLOW}⚠ RPC endpoint not responding yet (may need more time to start)${NC}"
fi
echo -e "${GREEN}✓ Configuration complete for $region${NC}"
echo ""
}
# Main execution
echo -e "${BLUE}Starting configuration of ${#BACKEND_VMS[@]} Besu nodes...${NC}"
echo ""
SUCCESS_COUNT=0
FAILED_REGIONS=()
for region in "${!BACKEND_VMS[@]}"; do
IFS=':' read -r ip vm_name <<< "${BACKEND_VMS[$region]}"
if configure_besu_node "$region" "$ip" "$vm_name"; then
((SUCCESS_COUNT++))
else
FAILED_REGIONS+=("$region")
fi
echo ""
done
# Summary
echo "=========================================="
echo "Configuration Summary"
echo "=========================================="
echo -e "${GREEN}Successfully configured: $SUCCESS_COUNT/${#BACKEND_VMS[@]} nodes${NC}"
if [ ${#FAILED_REGIONS[@]} -gt 0 ]; then
echo -e "${RED}Failed regions:${NC}"
for region in "${FAILED_REGIONS[@]}"; do
echo -e "${RED} - $region${NC}"
done
echo ""
echo -e "${YELLOW}To retry failed regions:${NC}"
echo -e "${YELLOW} ssh besuadmin@<ip>${NC}"
echo -e "${YELLOW} sudo /tmp/setup-besu-node.sh besu-node 0 <region>${NC}"
fi
echo ""
echo -e "${BLUE}Next steps:${NC}"
echo "1. Verify all nodes are running: ssh besuadmin@<ip> 'docker ps'"
echo "2. Test RPC endpoints: curl http://<ip>:8545"
echo "3. Check logs: ssh besuadmin@<ip> 'docker logs besu-besu-node-0'"
echo "4. Configure cross-region connectivity"
echo ""
if [ $SUCCESS_COUNT -eq ${#BACKEND_VMS[@]} ]; then
echo -e "${GREEN}✓ All Besu nodes configured successfully!${NC}"
exit 0
else
echo -e "${YELLOW}⚠ Some nodes failed to configure. Review errors above.${NC}"
exit 1
fi