如果没有提供其值,如何忽略Terraform中的参数?

Ami*_*dav 1 google-cloud-sql terraform terraform-provider-gcp

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

所有我想要实现的是,创建只有私有IP实例private_network提供,包括_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_变量的值?

yda*_*coR 7

旧方法是将空字符串("")传递给参数,提供程序会按惯例忽略它.

不幸的是,在所有提供商的所有地方都没有这样做,所以如果由于对参数的验证而无法传递空字符串,那么你现在就被困住了.

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

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