我正在尝试从一个有重复键的JSON文件生成Terraform资源。有什么方法可以避免重复吗?
下面是JSON示例
{
"my-ptr-zone": {
"21-10": {
"zone" : "21.10.in-addr.arpa"
},
"21-10": {
"zone" : "21.10.in-addr.arpa"
}
}
}
两把钥匙在这里是一样的。
这是资源
resource "aws_route53_zone" "my-ptr-zone" {
for_each = var.my-ptr-zone
name = each.value.zone
}
有没有办法在循环时跳过重复项?
我已经尝试避免在JSON文件中从源代码生成重复值,但这是另一个挑战。
3条答案
按热度按时间ftf50wuq1#
如果您想在Map中为每个唯一键只生成一个资源,请让Terraform生成一个键的 * 集合 *,然后循环这些键。
请考虑使用hashicorp/random提供程序的以下示例。
使用
terraform plan
进行规划,您将看到terraform只想生成一个资源。将其中一个键更改为不同的值,terraform将希望创建两个资源。
如果你对其他的唯一性感兴趣(例如,只有
zone
的唯一值),同样的方法可以被应用......生成一个你想要唯一的东西的 * 集合 *,然后在这个集合上迭代。oewdyzsn2#
一个简单的方法是在map上运行
merge
两次。JSON文件:
TF代码:
输出:
vltsax253#
Terraform的
jsondecode
函数对单个对象中重复的属性名的React是丢弃除特定名称的最后一个定义之外的所有定义。在您的问题中显示的示例中,所示JSON文档的
jsondecode
将生成以下Terraform值: