terraform { required_version = "~> 0.12.21" required_providers { azurerm = "~> 1.44" } } locals { linkrtbs = distinct(flatten([ for link in var.sub_links : [ for rtb in try(link.subnet.rtb, []) : { subnet = link.subnet.name route_table_name = link.subnet.rtb.name } ] ])) } resource "azurerm_subnet_route_table_association" "azsub_rtb_link" { depends_on = [var.azsub_link_depends_on] for_each = {for link in try(local.linkrtbs, []): link.subnet => link} subnet_id = data.azurerm_subnet.sub[each.value.subnet].id route_table_id = data.azurerm_route_table.rtb[each.value.route_table_name].id } locals { linknatgws = distinct(flatten([ for link in var.sub_links : [ for rtb in try(link.subnet.natgw, []) : { subnet = link.subnet.name nat_gateway_name = link.subnet.natgw.name } ] ])) } resource "azurerm_subnet_nat_gateway_association" "azsub_natgw_link" { depends_on = [var.azsub_link_depends_on] for_each = {for link in try(local.linknatgws, []): link.subnet => link} subnet_id = data.azurerm_subnet.sub[each.value.subnet].id nat_gateway_id = data.azurerm_nat_gateway.natgw[each.value.nat_gateway_name].id } locals { subnets = distinct(flatten([ for link in var.sub_links : { name = link.subnet.name virtual_network_name = link.subnet.virtual_network_name resource_group_name = link.subnet.resource_group_name } ])) } data "azurerm_subnet" "sub" { depends_on = [var.azsub_link_depends_on] for_each = {for subnet in local.subnets: subnet.name => subnet} name = each.value.name virtual_network_name = each.value.virtual_network_name resource_group_name = each.value.resource_group_name } locals { rtbs = distinct(flatten([ for link in var.sub_links : [ for rtb in try(link.subnet.rtb, []) : { name = link.subnet.rtb.name resource_group_name = link.subnet.rtb.resource_group_name } ] ])) } data "azurerm_route_table" "rtb" { depends_on = [var.azsub_link_depends_on] for_each = {for rtb in local.rtbs: rtb.name => rtb} name = each.value.name resource_group_name = each.value.resource_group_name } locals { natgws = distinct(flatten([ for link in var.sub_links : [ for rtb in try(link.subnet.natgw, []) : { name = link.natgw.name resource_group_name = link.natgw.resource_group_name } ] ])) } data "azurerm_nat_gateway" "natgw" { depends_on = [var.azsub_link_depends_on] for_each = {for natgw in local.natgws: natgw.name => natgw} name = each.value.name resource_group_name = each.value.resource_group_name }