- 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.
150 lines
5.2 KiB
Bash
Executable File
150 lines
5.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Validate Deployment
|
|
# This script validates that all deployments are working correctly
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
NAMESPACE="${NAMESPACE:-besu-network}"
|
|
|
|
|
|
log_success "Validating Deployment..."
|
|
|
|
# Check namespace
|
|
log_warn "Checking namespace..."
|
|
if kubectl get namespace "$NAMESPACE" &>/dev/null; then
|
|
log_success "✓ Namespace $NAMESPACE exists"
|
|
else
|
|
log_warn "⚠ Namespace $NAMESPACE not found, creating..."
|
|
kubectl create namespace "$NAMESPACE"
|
|
fi
|
|
|
|
# Check validators
|
|
log_warn "Checking validators..."
|
|
VALIDATOR_STS=$(kubectl get statefulset besu-validator -n "$NAMESPACE" -o name 2>/dev/null || echo "")
|
|
if [ -n "$VALIDATOR_STS" ]; then
|
|
log_success "✓ Validator StatefulSet exists"
|
|
|
|
# Check replica count
|
|
DESIRED=$(kubectl get statefulset besu-validator -n "$NAMESPACE" -o jsonpath='{.spec.replicas}' 2>/dev/null || echo "0")
|
|
READY=$(kubectl get statefulset besu-validator -n "$NAMESPACE" -o jsonpath='{.status.readyReplicas}' 2>/dev/null || echo "0")
|
|
log_warn " Desired: $DESIRED, Ready: $READY"
|
|
|
|
if [ "$DESIRED" == "$READY" ] && [ "$READY" -gt 0 ]; then
|
|
log_success "✓ All validator pods are ready"
|
|
else
|
|
log_warn "⚠ Not all validator pods are ready"
|
|
fi
|
|
else
|
|
log_warn "⚠ Validator StatefulSet not found"
|
|
fi
|
|
|
|
# Check sentries
|
|
log_warn "Checking sentries..."
|
|
SENTRY_STS=$(kubectl get statefulset besu-sentry -n "$NAMESPACE" -o name 2>/dev/null || echo "")
|
|
if [ -n "$SENTRY_STS" ]; then
|
|
log_success "✓ Sentry StatefulSet exists"
|
|
|
|
DESIRED=$(kubectl get statefulset besu-sentry -n "$NAMESPACE" -o jsonpath='{.spec.replicas}' 2>/dev/null || echo "0")
|
|
READY=$(kubectl get statefulset besu-sentry -n "$NAMESPACE" -o jsonpath='{.status.readyReplicas}' 2>/dev/null || echo "0")
|
|
log_warn " Desired: $DESIRED, Ready: $READY"
|
|
|
|
if [ "$DESIRED" == "$READY" ] && [ "$READY" -gt 0 ]; then
|
|
log_success "✓ All sentry pods are ready"
|
|
else
|
|
log_warn "⚠ Not all sentry pods are ready"
|
|
fi
|
|
else
|
|
log_warn "⚠ Sentry StatefulSet not found"
|
|
fi
|
|
|
|
# Check RPC nodes
|
|
log_warn "Checking RPC nodes..."
|
|
RPC_STS=$(kubectl get statefulset besu-rpc -n "$NAMESPACE" -o name 2>/dev/null || echo "")
|
|
if [ -n "$RPC_STS" ]; then
|
|
log_success "✓ RPC StatefulSet exists"
|
|
|
|
DESIRED=$(kubectl get statefulset besu-rpc -n "$NAMESPACE" -o jsonpath='{.spec.replicas}' 2>/dev/null || echo "0")
|
|
READY=$(kubectl get statefulset besu-rpc -n "$NAMESPACE" -o jsonpath='{.status.readyReplicas}' 2>/dev/null || echo "0")
|
|
log_warn " Desired: $DESIRED, Ready: $READY"
|
|
|
|
if [ "$DESIRED" == "$READY" ] && [ "$READY" -gt 0 ]; then
|
|
log_success "✓ All RPC pods are ready"
|
|
else
|
|
log_warn "⚠ Not all RPC pods are ready"
|
|
fi
|
|
else
|
|
log_warn "⚠ RPC StatefulSet not found"
|
|
fi
|
|
|
|
# Check health checks
|
|
log_warn "Checking health checks..."
|
|
VALIDATOR_PODS=$(kubectl get pods -n "$NAMESPACE" -l component=validator -o jsonpath='{.items[0].metadata.name}' 2>/dev/null || echo "")
|
|
|
|
if [ -n "$VALIDATOR_PODS" ]; then
|
|
# Check if pod has health check probes
|
|
LIVENESS=$(kubectl get pod "$VALIDATOR_PODS" -n "$NAMESPACE" -o jsonpath='{.spec.containers[0].livenessProbe.httpGet.path}' 2>/dev/null || echo "")
|
|
READINESS=$(kubectl get pod "$VALIDATOR_PODS" -n "$NAMESPACE" -o jsonpath='{.spec.containers[0].readinessProbe.httpGet.path}' 2>/dev/null || echo "")
|
|
|
|
if [ "$LIVENESS" == "/metrics" ]; then
|
|
log_success "✓ Liveness probe is configured correctly"
|
|
else
|
|
log_warn "⚠ Liveness probe path: $LIVENESS"
|
|
fi
|
|
|
|
if [ "$READINESS" == "/metrics" ]; then
|
|
log_success "✓ Readiness probe is configured correctly"
|
|
else
|
|
log_warn "⚠ Readiness probe path: $READINESS"
|
|
fi
|
|
else
|
|
log_warn "⚠ No validator pods found for health check validation"
|
|
fi
|
|
|
|
# Test pod restart
|
|
log_warn "Testing pod restart..."
|
|
if [ -n "$VALIDATOR_PODS" ]; then
|
|
log_warn " Restarting pod: $VALIDATOR_PODS"
|
|
kubectl delete pod "$VALIDATOR_PODS" -n "$NAMESPACE" --wait=false
|
|
|
|
# Wait for pod to be ready
|
|
log_warn " Waiting for pod to be ready..."
|
|
if kubectl wait --for=condition=ready pod -l component=validator -n "$NAMESPACE" --timeout=300s 2>/dev/null; then
|
|
log_success "✓ Pod restarted successfully"
|
|
else
|
|
log_warn "⚠ Pod restart test inconclusive"
|
|
fi
|
|
else
|
|
log_warn "⚠ No pods available for restart test"
|
|
fi
|
|
|
|
# Check services
|
|
log_warn "Checking services..."
|
|
SERVICES=("besu-validator" "besu-sentry" "besu-rpc")
|
|
|
|
for svc in "${SERVICES[@]}"; do
|
|
if kubectl get service "$svc" -n "$NAMESPACE" &>/dev/null; then
|
|
log_success "✓ Service $svc exists"
|
|
else
|
|
log_warn "⚠ Service $svc not found"
|
|
fi
|
|
done
|
|
|
|
# Check ConfigMaps
|
|
log_warn "Checking ConfigMaps..."
|
|
CONFIGMAPS=("besu-validator-config" "besu-sentry-config" "besu-rpc-config")
|
|
|
|
for cm in "${CONFIGMAPS[@]}"; do
|
|
if kubectl get configmap "$cm" -n "$NAMESPACE" &>/dev/null; then
|
|
log_success "✓ ConfigMap $cm exists"
|
|
else
|
|
log_warn "⚠ ConfigMap $cm not found"
|
|
fi
|
|
done
|
|
|
|
log_success "Deployment validation completed"
|
|
|