Terraform:如何从对象列表创建地图?
Terraform: how to create a map from a list of object?
我是 Terraform 的新手。
我有两个对象列表,我想将它们合并为 terraform 中的地图:
locals {
d_streams = [for idx, item in module.website_s3_bucket : {
format("%s-%s", "s3-audit", item.name) = {
a = "b"
c = item.name
}
}
]
dev_d_streams = [for idx, item in module.website_s3_bucket : {
format("%s-%s", "s3-audit-dev", item.name) = {
g = "b"
f = item.name
}
}
]
// it will be used somewhere in the module later
test = merge(local.d_streams, local.d_streams)
}
module "website_s3_bucket" {
for_each = toset(["c1", "c2"])
source = "./modules/aws-s3-static-website-bucket"
bucket_name = "robin-test-dec-17-2019"
mytest = local.test
tags = {
Terraform = "true"
Environment = "dev"
}
}
当我运行terraform console
时,我得到以下错误:
| local.d_streams is tuple with 2 elements
Call to function "merge" failed: arguments must be maps or objects, got
"tuple".
我了解 d_streams
和 dev_d_streams
是列表,无法将它们合并为地图。
如何遍历 d_streams 和 dev_d_streams 以形成地图?
您的语法创建地图列表,而不是地图。创建地图的正确方法是:
d_streams = {for idx, item in module.website_s3_bucket :
format("%s-%s", "s3-audit", item.name) => {
a = "b"
c = item.name
}
}
dev_d_streams = {for idx, item in module.website_s3_bucket :
format("%s-%s", "s3-audit-dev", item.name) => {
g = "b"
f = item.name
}
}
我是 Terraform 的新手。
我有两个对象列表,我想将它们合并为 terraform 中的地图:
locals {
d_streams = [for idx, item in module.website_s3_bucket : {
format("%s-%s", "s3-audit", item.name) = {
a = "b"
c = item.name
}
}
]
dev_d_streams = [for idx, item in module.website_s3_bucket : {
format("%s-%s", "s3-audit-dev", item.name) = {
g = "b"
f = item.name
}
}
]
// it will be used somewhere in the module later
test = merge(local.d_streams, local.d_streams)
}
module "website_s3_bucket" {
for_each = toset(["c1", "c2"])
source = "./modules/aws-s3-static-website-bucket"
bucket_name = "robin-test-dec-17-2019"
mytest = local.test
tags = {
Terraform = "true"
Environment = "dev"
}
}
当我运行terraform console
时,我得到以下错误:
| local.d_streams is tuple with 2 elements
Call to function "merge" failed: arguments must be maps or objects, got
"tuple".
我了解 d_streams
和 dev_d_streams
是列表,无法将它们合并为地图。
如何遍历 d_streams 和 dev_d_streams 以形成地图?
您的语法创建地图列表,而不是地图。创建地图的正确方法是:
d_streams = {for idx, item in module.website_s3_bucket :
format("%s-%s", "s3-audit", item.name) => {
a = "b"
c = item.name
}
}
dev_d_streams = {for idx, item in module.website_s3_bucket :
format("%s-%s", "s3-audit-dev", item.name) => {
g = "b"
f = item.name
}
}