- 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.
115 lines
3.9 KiB
Bash
Executable File
115 lines
3.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Validate VM deployment
|
|
# This script validates that all VMs are properly deployed and configured
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
# Configuration
|
|
RESOURCE_GROUP="${RESOURCE_GROUP:-defi-oracle-mainnet-rg}"
|
|
VALIDATOR_COUNT="${VALIDATOR_COUNT:-2}"
|
|
SENTRY_COUNT="${SENTRY_COUNT:-2}"
|
|
RPC_COUNT="${RPC_COUNT:-2}"
|
|
|
|
|
|
log_success "Validating VM deployment..."
|
|
|
|
# Check prerequisites
|
|
if ! command -v az &> /dev/null; then
|
|
log_error "Error: Azure CLI not found"
|
|
exit 1
|
|
fi
|
|
|
|
if ! az account show &> /dev/null; then
|
|
log_error "Error: Not logged in to Azure"
|
|
exit 1
|
|
fi
|
|
|
|
# Get VM list
|
|
log_warn "Getting VM list..."
|
|
VMS=$(az vm list --resource-group "$RESOURCE_GROUP" --query "[].{Name:name, PowerState:powerState, IP:publicIps}" -o json 2>/dev/null || echo "[]")
|
|
|
|
if [ "$VMS" == "[]" ]; then
|
|
log_error "Error: No VMs found in resource group"
|
|
exit 1
|
|
fi
|
|
|
|
VALIDATOR_VMS=$(echo "$VMS" | jq -r '.[] | select(.Name | contains("validator")) | .Name')
|
|
SENTRY_VMS=$(echo "$VMS" | jq -r '.[] | select(.Name | contains("sentry")) | .Name')
|
|
RPC_VMS=$(echo "$VMS" | jq -r '.[] | select(.Name | contains("rpc")) | .Name')
|
|
|
|
# Validate validator VMs
|
|
log_warn "Validating validator VMs..."
|
|
VALIDATOR_COUNT_FOUND=$(echo "$VALIDATOR_VMS" | grep -c . || echo "0")
|
|
if [ "$VALIDATOR_COUNT_FOUND" -lt "$VALIDATOR_COUNT" ]; then
|
|
log_error "✗ Expected $VALIDATOR_COUNT validators, found $VALIDATOR_COUNT_FOUND"
|
|
else
|
|
log_success "✓ Found $VALIDATOR_COUNT_FOUND validator VMs"
|
|
fi
|
|
|
|
# Validate sentry VMs
|
|
log_warn "Validating sentry VMs..."
|
|
SENTRY_COUNT_FOUND=$(echo "$SENTRY_VMS" | grep -c . || echo "0")
|
|
if [ "$SENTRY_COUNT_FOUND" -lt "$SENTRY_COUNT" ]; then
|
|
log_error "✗ Expected $SENTRY_COUNT sentries, found $SENTRY_COUNT_FOUND"
|
|
else
|
|
log_success "✓ Found $SENTRY_COUNT_FOUND sentry VMs"
|
|
fi
|
|
|
|
# Validate RPC VMs
|
|
log_warn "Validating RPC VMs..."
|
|
RPC_COUNT_FOUND=$(echo "$RPC_VMS" | grep -c . || echo "0")
|
|
if [ "$RPC_COUNT_FOUND" -lt "$RPC_COUNT" ]; then
|
|
log_error "✗ Expected $RPC_COUNT RPC nodes, found $RPC_COUNT_FOUND"
|
|
else
|
|
log_success "✓ Found $RPC_COUNT_FOUND RPC VMs"
|
|
fi
|
|
|
|
# Check VM status
|
|
log_warn "Checking VM status..."
|
|
for VM in $VALIDATOR_VMS $SENTRY_VMS $RPC_VMS; do
|
|
STATUS=$(az vm show --resource-group "$RESOURCE_GROUP" --name "$VM" --show-details --query "powerState" -o tsv 2>/dev/null || echo "unknown")
|
|
if [ "$STATUS" == "VM running" ]; then
|
|
log_success "✓ $VM is running"
|
|
else
|
|
log_error "✗ $VM status: $STATUS"
|
|
fi
|
|
done
|
|
|
|
# Check Besu containers
|
|
log_warn "Checking Besu containers..."
|
|
for VM in $SENTRY_VMS $RPC_VMS; do
|
|
IP=$(az vm show --resource-group "$RESOURCE_GROUP" --name "$VM" --show-details --query "publicIps" -o tsv 2>/dev/null || echo "")
|
|
if [ -n "$IP" ] && [ "$IP" != "None" ]; then
|
|
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no besuadmin@$IP "docker ps | grep -q besu" 2>/dev/null; then
|
|
log_success "✓ $VM: Besu container is running"
|
|
else
|
|
log_error "✗ $VM: Besu container is not running"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Check RPC endpoints
|
|
log_warn "Checking RPC endpoints..."
|
|
for VM in $RPC_VMS; do
|
|
IP=$(az vm show --resource-group "$RESOURCE_GROUP" --name "$VM" --show-details --query "publicIps" -o tsv 2>/dev/null || echo "")
|
|
if [ -n "$IP" ] && [ "$IP" != "None" ]; then
|
|
RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" \
|
|
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
|
|
http://$IP:8545 2>/dev/null || echo "")
|
|
if echo "$RESPONSE" | jq -e '.result' > /dev/null 2>&1; then
|
|
BLOCK_NUMBER=$(echo "$RESPONSE" | jq -r '.result')
|
|
log_success "✓ $VM: RPC endpoint responding (block: $BLOCK_NUMBER)"
|
|
else
|
|
log_error "✗ $VM: RPC endpoint not responding"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
log_success "Validation complete!"
|
|
|