won*_*eak 4 terraform terraform0.12+
我正在尝试使用可能具有可选嵌套对象的动态块来迭代资源“launchdarkly_feature_flag”变量 - “variations”(可能是 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"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过各种如何获取所有标志的场景,但总是面临不同的问题。一段代码:
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
}
Run Code Online (Sandbox Code Playgroud)
你能帮忙吗?我正在使用 0.14v 的 Terraform
Mar*_*ins 12
第一步是告诉 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
}))
}))
}
Run Code Online (Sandbox Code Playgroud)
写出类型后,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
}
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,Terraform 将要求所有值都feature_flags定义了所有属性,尽管调用者可以将它们设置为 来null指示它们未设置。
在撰写本文时,Terraform v0.14 中有一个实验性功能,用于将属性标记为可选,一旦稳定,它似乎适合此用例。将部分或全部属性标记为 ,optional将允许调用者省略它们,从而导致 Terraform自动将它们设置为null,而不是调用者必须自己显式写出值null。
希望该功能在 v0.15 中稳定下来,此时您可以返回到此并将注释添加optional到某些属性,而无需更改有关模块的任何其他内容。
| 归档时间: |
|
| 查看次数: |
15997 次 |
| 最近记录: |