【发布时间】:2021-11-20 02:13:03
【问题描述】:
我想覆盖具有默认值的模块变量,仅在计划时有条件地进行。 IE。当条件为真时提供覆盖,当条件为假时不提供覆盖并使用默认值。示例:
main.tf:
terraform {
required_version = ">= 0.14.9"
}
variable "random" {
}
module "my_animal_module" {
source = "./my-animal-module"
species = var.random > 7 ? "monkey" : "horse"
}
我的动物模块/main.tf:
variable species {
default = "horse"
}
resource "local_file" "animal" {
content = "${var.species}"
filename = "./animal.txt"
}
如上所述,我可以只提供默认值 (species = var.random > 7 ? "monkey" : "horse"),但这需要调用者知道模块的默认值,这会破坏封装。另一种方法是使用一些占位符作为默认值,例如“”,然后在模块中测试该条件并使用建议的 in this SO answer 不同的值。这稍微好一点,但仍然是乏味和间接的。这个 SO 答案已经超过 3 年了,从那时起,terraform 发生了很大变化。所以我想知道,有没有一种干净的方法来解决这个问题?本质上需要的是类似于dynamic blocks 的动态变量,但AFAIK 尚不存在。
【问题讨论】:
-
我已经找到答案了。
-
确实,您在问题中的链接答案是 Terraform
-
@Marcin 你的解决方案是对先前已知习语的改进,但仍然不是 100% 清楚没有更清洁的解决方案。断言没有比当地人更好的方法是我在回答中所追求的。
-
我不知道更好的方法。但也许@MartinAtkins 会知道一个。
-
spinkus:您可能希望看到 cmets 就类似的问题:stackoverflow.com/questions/69165146/…。知识渊博的 ydaetskcoR 在 cmets 中解释了您在此处要执行的操作的限制。有趣的是,在阅读我的评论后,该问题的提问者显然得出了与@Marcin 在下面提供的几乎相同的答案。总之,如果你想要更好的东西,我认为你必须等到如果/当 HCL3 存在和/或自定义 TF 函数。
标签: terraform