tf/1_network/main.tf (64 lines of code) (raw):
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "=3.111.0"
}
random = {
source = "hashicorp/random"
version = "~> 3.3.0"
}
}
required_version = ">= 0.13"
}
provider "azurerm" {
skip_provider_registration = true
features {}
}
module global {
source = "../0_base/cfg"
}
module network {
source = "./cfg"
}
data "azurerm_resource_group" "core_rg" {
name = module.global.core_rg_name
}
resource azurerm_virtual_network "vnet" {
count = module.network.create_vnet ? 1 : 0
name = module.network.vnet_name
location = data.azurerm_resource_group.core_rg.location
resource_group_name = data.azurerm_resource_group.core_rg.name
address_space = [ module.network.vnet_cidr ]
}
resource "azurerm_subnet" "vnet_subnet" {
for_each = { for subnet in module.network.subnets : subnet.name => subnet
if module.network.create_vnet == true
}
name = each.value.name
address_prefixes = [each.value.cidr]
virtual_network_name = azurerm_virtual_network.vnet[0].name
resource_group_name = azurerm_virtual_network.vnet[0].resource_group_name
service_endpoints = contains(["infra", "compute", "amlfs"], each.value.key) ? ["Microsoft.Storage"] : []
dynamic "delegation" {
for_each = each.value.key == "anf" ? [1] : []
content {
name = "delegation"
service_delegation {
name = "Microsoft.Netapp/volumes"
actions = ["Microsoft.Network/networkinterfaces/*", "Microsoft.Network/virtualNetworks/subnets/join/action"]
}
}
}
}
module vpn {
source = "../modules/network/vpn"
count = module.network.create_vpn ? 1 : 0
name_prefix = module.network.vpn_prefix
resource_group_name = module.global.core_rg_name
vnet = {
name = module.network.vnet_name
rg = module.network.vnet_rg
}
depends_on = [ azurerm_subnet.vnet_subnet, azurerm_virtual_network.vnet ]
}