MODULE中的Terraform条件源

时间:2018-12-18 16:34:18

标签: terraform

我正在尝试根据条件触发器设置模块的源(这不是资源),但是看起来该模块在应用逻辑之前就被触发了:

module "my_module" {
    source   = "${var.my_field == "" ? var.standard_repo : var.custom_repo}"
    stuff...
    more stuff...
}

我还创建了standard_repocustom_repo var,并为各个存储库定义了URL(使用git:: -这都是无条件的)

所有这些,有人知道实现此条件方面的方法吗? (同样,这是一个模块,而不是资源

我尝试使用重复的模块并基于var值进行调用,但这也行不通(即使满足,条件也永远不会得到满足):

repo = ["${var.my_field == "na" ? module.my_module_old : module.my_module_new}"]

2 个答案:

答案 0 :(得分:0)

不允许在模块源参数中使用变量。似乎也没有改变这一计划。 https://github.com/hashicorp/terraform/issues/1439。创建包装器脚本或使用类似胡须http://mustache.github.io/之类的东西似乎是解决此问题的最佳方法。

答案 1 :(得分:0)

this post

中介绍了实现此目标的一种方法

基本上,一种常见的模式是为不同的环境(例如dev / tst / prd)具有多个文件夹。这些环境经常重用代码库的大部分。有些可能被抽象为模块,但是仍然经常存在一个大型的通用文件,该文件可以是复制粘贴的或符号链接的。

该帖子提供了一种不会根据变量有条件地禁用的方法,但是它可能解决了基于不同环境启用模块的问题。它使用了override feature地形,并添加了一个infra_override.tf文件。在这里,它为模块定义了一个不同的source,该模块指向一个空目录。 Voila,已禁用的模块。