【发布时间】:2022-01-25 06:36:09
【问题描述】:
为了简化变量定义,我将子网和属性(如安全组)分组到一个字典列表中......然后有一层字典等......(或地图/对象)
这是一个示例定义 JSON:
"subnets": [
{
"name": "inside",
"prefix": "10.248.0.0/28",
"route_table": true,
"nsg": true,
"security_group_rules": [
{
"name": "AllowAllInbound",
"properties": {
"priority": 100,
"access": "Allow",
"direction": "Inbound",
"protocol": "*",
"sourcePortRange": "*",
"destinationPortRange": "*",
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "*"
}
}
]
}
使用这个单个块,我希望能够通过循环运行以构建子网,然后使用不同的资源块构建安全组。我有各种各样的问题能够迭代这个。
我想我应该和当地人一起做点什么,这样我就可以为每个操作提取我需要的东西
在子网侧:
resource "azurerm_subnet" "subnet" {
for_each = var.subnets
name = each.value.name
resource_group_name = azurerm_resource_group.hub_network_rg.name
virtual_network_name = azurerm_virtual_network.hub_vnet.name
address_prefixes = [each.value.prefix]
}
由于变量类型的问题而无法工作:我将“子网”变量定义为:
variable "subnets" {
type = list(object({
name = string
prefix = string
route_table = bool
nsg = bool
security_group_rules = map(list(string))
}))
}
我知道 TF 是松散类型的,但它不想遍历对象,因为它遇到了其他东西。
选项: 1.将其分解为单独的元素-我将再次遇到此问题,只是规模较小。 2. 找到一种方法来创建 s local.subnets 映射和一个引用我拥有的 var.subnets 的 local.security_groups 映射。
在 #2 上寻求帮助。
类似:
locals {
subnets = for k,v in var.subnets: [
{
name = var.subnet.name
prefix = var.subnet.prefix
}
我离这里很远,但我认为这可以解决问题。我的大脑转向 Python 和列表/字典理解,但我可以弄清楚如何用 TF 做到这一点。我觉得它就在我面前,我只是无法拼凑语法。
【问题讨论】:
标签: terraform