Terraform 使用 for_each 为选定的子网创建 azure 子网委派

Pre*_*rem 3 terraform terraform-provider-azure

我需要一些有关在选定的天蓝色子网上创建委派的帮助。我的代码如下详细信息。

\n

我的变量文件中定义的变量

\n
variable \xe2\x80\x9csubnets\xe2\x80\x9d {\ntype = map(any)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我的 tfvar 文件包含以下值

\n
subnets = {\nmlops-aue-snt-aks = [\xe2\x80\x9c10.255.232.0/24\xe2\x80\x9d]\nmlops-aue-snt-stg = [\xe2\x80\x9c10.255.233.0/26\xe2\x80\x9d]\nmlops-aue-snt-kv = [\xe2\x80\x9c10.255.233.128/27\xe2\x80\x9d]\nAzureBastionSubnet = [\xe2\x80\x9c10.255.233.160/27\xe2\x80\x9d]\nmlops-aue-snt-shd = [\xe2\x80\x9c10.255.234.0/25\xe2\x80\x9d]\nmlops-aue-snt-db1 = [\xe2\x80\x9c10.255.235.0/26\xe2\x80\x9d]\nmlops-aue-snt-db2 = [\xe2\x80\x9c10.255.235.64/26\xe2\x80\x9d]\nmlops-aue-snt-aci = [\xe2\x80\x9c10.255.235.128/26\xe2\x80\x9d]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的子网代码

\n
resource \xe2\x80\x9cazurerm_subnet\xe2\x80\x9d \xe2\x80\x9cazr_subnet\xe2\x80\x9d {\nfor_each = var.subnets\n\nname = each.key\nresource_group_name = azurerm_resource_group.rg.name\nvirtual_network_name = azurerm_virtual_network.vnet.name\naddress_prefixes = each.value\nenforce_private_link_endpoint_network_policies = true\n}\n
Run Code Online (Sandbox Code Playgroud)\n

所有子网都是用这个创建的,一切都很好,但现在我需要为 mlops-aue-snt-db1 和 mlops-aue-snt-db2 添加 service_delegation ,而其他子网则不同。我不知道如何用我现有的代码来实现这一点。我可以\xe2\x80\x99t 从代码中分离出子网,因为它将强制删除现有子网并创建新子网,这是不推荐的。我确实阅读了一些有关使用动态块进行更改的帖子,但不确定如何根据我的要求针对选择性子网实现它。

\n

谁能建议如何在 terraform 中实现这一目标?

\n

Mar*_*cin 5

您可以通过稍微dynamic blocks改变一下来做到这一点。subnets

\n
subnets = {\n    mlops-aue-snt-aks = {\n            cidr = [\xe2\x80\x9c10.255.232.0/24\xe2\x80\x9d]\n            service_delegation = false\n    }    \n    # the rest in same format\n    mlops-aue-snt-db1 = {\n            cidr = [\xe2\x80\x9c10.255.235.0/26\xe2\x80\x9d]\n            service_delegation = true\n    }    \n    mlops-aue-snt-db2 = {\n            cidr = [\xe2\x80\x9c10.255.235.64/26\xe2\x80\x9d]\n            service_delegation = true\n    }\n    # ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

然后

\n
resource "azurerm_subnet" "azr_subnet" {\n    for_each = var.subnets\n\n    name = each.key\n    resource_group_name = azurerm_resource_group.rg.name\n    virtual_network_name = azurerm_virtual_network.vnet.name\n    address_prefixes = each.value.cidr\n    enforce_private_link_endpoint_network_policies = true\n    \n    dynamic "delegation" {\n        for_each = each.value.service_delegation == "true" ? [1] : []\n        \n        content {\n            name = "delegation"\n\n            service_delegation {\n            name    = "Microsoft.ContainerInstance/containerGroups"\n            actions = ["Microsoft.Network/virtualNetworks/subnets/join/action", "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action"]\n            }        \n        }\n    \n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n