- 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.
171 lines
5.6 KiB
HCL
171 lines
5.6 KiB
HCL
# Terraform configuration for DeFi Oracle Meta Mainnet (ChainID 138)
|
|
# Azure Kubernetes Service (AKS) deployment
|
|
#
|
|
# This configuration supports both legacy single resource group deployment
|
|
# and Well-Architected Framework multi-resource-group deployment.
|
|
#
|
|
# For Well-Architected Framework deployment, use terraform/well-architected/main.tf
|
|
# See docs/AZURE_WELL_ARCHITECTED_REVIEW.md for details.
|
|
|
|
terraform {
|
|
required_version = ">= 1.0"
|
|
|
|
required_providers {
|
|
azurerm = {
|
|
source = "hashicorp/azurerm"
|
|
version = "~> 3.0"
|
|
}
|
|
kubernetes = {
|
|
source = "hashicorp/kubernetes"
|
|
version = "~> 2.0"
|
|
}
|
|
helm = {
|
|
source = "hashicorp/helm"
|
|
version = "~> 2.0"
|
|
}
|
|
}
|
|
|
|
# Backend configuration is in backend.tf (separate file)
|
|
# This prevents duplicate backend configuration errors
|
|
# Backend uses environment variables from .env file
|
|
}
|
|
|
|
provider "azurerm" {
|
|
features {
|
|
resource_group {
|
|
# Prevent accidental deletion in production
|
|
prevent_deletion_if_contains_resources = var.environment == "prod" ? true : false
|
|
}
|
|
key_vault {
|
|
# Don't purge on destroy in production
|
|
purge_soft_delete_on_destroy = var.environment == "prod" ? false : true
|
|
recover_soft_deleted_key_vaults = true
|
|
}
|
|
}
|
|
}
|
|
|
|
# Variables are defined in variables.tf
|
|
# Local values are defined in locals.tf
|
|
# This file uses the naming convention: {cloud}-{env}-{region}-{resource}-{instance}
|
|
|
|
# Resource Group (legacy single RG deployment)
|
|
resource "azurerm_resource_group" "main" {
|
|
count = var.use_well_architected ? 0 : 1
|
|
name = local.resource_group_name
|
|
location = var.location
|
|
|
|
tags = local.common_tags
|
|
}
|
|
|
|
# Network Module
|
|
module "networking" {
|
|
source = "./modules/networking"
|
|
|
|
resource_group_name = var.use_well_architected ? var.network_resource_group_name : azurerm_resource_group.main[0].name
|
|
location = var.location
|
|
cluster_name = var.cluster_name != "" ? var.cluster_name : local.aks_cluster
|
|
environment = var.environment
|
|
tags = local.common_tags
|
|
}
|
|
|
|
# Key Vault Module
|
|
# NOTE: For production, consider using the enhanced Key Vault module with RBAC and Private Endpoints
|
|
# See terraform/modules/keyvault-enhanced/ for Well-Architected Framework implementation
|
|
module "keyvault" {
|
|
source = "./modules/secrets"
|
|
|
|
resource_group_name = var.use_well_architected ? var.security_resource_group_name : azurerm_resource_group.main[0].name
|
|
location = var.location
|
|
key_vault_name = var.key_vault_name != "" ? var.key_vault_name : local.kv_secrets
|
|
environment = var.environment
|
|
tags = local.common_tags
|
|
}
|
|
|
|
# AKS Module
|
|
# NOTE: West Europe (westeurope) is admin-only - skip AKS cluster creation when multi-region is enabled
|
|
# Multi-region deployment handles all workload AKS clusters in the 36 workload regions
|
|
module "aks" {
|
|
count = var.enable_multi_region ? 0 : 1 # Skip AKS in West Europe when multi-region is enabled (admin-only)
|
|
source = "./modules/kubernetes"
|
|
|
|
resource_group_name = var.use_well_architected ? var.compute_resource_group_name : azurerm_resource_group.main[0].name
|
|
location = var.location
|
|
cluster_name = var.cluster_name != "" ? var.cluster_name : local.aks_cluster
|
|
kubernetes_version = var.kubernetes_version
|
|
node_count = var.node_count
|
|
vm_size = var.vm_size
|
|
environment = var.environment
|
|
tags = local.common_tags
|
|
|
|
vnet_subnet_id = module.networking.aks_subnet_id
|
|
node_subnet_id = module.networking.node_subnet_id
|
|
|
|
key_vault_id = module.keyvault.key_vault_id
|
|
|
|
depends_on = [
|
|
module.networking,
|
|
module.keyvault
|
|
]
|
|
}
|
|
|
|
# Storage Module
|
|
module "storage" {
|
|
source = "./modules/storage"
|
|
|
|
resource_group_name = var.use_well_architected ? var.storage_resource_group_name : azurerm_resource_group.main[0].name
|
|
location = var.location
|
|
cluster_name = var.cluster_name != "" ? var.cluster_name : local.aks_cluster
|
|
environment = var.environment
|
|
tags = local.common_tags
|
|
}
|
|
|
|
# Outputs
|
|
output "resource_group_name" {
|
|
value = var.use_well_architected ? (
|
|
var.compute_resource_group_name != "" ? var.compute_resource_group_name : "rg-${var.environment}-compute-001"
|
|
) : azurerm_resource_group.main[0].name
|
|
description = "Name of the compute resource group"
|
|
}
|
|
|
|
output "cluster_name" {
|
|
value = var.enable_multi_region ? "N/A (West Europe is admin-only, workload clusters in multi-region)" : module.aks[0].cluster_name
|
|
description = "Name of the AKS cluster (N/A when multi-region enabled - West Europe is admin-only)"
|
|
}
|
|
|
|
output "cluster_fqdn" {
|
|
value = var.enable_multi_region ? "N/A (West Europe is admin-only, workload clusters in multi-region)" : module.aks[0].cluster_fqdn
|
|
description = "FQDN of the AKS cluster (N/A when multi-region enabled - West Europe is admin-only)"
|
|
}
|
|
|
|
output "key_vault_name" {
|
|
value = module.keyvault.key_vault_name
|
|
description = "Name of the Key Vault"
|
|
}
|
|
|
|
output "key_vault_uri" {
|
|
value = module.keyvault.key_vault_uri
|
|
description = "URI of the Key Vault"
|
|
sensitive = false
|
|
}
|
|
|
|
output "application_gateway_id" {
|
|
value = module.networking.application_gateway_id
|
|
description = "ID of the Application Gateway"
|
|
}
|
|
|
|
output "kubeconfig" {
|
|
value = var.enable_multi_region ? null : module.aks[0].kubeconfig
|
|
sensitive = true
|
|
description = "Kubeconfig for the AKS cluster (null when multi-region enabled - West Europe is admin-only)"
|
|
}
|
|
|
|
output "environment" {
|
|
value = var.environment
|
|
description = "Environment name"
|
|
}
|
|
|
|
output "use_well_architected" {
|
|
value = var.use_well_architected
|
|
description = "Whether Well-Architected Framework structure is used"
|
|
}
|