我试图使用具有可选嵌套对象的动态块来迭代资源"launchdarkly_feature_flag“变量(可能是0或2+):
variable "feature_flags" {
default = {
flag_1 = {
project_key = "project"
key = "number example"
name = "number example flag"
description = "this is a multivariate flag with number variations."
variation_type = "number"
variations = {
value = 100
}
variations = {
value = 300
}
tags = ["example"]
},
flag_2 = {
project_key = "project"
key = "boolean example"
name = "boolean example flag"
description = "this is a boolean flag"
variation_type = "boolean"
tags = ["example2"]
}
}
}我尝试过各种如何获取所有标志的场景,并且总是面临不同的问题。代码:
resource "launchdarkly_feature_flag" "ffs" {
for_each = var.feature_flag_map
project_key = each.value.project_key
key = each.value.key
name = each.value.name
description = each.value.description
variation_type = each.value.variation_type
# main problem here
dynamic variations {
for_each = lookup(each.value, "variations", {}) == {} ? {} : {
content {
value = each.value.variations.value
}
}
}
tags = each.value.tags
}你能帮个忙吗?我用的是0.14v的地形
发布于 2020-12-19 00:53:26
第一步是告诉Terraform这个变量所期望的值类型。虽然省略简单值的显式类型并让Terraform从default自动推断它是正常的,但是当数据结构如此复杂时,最好告诉Terraform您想要的是什么,因为这样您就可以避免它不正确地“猜测”,从而给出混淆的错误消息。
对于您显示的默认值,下面的类型约束看起来很合适:
variable "feature_flags" {
type = map(object({
project_key = string
key = string
name = string
description = string
variation_type = string
tags = set(string)
variations = list(object({
value = string
}))
}))
}在写出类型后,Terraform将确保任何var.feature_flags值都符合该类型约束,这意味着您可以根据这些值是否为null进行动态决策:
resource "launchdarkly_feature_flag" "ffs" {
for_each = var.feature_flags
project_key = each.value.project_key
key = each.value.key
name = each.value.name
description = each.value.description
variation_type = each.value.variation_type
tags = each.value.tags
dynamic "variations" {
for_each = each.value.variations != null ? each.value.variations : []
content {
variations.value.value
}
}
}如前所述,Terraform将要求feature_flags中的所有值都定义了所有属性,尽管调用方可以将它们设置为null以指示它们未设置。
在编写本报告时,在Terraformv0.14中,有一个将属性标记为可选属性的实验特性,它似乎一旦稳定下来,就适合这个用例。将部分或所有属性标记为optional将允许调用方省略它们,从而使Terraform自动将它们设置为null,而不是调用方必须自己显式地写出null值。
希望这个特性在v0.15中稳定下来,此时您可以返回到这里,并将optional注释添加到某些属性中,而无需更改模块的任何其他内容。
https://stackoverflow.com/questions/65357827
复制相似问题