我正在尝试根据条件触发器设置模块的源(这不是资源),但是看起来该模块在应用逻辑之前就被触发了:
module "my_module" {
source = "${var.my_field == "" ? var.standard_repo : var.custom_repo}"
stuff...
more stuff...
}
我还创建了standard_repo
和custom_repo
var,并为各个存储库定义了URL(使用git::
-这都是无条件的)
所有这些,有人知道实现此条件方面的方法吗? (同样,这是一个模块,而不是资源)
我尝试使用重复的模块并基于var值进行调用,但这也行不通(即使满足,条件也永远不会得到满足):
repo = ["${var.my_field == "na" ? module.my_module_old : module.my_module_new}"]
答案 0 :(得分:0)
不允许在模块源参数中使用变量。似乎也没有改变这一计划。 https://github.com/hashicorp/terraform/issues/1439。创建包装器脚本或使用类似胡须http://mustache.github.io/之类的东西似乎是解决此问题的最佳方法。
答案 1 :(得分:0)
基本上,一种常见的模式是为不同的环境(例如dev / tst / prd)具有多个文件夹。这些环境经常重用代码库的大部分。有些可能被抽象为模块,但是仍然经常存在一个大型的通用文件,该文件可以是复制粘贴的或符号链接的。
该帖子提供了一种不会根据变量有条件地禁用的方法,但是它可能解决了基于不同环境启用模块的问题。它使用了override feature地形,并添加了一个infra_override.tf
文件。在这里,它为模块定义了一个不同的source
,该模块指向一个空目录。 Voila,已禁用的模块。