3

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

我想要实现的是,仅在提供private_network时创建私有 IP 实例,并且仅在提供其值时才包含_private_network_参数。这里的问题是这个变量不接受空字符串(""),因为它验证了下面的正则表达式。.
"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_变量的值?

4

1 回答 1

11

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

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

您拥有的选项是向提供者提出拉取请求,允许您传递一个空字符串,创建第二个模块,该模块的区别仅在于它是否具有私有网络,或者等待 Terraform 0.12,它将引入null随后将产生的Terraform 核心完全忽略该参数。

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

于 2019-01-21T08:26:22.077 回答