gpt4 book ai didi

amazon-web-services - 使用 Terraform 在对象内迭代列表

转载 作者:行者123 更新时间:2023-12-05 03:44:18 26 4
gpt4 key购买 nike

我正在尝试迭代一个对象列表,每个对象内部都有一个字符串列表,但我遇到了麻烦。

我尝试使用动态 block ,但收到错误消息不支持的 block 类型

我以这种方式声明我的变量:

variable "test" {
type = list(object({
name = string
nicknames = list(string)
}))

default = [
{
name = "Phoebe"
nicknames = ["Pheebs", "Phalange"]
},
{
name = "Chandler"
nicknames = ["Chanchan", "Mr. Bing"]
}
]
}

我的资源是这样的:

resource "aws_lambda_function" "test_lambda" {
for_each = {for i, v in var.teste: i => v}
name = each.value.name
nicknames = each.value.nicknames
dynamic "nicknames_list" {
for_each = [each.value.nicknames]
content {
opn = nicknames_list.value
}
}
}

如何迭代一个包含列表的对象?

最佳答案

您可以扁平化您的测试为更for_each 友好的结构:


variable "test" {
type = list(object({
name = string
nicknames = list(string)
}))

default = [
{
name = "Phoebe"
nicknames = ["Pheebs", "Phalange"]
},
{
name = "Chandler"
nicknames = ["Chanchan", "Mr. Bing"]
}
]
}


locals {

test_flat = merge([
for idx, val in var.test:
{
for name, nickname in val.nicknames:
"${idx}-${name}-${nickname}" => {
name = name
nickname = nickname
}
}
]...)
}

这将导致 test_flat

{
"0-0-Pheebs" = {
"name" = 0
"nickname" = "Pheebs"
}
"0-1-Phalange" = {
"name" = 1
"nickname" = "Phalange"
}
"1-0-Chanchan" = {
"name" = 0
"nickname" = "Chanchan"
}
"1-1-Mr. Bing" = {
"name" = 1
"nickname" = "Mr. Bing"
}
}

我不确定您想在 aws_lambda_function 中做什么,因为 nicknamesnicknames_list 等属性不正确 。但是您可以使用展平列表(仅作为示例,因为您的 aws_lambda_function 一开始就不正确)

resource "aws_lambda_function" "test_lambda" {

for_each = local.test_flat

function_name = each.value.name
# some other attribute = each.value.nickname
}

关于amazon-web-services - 使用 Terraform 在对象内迭代列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66521578/

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