【问题标题】:Conditionally ignore parameter in Terraform if its value is not provided?如果未提供其值,则有条件地忽略 Terraform 中的参数?
【发布时间】:2019-06-14 13:15:53
【问题描述】:

我正在使用 "google_sql_database_instance" 资源创建一个仅具有私有 IP 的云实例,并从变量文件或命令行参数中获取 _private_network_ 的值,或者根本没有提供任何值。

我想要实现的是,仅在提供 private_network 的情况下创建私有 IP 实例,并在提供其值的情况下包含 _private_network_ 参数only。这里的问题是这个变量不接受空字符串 (""),因为它验证了下面的正则表达式。
"projects/((?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)))/global/networks/((?:[a-z](?:[-a-z0-9]*[a-z0-9])?))$".

如何制作一个可配置的模块(仅在提供 private_network 时创建私有 IP 实例,否则完全忽略该参数)并且不强制要求 _private_network_ 变量的值?

【问题讨论】:

    标签: terraform google-cloud-sql terraform-provider-gcp


    【解决方案1】:

    解决此问题的旧方法是将空字符串 ("") 传递给参数,并且提供者会按照惯例忽略它。

    不幸的是,这并不是在所有提供者的任何地方都这样做,所以如果您由于参数验证而无法传递空字符串,那么您现在就被卡住了。

    您拥有的选项是raise a pull request for the provider 允许您传递一个空字符串,创建第二个模块,其区别仅在于它是否具有专用网络,或者等待 Terraform 0.12,introduce the null value 然后将生成 Terraform核心完全忽略该参数。

    在我看来,最后一个选项是最好的,但如果您有紧急需求(目前除了准备就绪外,目前没有 0.12 的预期发布日期),那么我现在将模块分成两部分,以便您能够实现这一点,然后您可以删除模块的私有克隆,并在 0.12 发布并升级到它时使用 null 值。

    【讨论】:

      猜你喜欢
      • 2021-07-26
      • 2021-07-12
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2019-09-14
      • 2023-03-06
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多