For loop Terraform输出对象,每个“for”资源具有多个属性?
我有一个terraform,其中一个资源是为创建的。通常,此资源的每个实例都有几个属性。目前,我有一系列用于此资源组的映射输出,但每个输出只包含一个键值对。我希望我的terraform输出包括一个地图或对象的列表或地图,其中所有属性都按资源实例分组。如果不使用For loop Terraform输出对象,每个“for”资源具有多个属性?,for-loop,terraform,terraform0.12+,For Loop,Terraform,Terraform0.12+,我有一个terraform,其中一个资源是为创建的。通常,此资源的每个实例都有几个属性。目前,我有一系列用于此资源组的映射输出,但每个输出只包含一个键值对。我希望我的terraform输出包括一个地图或对象的列表或地图,其中所有属性都按资源实例分组。如果不使用展平,如何执行此操作zipmapetc从当前输出构建它们?此示例与aws_route53_record一起使用,但这是一个通用查询: 现行代码 output "r53record_zonal_fqdn" { valu
展平
,如何执行此操作zipmap
etc从当前输出构建它们?此示例与aws_route53_record一起使用,但这是一个通用查询:
现行代码
output "r53record_zonal_fqdn" {
value = {
for entry in aws_route53_record.zonal :
entry.name => entry.fqdn
}
}
output "r53record_zonal_records" {
value = {
for entry in aws_route53_record.zonal :
entry.name => entry.records
}
}
output "r53record_zonal_zone_id" {
value = {
for entry in aws_route53_record.zonal :
entry.name => entry.zone_id
}
}
如您所料,这将渲染三个贴图,其中aws\u route53\u record.zonal.name
作为键,其他属性作为值
我希望这些输出按资源分组,每个值都有一个预定义的键,例如(伪代码):
为每个实例生成映射或映射列表
如何做到这一点或类似的事情?我创建了一个随机的route53\u记录资源块,每个循环中都有两个“name”参数,并试图输出一些接近您所寻找的内容的内容 假设“mydomain.com”是Route53中的域,例如
resource "aws_route53_record" "zonal" {
for_each=toset(["site1","site2"])
name = each.key
zone_id = "ABCDZONEIDSTRING"
type = "A"
ttl = "300"
records = ["192.168.1.10"]
}
output "test" {
value = {
for dns, details in aws_route53_record.zonal:
dns => ({"fqdn" = details.fqdn , "zone_id" = details.zone_id , "records" = details.records})
}
}
这将以这种方式创建输出
test = {
"site1" = {
"fqdn" = "site1.mydomain.com"
"records" = [
"192.168.1.10",
]
"zone_id" = "Z0630117NTQNSYTXYQ4Z"
}
"site2" = {
"fqdn" = "site2.mydomain.com"
"records" = [
"192.168.1.10",
]
"zone_id" = "Z0630117NTQNSYTXYQ4Z"
}
}
假设您通过域名传递名称值,如下所示
for_each=toset(["site1.mydomain.com","site2.mydomain.com"])
输出看起来像
test = {
"site1.mydomain.com" = {
"fqdn" = "site1.mydomain.com"
"records" = [
"192.168.1.10",
]
"zone_id" = "ABCDMYZONEIDSTRING"
}
"site2.mydomain.com" = {
"fqdn" = "site2.mydomain.com"
"records" = [
"192.168.1.10",
]
"zone_id" = "ABCDMYZONEIDSTRING"
}
}
test = {
"site1.mydomain.com" = {
"fqdn" = "site1.mydomain.com"
"records" = [
"192.168.1.10",
]
"zone_id" = "ABCDMYZONEIDSTRING"
}
"site2.mydomain.com" = {
"fqdn" = "site2.mydomain.com"
"records" = [
"192.168.1.10",
]
"zone_id" = "ABCDMYZONEIDSTRING"
}
}