gpt4 book ai didi

terraform - 使用 for_each 表达式时在 terraform 中出现不受支持的属性错误

转载 作者:行者123 更新时间:2023-12-04 01:04:01 24 4
gpt4 key购买 nike

使用 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com