Terraform输出对象具有针对每个`for`资源的多个属性?

锦缎

我在terraform中使用创建了资源for通常,此资源的每个实例都有几个属性。目前,我对此资源组有一系列映射输出,但是每个映射输出仅包含一个键/值对。我希望我的terraform输出包含具有按资源实例分组的所有属性的地图或对象的列表或地图。如何做到这一点,而无需使用flatten; zipmap等从我目前的输出来构建它们?该示例与一起使用,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_route53_record.zonal.name键为键,其他属性为值的地图。

我想要的是将这些输出按资源分组,并为每个值使用预定义的键,例如:(伪代码):

output "r53record_zonal_zone_id" {
    value = {
        for entry in aws_route53_record.zonal : {
            instance[count.index] {
                "name"    = entry.name 
                "fqdn"    = entry.fqdn
                "records" = entry.records
                "zone_id" = entry.zone_id
            }
        }
    }
}

为每个实例生成一个地图或地图列表。

怎么做或类似的事情?

吉里达哈

我在for_each循环中创建了一个带有两个“名称”参数的随机route53_record资源块,并尝试输出与所需内容接近的内容。

假设“ 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"
       }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有数量的资源的Terraform输出

IF具有多个Vlookup,每个具有多个输出

创建具有多个属性的对象集

添加具有多个属性的对象

MySQL表结构:每个项目具有多个属性

过滤具有多个属性的多个数组对象

每个环境的AWS VPC,还是针对不同环境的具有多个子网的单个VPC?

如何访问每个键具有多个值的JSON对象?

在Jquery中搜索每个具有data属性的对象

我可以在单个输出变量中公开terraform资源的所有属性吗?

Terraform-具有相同aws_instance资源的多个子网

NSMutableArray 打印具有多个属性的对象数组

在JS中合并具有多个属性的对象

测试对象是否具有多个属性

具有共享类型的Typescript多个对象属性

在ajax中返回具有多个属性的对象

std :: sort具有多个属性的相等对象

使用javascript创建具有多个属性的对象数组

Powershell-具有多个属性的组对象PSObject

具有多个输出的Typedef

多个神经网络,每个神经网络一个输出还是一个具有多个输出?

从python3中具有多个属性的对象列表中提取多个属性列表

将每个键具有多个值的对象转换为 JS 中的对象数组

比较两个对象数组,其中每个数组中的对象具有不同的属性

具有多个值的数组的 JavaScript 输出显示“对象,对象”字样

具有多个入口资源对象的 Kubernetes nginx 入口控制器

在严格模式下,对象文字不能具有多个具有相同名称的属性

具有资源属性CloudFormation的UserData脚本

“针对每个”标准输出重击