使用 for_each Terraform v0.12.6 中的表达式以动态生成 vnet 子网 (Azure) 的内联块。我定义了列表变量“子网”,有两个子网“sub1”和“sub2”,如下所示
variable "subnets" {
default = [
{
name = "sub1"
prefix = "1.1.1.1/32"
},
{
name = "sub2"
prefix = "2.2.2.2/32"
},
]
}
然后迭代“azurerm_virtual_network”块内的列表变量以创建子网的动态块
dynamic "subnet" {
for_each = [for s in var.subnets : {
name = s.name
prefix = s.prefix
}]
content {
name = subnet.name
address_prefix = subnet.prefix
}
}
}
获取即第一个是 错误:不支持的属性
在 main.tf 第 42 行,在资源“azurerm_virtual_network”“vnet”中:
42:名称=子网.名称
该对象没有名为“name”的属性。
最佳答案
为 dynamic
创建的迭代器对象块有两个属性:
key
:当前元素的映射键或列表索引value
:当前元素的值在这种情况下,用于重复的集合是一个对象列表,所以
subnet.key
将是整数索引 0, 1, ... 和 subnet.value
将是与该索引关联的对象。要获得您想要的结果,您需要访问
subnet.value
上的对象属性。反而:dynamic "subnet" {
for_each = [for s in var.subnets : {
name = s.name
prefix = s.prefix
}]
content {
name = subnet.value.name
address_prefix = subnet.value.prefix
}
}
}
好像
var.subnets
已经与对象结构兼容 content
块期望,因此可以通过直接访问它来进一步简化它:dynamic "subnet" {
for_each = var.subnets
content {
name = subnet.value.name
address_prefix = subnet.value.prefix
}
}
}
只要
var.subnets
已经是一个对象列表,这应该会产生相同的结果。
关于terraform - 使用 for_each 表达式时在 terraform 中出现不受支持的属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57431301/