- 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.
186 lines
5.1 KiB
Bash
Executable File
186 lines
5.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Setup Terraform Backend Storage Account
|
|
# Creates storage account, container, and updates .env file
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
log() {
|
|
log_success "[✓] $1"
|
|
}
|
|
|
|
error() {
|
|
log_error "[✗] $1"
|
|
exit 1
|
|
}
|
|
|
|
warn() {
|
|
log_warn "[!] $1"
|
|
}
|
|
|
|
info() {
|
|
log_info "[i] $1"
|
|
}
|
|
|
|
section() {
|
|
echo
|
|
log_info "=== $1 ==="
|
|
}
|
|
|
|
section "Terraform Backend Storage Setup"
|
|
|
|
# Check Azure authentication
|
|
if ! az account show &> /dev/null; then
|
|
error "Not logged in to Azure. Run: az login"
|
|
fi
|
|
|
|
log "Azure authentication verified"
|
|
|
|
# Load existing .env if present
|
|
if [ -f "$PROJECT_ROOT/.env" ]; then
|
|
source "$PROJECT_ROOT/.env"
|
|
log ".env file loaded"
|
|
fi
|
|
|
|
# Get subscription and location
|
|
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
|
|
LOCATION="${AZURE_LOCATION:-westeurope}"
|
|
RESOURCE_GROUP="${ARM_RESOURCE_GROUP_NAME:-tfstate-rg}"
|
|
|
|
info "Subscription: $SUBSCRIPTION_ID"
|
|
info "Location: $LOCATION"
|
|
info "Resource Group: $RESOURCE_GROUP"
|
|
|
|
# Create resource group if it doesn't exist
|
|
section "Resource Group"
|
|
if az group show --name "$RESOURCE_GROUP" &> /dev/null; then
|
|
log "Resource group exists: $RESOURCE_GROUP"
|
|
else
|
|
info "Creating resource group: $RESOURCE_GROUP"
|
|
az group create \
|
|
--name "$RESOURCE_GROUP" \
|
|
--location "$LOCATION" \
|
|
--output none
|
|
log "Resource group created"
|
|
fi
|
|
|
|
# Generate storage account name (must be globally unique, 3-24 chars, lowercase alphanumeric)
|
|
STORAGE_ACCOUNT_NAME="${ARM_STORAGE_ACCOUNT_NAME:-}"
|
|
if [ -z "$STORAGE_ACCOUNT_NAME" ] || [[ "$STORAGE_ACCOUNT_NAME" == *"<random>"* ]]; then
|
|
# Generate unique name: tfstate + 8 random chars
|
|
RANDOM_SUFFIX=$(openssl rand -hex 4)
|
|
STORAGE_ACCOUNT_NAME="tfstate${RANDOM_SUFFIX}"
|
|
info "Generated storage account name: $STORAGE_ACCOUNT_NAME"
|
|
else
|
|
info "Using existing storage account name: $STORAGE_ACCOUNT_NAME"
|
|
fi
|
|
|
|
# Check if storage account exists
|
|
section "Storage Account"
|
|
if az storage account show --name "$STORAGE_ACCOUNT_NAME" --resource-group "$RESOURCE_GROUP" &> /dev/null; then
|
|
log "Storage account exists: $STORAGE_ACCOUNT_NAME"
|
|
else
|
|
info "Creating storage account: $STORAGE_ACCOUNT_NAME"
|
|
az storage account create \
|
|
--name "$STORAGE_ACCOUNT_NAME" \
|
|
--resource-group "$RESOURCE_GROUP" \
|
|
--location "$LOCATION" \
|
|
--sku Standard_LRS \
|
|
--kind StorageV2 \
|
|
--allow-blob-public-access false \
|
|
--min-tls-version TLS1_2 \
|
|
--output none
|
|
|
|
if [ $? -eq 0 ]; then
|
|
log "Storage account created"
|
|
else
|
|
error "Failed to create storage account. Name might not be unique. Try again."
|
|
fi
|
|
fi
|
|
|
|
# Get storage account key
|
|
section "Storage Account Key"
|
|
ACCESS_KEY=$(az storage account keys list \
|
|
--resource-group "$RESOURCE_GROUP" \
|
|
--account-name "$STORAGE_ACCOUNT_NAME" \
|
|
--query "[0].value" -o tsv)
|
|
|
|
if [ -z "$ACCESS_KEY" ]; then
|
|
error "Failed to retrieve storage account key"
|
|
fi
|
|
|
|
log "Storage account key retrieved"
|
|
|
|
# Create container
|
|
CONTAINER_NAME="${ARM_CONTAINER_NAME:-tfstate}"
|
|
section "Storage Container"
|
|
if az storage container show \
|
|
--name "$CONTAINER_NAME" \
|
|
--account-name "$STORAGE_ACCOUNT_NAME" \
|
|
--account-key "$ACCESS_KEY" \
|
|
&> /dev/null; then
|
|
log "Container exists: $CONTAINER_NAME"
|
|
else
|
|
info "Creating container: $CONTAINER_NAME"
|
|
az storage container create \
|
|
--name "$CONTAINER_NAME" \
|
|
--account-name "$STORAGE_ACCOUNT_NAME" \
|
|
--account-key "$ACCESS_KEY" \
|
|
--public-access off \
|
|
--output none
|
|
log "Container created"
|
|
fi
|
|
|
|
# Update .env file
|
|
section "Updating .env file"
|
|
ENV_FILE="$PROJECT_ROOT/.env"
|
|
|
|
# Backup existing .env
|
|
if [ -f "$ENV_FILE" ]; then
|
|
cp "$ENV_FILE" "${ENV_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
|
log "Backed up existing .env file"
|
|
fi
|
|
|
|
# Update or add backend variables
|
|
if grep -q "^ARM_STORAGE_ACCOUNT_NAME=" "$ENV_FILE" 2>/dev/null; then
|
|
sed -i "s|^ARM_STORAGE_ACCOUNT_NAME=.*|ARM_STORAGE_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME|" "$ENV_FILE"
|
|
else
|
|
echo "ARM_STORAGE_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME" >> "$ENV_FILE"
|
|
fi
|
|
|
|
if grep -q "^ARM_CONTAINER_NAME=" "$ENV_FILE" 2>/dev/null; then
|
|
sed -i "s|^ARM_CONTAINER_NAME=.*|ARM_CONTAINER_NAME=$CONTAINER_NAME|" "$ENV_FILE"
|
|
else
|
|
echo "ARM_CONTAINER_NAME=$CONTAINER_NAME" >> "$ENV_FILE"
|
|
fi
|
|
|
|
if grep -q "^ARM_RESOURCE_GROUP_NAME=" "$ENV_FILE" 2>/dev/null; then
|
|
sed -i "s|^ARM_RESOURCE_GROUP_NAME=.*|ARM_RESOURCE_GROUP_NAME=$RESOURCE_GROUP|" "$ENV_FILE"
|
|
else
|
|
echo "ARM_RESOURCE_GROUP_NAME=$RESOURCE_GROUP" >> "$ENV_FILE"
|
|
fi
|
|
|
|
if grep -q "^ARM_ACCESS_KEY=" "$ENV_FILE" 2>/dev/null; then
|
|
sed -i "s|^ARM_ACCESS_KEY=.*|ARM_ACCESS_KEY=$ACCESS_KEY|" "$ENV_FILE"
|
|
else
|
|
echo "ARM_ACCESS_KEY=$ACCESS_KEY" >> "$ENV_FILE"
|
|
fi
|
|
|
|
log ".env file updated with backend configuration"
|
|
|
|
section "Summary"
|
|
info "Storage Account: $STORAGE_ACCOUNT_NAME"
|
|
info "Container: $CONTAINER_NAME"
|
|
info "Resource Group: $RESOURCE_GROUP"
|
|
info "Location: $LOCATION"
|
|
log "Backend configuration complete!"
|
|
|
|
info "Next step: Run terraform init"
|
|
info " cd terraform"
|
|
info " terraform init"
|
|
|