- 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.
VM Deployment Module
This Terraform module deploys Besu nodes on Azure Virtual Machines (VMs) or Virtual Machine Scale Sets (VMSS) with Docker Engine.
Features
- Deploy validators, sentries, or RPC nodes
- Support for individual VMs or VM Scale Sets
- Multi-region deployment
- Automatic Docker installation
- Automatic Besu configuration
- Cloud-init setup
- Managed Identity for Key Vault access
- Boot diagnostics
- Network security groups
Usage
Basic Usage
module "besu_validators" {
source = "./modules/vm-deployment"
resource_group_name = "defi-oracle-mainnet-rg"
location = "eastus"
cluster_name = "defi-oracle-aks"
node_type = "validator"
node_count = 4
vm_size = "Standard_D4s_v3"
ssh_public_key = file("~/.ssh/id_rsa.pub")
subnet_id = azurerm_subnet.validators.id
storage_account_name = azurerm_storage_account.vm_storage.primary_blob_endpoint
key_vault_id = azurerm_key_vault.main.id
genesis_file_path = "https://storageaccount.blob.core.windows.net/genesis/genesis.json"
network_security_group_id = azurerm_network_security_group.validators.id
}
VM Scale Set
module "besu_rpc_vmss" {
source = "./modules/vm-deployment"
resource_group_name = "defi-oracle-mainnet-rg"
location = "eastus"
cluster_name = "defi-oracle-aks"
node_type = "rpc"
node_count = 3
vm_size = "Standard_D8s_v3"
use_scale_set = true
ssh_public_key = file("~/.ssh/id_rsa.pub")
subnet_id = azurerm_subnet.rpc.id
storage_account_name = azurerm_storage_account.vm_storage.primary_blob_endpoint
key_vault_id = azurerm_key_vault.main.id
genesis_file_path = "https://storageaccount.blob.core.windows.net/genesis/genesis.json"
network_security_group_id = azurerm_network_security_group.rpc.id
}
Variables
| Name | Description | Type | Default | Required |
|---|---|---|---|---|
| resource_group_name | Name of the resource group | string | - | yes |
| location | Azure region | string | - | yes |
| cluster_name | Name of the Besu network cluster | string | - | yes |
| node_type | Type of node (validator, sentry, rpc) | string | - | yes |
| node_count | Number of nodes | number | 1 | no |
| vm_size | VM size | string | "Standard_D4s_v3" | no |
| admin_username | Admin username for VMs | string | "besuadmin" | no |
| ssh_public_key | SSH public key for VM access | string | - | yes |
| use_scale_set | Use VM Scale Set instead of individual VMs | bool | false | no |
| subnet_id | Subnet ID for VMs | string | - | yes |
| storage_account_name | Storage account name for boot diagnostics | string | - | yes |
| key_vault_id | Key Vault ID for secrets | string | - | yes |
| genesis_file_path | Path to genesis file in storage | string | - | yes |
| network_security_group_id | Network Security Group ID | string | - | yes |
| tags | Tags for resources | map(string) | {} | no |
Outputs
| Name | Description |
|---|---|
| vm_ids | VM or VMSS IDs |
| vm_private_ips | Private IP addresses of VMs |
| vm_public_ips | Public IP addresses of VMs (sentry and RPC nodes only) |
| vm_names | VM or VMSS names |
| vmss_id | VM Scale Set ID (if using scale set) |
Requirements
- Terraform >= 1.0
- Azure Provider >= 3.0
- Azure CLI installed and configured
- SSH key pair
Examples
See terraform/vm-deployment.tf for complete examples.
Notes
- VMs are automatically configured via cloud-init
- Docker is installed automatically
- Besu is started automatically via systemd service
- Validator keys are downloaded from Key Vault using Managed Identity
- Genesis file is downloaded from Azure Storage
- Boot diagnostics are enabled
- Managed Identity is enabled for Key Vault access