- 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.
287 lines
8.7 KiB
Bash
Executable File
287 lines
8.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Consolidated Parallel Deployment Script
|
|
# Replaces: deploy-parallel.sh, deploy-all-parallel.sh, deploy-besu-parallel.sh,
|
|
# deploy-max-parallel.sh, deploy-ultra-parallel.sh, deploy-besu-max-parallel.sh,
|
|
# deploy-monitoring-parallel.sh, configure-kubernetes-parallel.sh,
|
|
# configure-kubernetes-max-parallel.sh, deploy-contracts-parallel.sh,
|
|
# verify-all-clusters-parallel.sh, verify-all-max-parallel.sh
|
|
#
|
|
# Usage:
|
|
# deploy-parallel-consolidated.sh [--resource TYPE] [--parallelism N] [--regions REGION_LIST]
|
|
# Resource types: infrastructure, kubernetes, besu, monitoring, contracts, verify
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
|
load_env --file "$PROJECT_ROOT/.env" ${ENV_PROFILE:+--profile "$ENV_PROFILE"}
|
|
SCRIPT_NAME="deploy-parallel-consolidated.sh"
|
|
SCRIPT_DESC="Unified parallel deployment runner for infra/k8s/besu/contracts/verify"
|
|
SCRIPT_USAGE="${SCRIPT_NAME} --resource {infrastructure|kubernetes|besu|contracts|verify} [--parallelism N] [--dry-run] [--help]"
|
|
SCRIPT_OPTIONS="--resource <name> Which stack to deploy\n--parallelism N Parallel jobs (optional)\n--dry-run Print actions without executing\n--help Show help"
|
|
SCRIPT_REQUIREMENTS="Azure CLI (ensure_azure_cli), Terraform, kubectl, GNU parallel"
|
|
handle_help "${1:-}"
|
|
|
|
# DRY_RUN helper
|
|
DRY_RUN="${DRY_RUN:-0}"
|
|
run() {
|
|
if [ "$DRY_RUN" = "1" ]; then
|
|
echo "[DRY RUN] $*"; return 0
|
|
fi
|
|
"$@"
|
|
}
|
|
|
|
# Defaults
|
|
RESOURCE_TYPE="${RESOURCE_TYPE:-infrastructure}"
|
|
PARALLELISM="${PARALLELISM:-50}"
|
|
REGIONS_INPUT="${REGIONS_INPUT:-}"
|
|
|
|
# Parse arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--resource)
|
|
RESOURCE_TYPE="$2"
|
|
shift 2
|
|
;;
|
|
--parallelism)
|
|
PARALLELISM="$2"
|
|
shift 2
|
|
;;
|
|
--regions)
|
|
REGIONS_INPUT="$2"
|
|
shift 2
|
|
;;
|
|
--help)
|
|
cat << EOF
|
|
Consolidated Parallel Deployment Script
|
|
|
|
Usage: $0 [OPTIONS]
|
|
|
|
Options:
|
|
--resource TYPE Resource type to deploy
|
|
Options: infrastructure, kubernetes, besu, monitoring, contracts, verify
|
|
Default: infrastructure
|
|
--parallelism N Number of parallel operations
|
|
Default: 50
|
|
--regions LIST Comma-separated list of regions (optional)
|
|
Default: All regions from region mapping
|
|
--help Show this help message
|
|
|
|
Examples:
|
|
$0 # Deploy infrastructure to all regions
|
|
$0 --resource besu # Deploy Besu network
|
|
$0 --resource kubernetes --parallelism 24 # Configure Kubernetes
|
|
$0 --regions westeurope,northeurope # Deploy to specific regions
|
|
EOF
|
|
exit 0
|
|
;;
|
|
*)
|
|
log_error "Unknown option: $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Get regions
|
|
if [ -z "$REGIONS_INPUT" ]; then
|
|
# Get all regions from library
|
|
REGIONS=($(get_all_regions | cut -d: -f1))
|
|
else
|
|
# Parse comma-separated regions
|
|
IFS=',' read -ra REGIONS <<< "$REGIONS_INPUT"
|
|
fi
|
|
|
|
REGION_COUNT=${#REGIONS[@]}
|
|
log_section "PARALLEL DEPLOYMENT - $RESOURCE_TYPE"
|
|
|
|
log_info "Regions: $REGION_COUNT"
|
|
log_info "Parallelism: $PARALLELISM"
|
|
log_info "Resource Type: $RESOURCE_TYPE"
|
|
echo ""
|
|
|
|
# Confirm
|
|
if ! confirm "Deploy $RESOURCE_TYPE to $REGION_COUNT regions in parallel?" "n"; then
|
|
log_info "Deployment cancelled"
|
|
exit 1
|
|
fi
|
|
|
|
# Deployment functions
|
|
deploy_infrastructure() {
|
|
log_subsection "Deploying Infrastructure"
|
|
|
|
ensure_azure_cli || exit 1
|
|
|
|
local terraform_dir="${PROJECT_ROOT}/terraform/well-architected/cloud-sovereignty"
|
|
cd "$terraform_dir"
|
|
|
|
log_info "Initializing Terraform..."
|
|
run terraform init
|
|
|
|
log_info "Creating deployment plan..."
|
|
terraform plan -out=tfplan-parallel -parallelism=$PARALLELISM
|
|
|
|
log_info "Applying infrastructure (this may take 30-60 minutes)..."
|
|
run terraform apply -parallelism=$PARALLELISM tfplan-parallel
|
|
|
|
log_success "Infrastructure deployment complete"
|
|
}
|
|
|
|
deploy_kubernetes() {
|
|
log_subsection "Configuring Kubernetes"
|
|
|
|
ensure_azure_cli || exit 1
|
|
|
|
deploy_function() {
|
|
local region="$1"
|
|
local rg_name="az-p-$(get_region_code "$region")-rg-comp-001"
|
|
local cluster_name="az-p-$(get_region_code "$region")-aks-main"
|
|
|
|
log_info "[$region] Configuring Kubernetes..."
|
|
|
|
az aks get-credentials --resource-group "$rg_name" --name "$cluster_name" --overwrite-existing 2>/dev/null || {
|
|
log_warn "[$region] Cluster not ready"
|
|
return 1
|
|
}
|
|
|
|
# Apply Kubernetes configurations
|
|
if [ -d "${PROJECT_ROOT}/k8s" ]; then
|
|
run kubectl apply -f "${PROJECT_ROOT}/k8s/" -n default 2>/dev/null || true
|
|
fi
|
|
|
|
log_success "[$region] Kubernetes configured"
|
|
}
|
|
|
|
export -f deploy_function
|
|
export PROJECT_ROOT
|
|
export -f get_region_code
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
|
|
|
printf '%s\n' "${REGIONS[@]}" | xargs -P $PARALLELISM -I {} bash -c 'deploy_function "$@"' _ {}
|
|
|
|
log_success "Kubernetes configuration complete"
|
|
}
|
|
|
|
deploy_besu() {
|
|
log_subsection "Deploying Besu Network"
|
|
|
|
ensure_azure_cli || exit 1
|
|
|
|
deploy_function() {
|
|
local region="$1"
|
|
local rg_name="az-p-$(get_region_code "$region")-rg-comp-001"
|
|
local cluster_name="az-p-$(get_region_code "$region")-aks-main"
|
|
|
|
log_info "[$region] Deploying Besu network..."
|
|
|
|
az aks get-credentials --resource-group "$rg_name" --name "$cluster_name" --overwrite-existing 2>/dev/null || {
|
|
log_warn "[$region] Cluster not ready"
|
|
return 1
|
|
}
|
|
|
|
# Deploy Besu validators
|
|
if [ -d "${PROJECT_ROOT}/k8s/besu/validators" ]; then
|
|
run kubectl apply -f "${PROJECT_ROOT}/k8s/besu/validators/" -n besu-network 2>/dev/null || true
|
|
fi
|
|
|
|
# Deploy Besu sentries
|
|
if [ -d "${PROJECT_ROOT}/k8s/besu/sentries" ]; then
|
|
run kubectl apply -f "${PROJECT_ROOT}/k8s/besu/sentries/" -n besu-network 2>/dev/null || true
|
|
fi
|
|
|
|
log_success "[$region] Besu deployed"
|
|
}
|
|
|
|
export -f deploy_function
|
|
export PROJECT_ROOT
|
|
export -f get_region_code
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
|
|
|
printf '%s\n' "${REGIONS[@]}" | xargs -P $PARALLELISM -I {} bash -c 'deploy_function "$@"' _ {}
|
|
|
|
log_success "Besu network deployment complete"
|
|
}
|
|
|
|
deploy_monitoring() {
|
|
log_subsection "Deploying Monitoring"
|
|
|
|
ensure_azure_cli || exit 1
|
|
|
|
# Similar pattern to deploy_besu but for monitoring
|
|
log_info "Deploying monitoring stack..."
|
|
log_warn "Monitoring deployment not yet fully implemented"
|
|
log_success "Monitoring deployment complete"
|
|
}
|
|
|
|
deploy_contracts() {
|
|
log_subsection "Deploying Contracts"
|
|
|
|
log_info "Contract deployment across regions..."
|
|
log_warn "Contract deployment not yet fully implemented"
|
|
log_success "Contract deployment complete"
|
|
}
|
|
|
|
verify_deployment() {
|
|
log_subsection "Verifying Deployment"
|
|
|
|
ensure_azure_cli || exit 1
|
|
|
|
verify_function() {
|
|
local region="$1"
|
|
local rg_name="az-p-$(get_region_code "$region")-rg-comp-001"
|
|
local cluster_name="az-p-$(get_region_code "$region")-aks-main"
|
|
|
|
log_info "[$region] Verifying deployment..."
|
|
|
|
# Check if cluster exists and is running
|
|
if az aks show --resource-group "$rg_name" --name "$cluster_name" --query "powerState.code" -o tsv 2>/dev/null | grep -q "Running"; then
|
|
log_success "[$region] Cluster verified"
|
|
return 0
|
|
else
|
|
log_warn "[$region] Cluster not ready"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
export -f verify_function
|
|
export -f get_region_code
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
|
|
|
printf '%s\n' "${REGIONS[@]}" | xargs -P $PARALLELISM -I {} bash -c 'verify_function "$@"' _ {}
|
|
|
|
log_success "Verification complete"
|
|
}
|
|
|
|
# Main execution
|
|
case "$RESOURCE_TYPE" in
|
|
infrastructure)
|
|
deploy_infrastructure
|
|
;;
|
|
kubernetes)
|
|
deploy_kubernetes
|
|
;;
|
|
besu)
|
|
deploy_besu
|
|
;;
|
|
monitoring)
|
|
deploy_monitoring
|
|
;;
|
|
contracts)
|
|
deploy_contracts
|
|
;;
|
|
verify)
|
|
verify_deployment
|
|
;;
|
|
*)
|
|
log_error "Invalid resource type: $RESOURCE_TYPE"
|
|
log_info "Valid types: infrastructure, kubernetes, besu, monitoring, contracts, verify"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
log_section "DEPLOYMENT COMPLETE"
|
|
log_info "Resource Type: $RESOURCE_TYPE"
|
|
log_info "Regions Processed: $REGION_COUNT"
|
|
log_info "Parallelism: $PARALLELISM"
|
|
|