124 lines
4.7 KiB
Terraform
124 lines
4.7 KiB
Terraform
|
|
# 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"
|
||
|
|
}
|
||
|
|
|