作为后续Terraform 0.12 嵌套 for 循环 https://stackoverflow.com/questions/56047306/terraform-0-12-nested-for-loops/57280420#57280420。我试图从嵌套循环中生成一个对象,但惨败:(
您将如何制作:
Outputs:
association-list = {
"policy1" = "user1"
"policy2" = "user1"
"policy2" = "user2"
}
From:
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
}
到目前为止成功率为零。根据变化只能得到以下内容:
错误:“for”表达式无效。
“for”表达式末尾后的额外字符。
错误:缺少属性值。
需要一个属性值,由等号 (“=”) 引入。
错误:“for”表达式无效。
构建对象时需要键表达式。
错误:缺少键/值分隔符。需要等号(“=”)
标记属性值的开始。
作为参考,以下代码能够生成地图列表:
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:
关联列表 = [ {
“政策”=“政策1”
“用户”=“用户1”},{
“政策”=“政策2”
“用户”=“用户1”},{
“政策”=“政策2”
“用户” = “用户2” }, ]