For loop Terraform输出对象,每个“for”资源具有多个属性?

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

我有一个terraform,其中一个资源是为创建的。通常,此资源的每个实例都有几个属性。目前,我有一系列用于此资源组的映射输出,但每个输出只包含一个键值对。我希望我的terraform输出包括一个地图或对象的列表或地图,其中所有属性都按资源实例分组。如果不使用
展平
,如何执行此操作
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"
       }
    }