tf/network.tf (157 lines of code) (raw):
# Main VNET
data "azurerm_virtual_network" "azhop" {
count = local.create_vnet ? 0 : 1
name = try(split("/", local.vnet_id)[8], "foo")
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
}
resource "azurerm_virtual_network" "azhop" {
count = local.create_vnet ? 1 : 0
name = try(local.configuration_yml["network"]["vnet"]["name"], "hpcvnet")
location = local.create_rg ? azurerm_resource_group.rg[0].location : data.azurerm_resource_group.rg[0].location
resource_group_name = local.create_rg ? azurerm_resource_group.rg[0].name : data.azurerm_resource_group.rg[0].name
address_space = [try(local.configuration_yml["network"]["vnet"]["address_space"], "10.0.0.0/23")]
}
#set VNet DNS servers if using the customers AD and hub
# resource "azurerm_virtual_network_dns_servers" "customer_dns" {
# count = local.create_ad ? 0 : 1
# virtual_network_id = azurerm_virtual_network.azhop[0].id
# dns_servers = local.private_dns_servers
#}
# Resource group of the existing vnet
data "azurerm_resource_group" "rg_vnet" {
count = local.create_vnet ? 0 : 1
name = try(split("/", local.vnet_id)[4], "foo")
}
# Frontend Subnet
data "azurerm_subnet" "frontend" {
count = local.create_frontend_subnet ? 0 : 1
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["frontend"]["name"], "frontend")
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
virtual_network_name = try(split("/", local.vnet_id)[8], "foo")
}
resource "azurerm_subnet" "frontend" {
count = local.create_frontend_subnet ? 1 : 0
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["frontend"]["name"], "frontend")
virtual_network_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].name : data.azurerm_virtual_network.azhop[count.index].name
resource_group_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].resource_group_name : data.azurerm_virtual_network.azhop[count.index].resource_group_name
address_prefixes = [try(local.configuration_yml["network"]["vnet"]["subnets"]["frontend"]["address_prefixes"], "10.0.0.0/29")]
service_endpoints = local.create_nfsfiles ? ["Microsoft.Storage"] : []
}
# admin subnet
data "azurerm_subnet" "admin" {
count = local.create_admin_subnet ? 0 : 1
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["admin"]["name"], "admin")
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
virtual_network_name = try(split("/", local.vnet_id)[8], "foo")
}
resource "azurerm_subnet" "admin" {
count = local.create_admin_subnet ? 1 : 0
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["admin"]["name"], "admin")
virtual_network_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].name : data.azurerm_virtual_network.azhop[count.index].name
resource_group_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].resource_group_name : data.azurerm_virtual_network.azhop[count.index].resource_group_name
address_prefixes = [try(local.configuration_yml["network"]["vnet"]["subnets"]["admin"]["address_prefixes"], "10.0.0.16/28")]
service_endpoints = ["Microsoft.Storage", "Microsoft.KeyVault"]
}
# netapp subnet
data "azurerm_subnet" "netapp" {
count = local.create_netapp_subnet ? 0 : 1
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["netapp"]["name"], "netapp")
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
virtual_network_name = try(split("/", local.vnet_id)[8], "foo")
}
resource "azurerm_subnet" "netapp" {
count = local.create_netapp_subnet ? 1 : 0
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["netapp"]["name"], "netapp")
virtual_network_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].name : data.azurerm_virtual_network.azhop[count.index].name
resource_group_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].resource_group_name : data.azurerm_virtual_network.azhop[count.index].resource_group_name
address_prefixes = [try(local.configuration_yml["network"]["vnet"]["subnets"]["netapp"]["address_prefixes"], "10.0.0.32/28")]
delegation {
name = "netapp"
service_delegation {
name = "Microsoft.Netapp/volumes"
actions = ["Microsoft.Network/networkinterfaces/*", "Microsoft.Network/virtualNetworks/subnets/join/action"]
}
}
}
# database subnet
data "azurerm_subnet" "database" {
count = local.create_database_subnet ? 0 : (local.no_database_subnet ? 0 : 1)
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["database"]["name"], "database")
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
virtual_network_name = try(split("/", local.vnet_id)[8], "foo")
}
resource "azurerm_subnet" "database" {
count = local.create_database_subnet ? 1 : 0
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["database"]["name"], "database")
virtual_network_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].name : data.azurerm_virtual_network.azhop[count.index].name
resource_group_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].resource_group_name : data.azurerm_virtual_network.azhop[count.index].resource_group_name
address_prefixes = [try(local.configuration_yml["network"]["vnet"]["subnets"]["database"]["address_prefixes"], "10.0.0.224/28")]
delegation {
name = "database"
service_delegation {
name = "Microsoft.DBforMySQL/flexibleServers"
actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"]
}
}
}
# ad subnet
data "azurerm_subnet" "ad" {
count = local.create_ad_subnet ? 0 : (local.create_ad ? 1 : 0)
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["ad"]["name"], "ad")
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
virtual_network_name = try(split("/", local.vnet_id)[8], "foo")
}
resource "azurerm_subnet" "ad" {
count = local.create_ad_subnet ? 1 : 0
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["ad"]["name"], "ad")
virtual_network_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].name : data.azurerm_virtual_network.azhop[count.index].name
resource_group_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].resource_group_name : data.azurerm_virtual_network.azhop[count.index].resource_group_name
address_prefixes = [try(local.configuration_yml["network"]["vnet"]["subnets"]["ad"]["address_prefixes"], "10.0.0.0/29")]
}
# bastion subnet
data "azurerm_subnet" "bastion" {
count = local.create_bastion_subnet ? 0 : (local.no_bastion_subnet ? 0 : 1)
name = "AzureBastionSubnet"
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
virtual_network_name = try(split("/", local.vnet_id)[8], "foo")
}
resource "azurerm_subnet" "bastion" {
count = local.create_bastion_subnet ? (local.no_bastion_subnet ? 0 : 1) : 0
name = "AzureBastionSubnet"
virtual_network_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].name : data.azurerm_virtual_network.azhop[count.index].name
resource_group_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].resource_group_name : data.azurerm_virtual_network.azhop[count.index].resource_group_name
address_prefixes = [try(local.bastion_subnet["address_prefixes"], "10.0.0.64/26")]
}
# Gateway subnet
data "azurerm_subnet" "gateway" {
count = local.create_gateway_subnet ? 0 : (local.no_gateway_subnet ? 0 : 1)
name = "GatewaySubnet"
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
virtual_network_name = try(split("/", local.vnet_id)[8], "foo")
}
resource "azurerm_subnet" "gateway" {
count = local.create_gateway_subnet ? (local.no_gateway_subnet ? 0 : 1) : 0
name = "GatewaySubnet"
virtual_network_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].name : data.azurerm_virtual_network.azhop[count.index].name
resource_group_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].resource_group_name : data.azurerm_virtual_network.azhop[count.index].resource_group_name
address_prefixes = [try(local.gateway_subnet["address_prefixes"], "10.0.0.128/27")]
}
# compute subnet
data "azurerm_subnet" "compute" {
count = local.create_compute_subnet ? 0 : 1
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["compute"]["name"], "compute")
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
virtual_network_name = try(split("/", local.vnet_id)[8], "foo")
}
resource "azurerm_subnet" "compute" {
count = local.create_compute_subnet ? 1 : 0
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["compute"]["name"], "compute")
virtual_network_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].name : data.azurerm_virtual_network.azhop[count.index].name
resource_group_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].resource_group_name : data.azurerm_virtual_network.azhop[count.index].resource_group_name
address_prefixes = [try(local.configuration_yml["network"]["vnet"]["subnets"]["compute"]["address_prefixes"], "10.0.1.0/24")]
service_endpoints = ["Microsoft.Storage"]
}
# outbounddns subnet - if using existing AD then a resolver won't be created as part of the deployment
data "azurerm_subnet" "outbounddns" {
count = local.create_outbounddns_subnet ? 0 : (local.create_ad ? (local.no_outbounddns_subnet ? 0 : 1) : 0)
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["outbounddns"]["name"], "outbounddns")
resource_group_name = try(split("/", local.vnet_id)[4], "foo")
virtual_network_name = try(split("/", local.vnet_id)[8], "foo")
}
resource "azurerm_subnet" "outbounddns" {
count = local.create_outbounddns_subnet ? (local.no_outbounddns_subnet ? 0 : 1) : 0
name = try(local.configuration_yml["network"]["vnet"]["subnets"]["outbounddns"]["name"], "outbounddns")
virtual_network_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].name : data.azurerm_virtual_network.azhop[count.index].name
resource_group_name = local.create_vnet ? azurerm_virtual_network.azhop[count.index].resource_group_name : data.azurerm_virtual_network.azhop[count.index].resource_group_name
address_prefixes = [try(local.configuration_yml["network"]["vnet"]["subnets"]["outbounddns"]["address_prefixes"], "10.0.0.48/28")]
delegation {
name = "Microsoft.Network.dnsResolvers"
service_delegation {
name = "Microsoft.Network/dnsResolvers"
actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"]
}
}
}