我在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] 删除。
我来说两句