- 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.
214 lines
8.1 KiB
HCL
214 lines
8.1 KiB
HCL
# Multi-Region Deployment Configuration (LEGACY)
|
||
#
|
||
# IMPORTANT:
|
||
# - This file captures earlier experiments with Dv2/Dsv6/DSv3 families and a
|
||
# small set of regions.
|
||
# - The **active, quota-safe 37-region Dplsv6 design** now lives in
|
||
# `multi-region-global.tf` and is controlled via `enable_multi_region = true`
|
||
# in `terraform.tfvars`.
|
||
# - This legacy path is gated by `enable_multi_region_legacy` and should
|
||
# normally remain **false**. Treat it as historical reference only; do not
|
||
# enable it in new deployments.
|
||
|
||
|
||
locals {
|
||
# Multi-region configuration with VM family selection per region
|
||
# References: local.cloud_provider and local.env_code from locals.tf
|
||
multi_region_config = {
|
||
westeurope = {
|
||
location = "westeurope"
|
||
region_code = "we"
|
||
# Available quotas: DSv3 (4), D Family (10), Dv2 (10), Dsv6 (10), Av2 (10)
|
||
vm_families = {
|
||
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family (10 available)
|
||
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family (10 available)
|
||
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family (10 available)
|
||
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family (10 available)
|
||
}
|
||
node_count = {
|
||
system = 1 # 1 × 2 = 2 vCPUs (Dv2)
|
||
validators = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
||
sentries = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
||
rpc = 1 # 1 × 8 = 8 vCPUs (Dsv6)
|
||
}
|
||
# Total: 18 vCPUs (Dv2: 10, Dsv6: 8 - within quotas)
|
||
}
|
||
northeurope = {
|
||
location = "northeurope"
|
||
region_code = "ne"
|
||
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
||
vm_families = {
|
||
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
||
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
||
}
|
||
node_count = {
|
||
system = 1 # 1 × 2 = 2 vCPUs
|
||
validators = 1 # 1 × 4 = 4 vCPUs
|
||
sentries = 1 # 1 × 4 = 4 vCPUs
|
||
rpc = 1 # 1 × 8 = 8 vCPUs
|
||
}
|
||
# Total: 18 vCPUs
|
||
}
|
||
francecentral = {
|
||
location = "francecentral"
|
||
region_code = "fc"
|
||
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
||
vm_families = {
|
||
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
||
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
||
}
|
||
node_count = {
|
||
system = 1 # 1 × 2 = 2 vCPUs
|
||
validators = 1 # 1 × 4 = 4 vCPUs
|
||
sentries = 1 # 1 × 4 = 4 vCPUs
|
||
rpc = 1 # 1 × 8 = 8 vCPUs
|
||
}
|
||
# Total: 18 vCPUs
|
||
}
|
||
uksouth = {
|
||
location = "uksouth"
|
||
region_code = "uk"
|
||
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
||
vm_families = {
|
||
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
||
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
||
}
|
||
node_count = {
|
||
system = 1 # 1 × 2 = 2 vCPUs (Dv2)
|
||
validators = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
||
sentries = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
||
rpc = 1 # 1 × 8 = 8 vCPUs (Dsv6)
|
||
}
|
||
# Total: 18 vCPUs (Dv2: 10, Dsv6: 8 - within quotas)
|
||
}
|
||
swedencentral = {
|
||
location = "swedencentral"
|
||
region_code = "sc"
|
||
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
||
vm_families = {
|
||
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
||
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
||
}
|
||
node_count = {
|
||
system = 1 # 1 × 2 = 2 vCPUs (Dv2)
|
||
validators = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
||
sentries = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
||
rpc = 1 # 1 × 8 = 8 vCPUs (Dsv6)
|
||
}
|
||
# Total: 18 vCPUs (Dv2: 10, Dsv6: 8 - within quotas)
|
||
}
|
||
norwayeast = {
|
||
location = "norwayeast"
|
||
region_code = "no" # Using "no" to avoid conflict with northeurope "ne"
|
||
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
||
vm_families = {
|
||
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
||
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
||
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
||
}
|
||
node_count = {
|
||
system = 1 # 1 × 2 = 2 vCPUs (Dv2)
|
||
validators = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
||
sentries = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
||
rpc = 1 # 1 × 8 = 8 vCPUs (Dsv6)
|
||
}
|
||
# Total: 18 vCPUs (Dv2: 10, Dsv6: 8 - within quotas)
|
||
}
|
||
}
|
||
}
|
||
|
||
# Multi-region resource groups (LEGACY)
|
||
resource "azurerm_resource_group" "multi_region" {
|
||
for_each = var.enable_multi_region_legacy ? local.multi_region_config : {}
|
||
|
||
name = "${local.cloud_provider}-${local.env_code}-${each.value.region_code}-rg-comp-001"
|
||
location = each.value.location
|
||
|
||
tags = merge(local.common_tags, {
|
||
Region = each.value.location
|
||
Deployment = "multi-region"
|
||
})
|
||
}
|
||
|
||
# Multi-region AKS clusters (LEGACY)
|
||
module "aks_multi_region" {
|
||
for_each = var.enable_multi_region_legacy ? local.multi_region_config : {}
|
||
source = "./modules/kubernetes"
|
||
|
||
resource_group_name = azurerm_resource_group.multi_region[each.key].name
|
||
location = each.value.location
|
||
cluster_name = "${local.cloud_provider}-${local.env_code}-${each.value.region_code}-aks-main"
|
||
kubernetes_version = var.kubernetes_version
|
||
node_count = each.value.node_count
|
||
vm_size = each.value.vm_families
|
||
environment = var.environment
|
||
tags = merge(local.common_tags, {
|
||
Region = each.value.location
|
||
Deployment = "multi-region"
|
||
})
|
||
|
||
# Use existing networking or create per-region
|
||
vnet_subnet_id = module.networking_multi_region[each.key].aks_subnet_id
|
||
node_subnet_id = module.networking_multi_region[each.key].node_subnet_id
|
||
|
||
# Shared Key Vault (or per-region)
|
||
key_vault_id = module.keyvault.key_vault_id
|
||
|
||
depends_on = [
|
||
azurerm_resource_group.multi_region,
|
||
module.networking_multi_region
|
||
]
|
||
}
|
||
|
||
# Multi-region networking (LEGACY)
|
||
module "networking_multi_region" {
|
||
for_each = var.enable_multi_region_legacy ? local.multi_region_config : {}
|
||
source = "./modules/networking"
|
||
|
||
resource_group_name = azurerm_resource_group.multi_region[each.key].name
|
||
location = each.value.location
|
||
cluster_name = "${local.cloud_provider}-${local.env_code}-${each.value.region_code}-aks-main"
|
||
environment = var.environment
|
||
tags = merge(local.common_tags, {
|
||
Region = each.value.location
|
||
Deployment = "multi-region"
|
||
})
|
||
}
|
||
|
||
# Multi-region storage (LEGACY)
|
||
module "storage_multi_region" {
|
||
for_each = var.enable_multi_region_legacy ? local.multi_region_config : {}
|
||
source = "./modules/storage"
|
||
|
||
resource_group_name = azurerm_resource_group.multi_region[each.key].name
|
||
location = each.value.location
|
||
cluster_name = "${local.cloud_provider}-${local.env_code}-${each.value.region_code}-aks-main"
|
||
environment = var.environment
|
||
tags = merge(local.common_tags, {
|
||
Region = each.value.location
|
||
Deployment = "multi-region"
|
||
})
|
||
}
|
||
|
||
# Outputs for multi-region deployment (LEGACY)
|
||
output "multi_region_clusters" {
|
||
value = var.enable_multi_region_legacy ? {
|
||
for k, v in module.aks_multi_region : k => {
|
||
cluster_name = v.cluster_name
|
||
cluster_fqdn = v.cluster_fqdn
|
||
location = local.multi_region_config[k].location
|
||
}
|
||
} : {}
|
||
description = "Multi-region AKS cluster information"
|
||
}
|
||
|