Files
smom-dbis-138/terraform/vm-deployment.tf
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- 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.
2025-12-12 14:57:48 -08:00

124 lines
4.7 KiB
HCL

# VM Deployment Configuration for Besu Network
# Alternative to AKS deployment using VMs/VMSS with Docker Engine
# Variables are defined in vm-deployment-variables.tf
# Storage Account for boot diagnostics and genesis file
resource "azurerm_storage_account" "vm_storage" {
count = var.vm_deployment_enabled ? 1 : 0
name = "${var.cluster_name}vmstorage${substr(md5(var.resource_group_name), 0, 8)}"
resource_group_name = var.resource_group_name
location = var.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
tags = {
Environment = "production"
Deployment = "vm"
}
}
resource "azurerm_storage_container" "genesis" {
count = var.vm_deployment_enabled ? 1 : 0
name = "genesis"
storage_account_name = azurerm_storage_account.vm_storage[0].name
container_access_type = "private"
}
# Upload genesis file to storage
resource "azurerm_storage_blob" "genesis" {
count = var.vm_deployment_enabled ? 1 : 0
name = "genesis.json"
storage_account_name = azurerm_storage_account.vm_storage[0].name
storage_container_name = azurerm_storage_container.genesis[0].name
type = "Block"
source = "${path.module}/../config/genesis.json"
}
# VM Deployment Modules for each region
# Note: VM deployment is disabled by default (vm_deployment_enabled = false)
# The vm-deployment module expects a single node_type per module instance
# For multiple node types, create separate module instances
# Validator VMs
module "vm_deployment_validators" {
count = var.vm_deployment_enabled && contains(var.vm_regions, var.location) ? 1 : 0
source = "./modules/vm-deployment"
resource_group_name = var.resource_group_name
location = var.location
cluster_name = var.cluster_name
node_type = "validator"
node_count = var.validator_vm_count
vm_size = var.vm_size_validator
subnet_id = module.networking.validators_subnet_id
storage_account_name = azurerm_storage_account.vm_storage[0].name
key_vault_id = module.keyvault.key_vault_id
genesis_file_path = azurerm_storage_blob.genesis[0].url
network_security_group_id = module.networking.validators_nsg_id
use_scale_set = var.use_vmss
ssh_public_key = var.ssh_public_key
tags = var.tags
}
# Sentry VMs
module "vm_deployment_sentries" {
count = var.vm_deployment_enabled && contains(var.vm_regions, var.location) ? 1 : 0
source = "./modules/vm-deployment"
resource_group_name = var.resource_group_name
location = var.location
cluster_name = var.cluster_name
node_type = "sentry"
node_count = var.sentry_vm_count
vm_size = var.vm_size_sentry
subnet_id = module.networking.sentries_subnet_id
storage_account_name = azurerm_storage_account.vm_storage[0].name
key_vault_id = module.keyvault.key_vault_id
genesis_file_path = azurerm_storage_blob.genesis[0].url
network_security_group_id = module.networking.sentries_nsg_id
use_scale_set = var.use_vmss
ssh_public_key = var.ssh_public_key
tags = var.tags
}
# RPC VMs
module "vm_deployment_rpc" {
count = var.vm_deployment_enabled && contains(var.vm_regions, var.location) ? 1 : 0
source = "./modules/vm-deployment"
resource_group_name = var.resource_group_name
location = var.location
cluster_name = var.cluster_name
node_type = "rpc"
node_count = var.rpc_vm_count
vm_size = var.vm_size_rpc
subnet_id = module.networking.rpc_subnet_id
storage_account_name = azurerm_storage_account.vm_storage[0].name
key_vault_id = module.keyvault.key_vault_id
genesis_file_path = azurerm_storage_blob.genesis[0].url
network_security_group_id = module.networking.rpc_nsg_id
use_scale_set = var.use_vmss
ssh_public_key = var.ssh_public_key
tags = var.tags
}
# Additional regions can be added similarly
# module "vm_deployment_westus" { ... }
# module "vm_deployment_westeurope" { ... }
# Outputs
output "vm_storage_account_name" {
value = var.vm_deployment_enabled ? azurerm_storage_account.vm_storage[0].name : null
description = "Storage account name for VM deployment"
}
output "vm_deployment_enabled" {
value = var.vm_deployment_enabled
description = "Whether VM deployment is enabled"
}