gpt4 book ai didi

Terraform 0.12-从嵌套的for循环生成 map /对象

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

作为Terraform 0.12 nested for loops的后续事件。我试图从嵌套循环中产生一个对象,但惨不忍睹:(

您将如何生产:

  Outputs:

association-list = {
"policy1" = "user1"
"policy2" = "user1"
"policy2" = "user2"
}

从:
iam-policy-users-map = {
"policy1" = [ "user1" ]
"policy2" = [ "user1", "user2" ]
}

我尝试了以下多种变体:
variable iam-policy-users-map {
default = {
"policy1" = [ "user1" ]
"policy2" = [ "user1", "user2" ]
}
}

locals {
association-map = merge({
for policy, users in var.iam-policy-users-map : {
for user in users : {
policy => user
}
}
})

output association-map {
value = local.association-map
}

迄今为止,成功率为零。根据变化,仅设法获得以下信息:

Error: Invalid 'for' expression. Extra characters after the end of the 'for' expression.

Error: Missing attribute value. Expected an attribute value, introduced by an equals sign ("=").

Error: Invalid 'for' expression. Key expression is required when building an object.

Error: Missing key/value separator. Expected an equals sign ("=") to mark the beginning of the attribute value.



作为引用,以下代码可以生成 map 列表:
variable iam-policy-users-map {
default = {
"policy1" = [ "user1" ]
"policy2" = [ "user1", "user2" ]
}
}

locals {
association-list = flatten([
for policy, users in var.iam-policy-users-map : [
for user in users : {
user = user
policy = policy
}
]
])
}

output association-list {
value = local.association-list
}

Outputs:

association-list = [ { "policy" = "policy1" "user" = "user1" }, { "policy" = "policy2" "user" = "user1" }, { "policy" = "policy2" "user" = "user2" }, ]

最佳答案

可以在https://github.com/hashicorp/terraform/issues/22263找到部分答案。
长话短说:首先这是一个愚蠢的尝试, map 不能包含重复的键。

但是,我仍然有兴趣了解如何从嵌套的for循环中生成 map 。参见上面的第二个代码示例,生成 map 列表。

编辑:上面链接的github问题上给出了完整的答案。

“(显然)这是一个无用的结构,但我想说明这是可能的:

locals {
association-list = {
for policy, users in var.iam-policy-users-map:
policy => { // can't have the nested for expression before the key!
for u in users:
policy => u...
}
}
}

Outputs:

association-list = {
"policy1" = {
"policy1" = [
"user1",
]
}
"policy2" = {
"policy2" = [
"user1",
"user2",
]
}
}

关于Terraform 0.12-从嵌套的for循环生成 map /对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57280623/

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