【问题标题】:Terraform conditional source in MODULEMODULE 中的 Terraform 条件源
【发布时间】:2019-05-19 03:07:09
【问题描述】:

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

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

我还创建了 standard_repocustom_repo 变量,并使用相应 repos 的 URL 进行了定义(使用 git:: -- 这一切都没有条件)

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

我尝试使用重复的模块并根据 var 值进行调用,但这也不起作用(条件从未满足,即使满足):

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

【问题讨论】:

    标签: terraform


    【解决方案1】:

    this post 中描述了实现此目的的一种方法

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

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

    【讨论】:

    • 使用覆盖功能是实现此目的的最佳方式,如文章中所述。这仍然是最好的方法吗?
    【解决方案2】:

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

    【讨论】:

    • 尝试在帖子中使用链接作为超链接。
    猜你喜欢
    • 2018-01-21
    • 2017-06-11
    • 2021-09-25
    • 2020-01-31
    • 2021-08-13
    • 2021-01-12
    • 1970-01-01
    • 2021-12-18
    • 2021-08-07
    相关资源
    最近更新 更多