我正在使用"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_变量的值?
答案 0 :(得分:5)
此方法的旧方法是将一个空字符串(""
)传递给该参数,并且提供程序将按照惯例将其忽略。
不幸的是,尚未在所有提供程序中都进行此操作,因此,如果由于对参数进行验证而无法传递空字符串,那么您将陷入困境。
您必须选择raise a pull request for the provider,以便您传递一个空字符串,创建第二个模块,该模块的区别仅在于它是否具有专用网络,或者等待Terraform 0.12来introduce the null
value然后将使Terraform核心完全忽略该参数。
在我看来,最后一个选项是最好的选择,但是如果您有紧急需要(除了准备就绪,目前没有0.12的预期发布日期),那么我现在将模块分成两部分,以使您能够完成此操作,然后可以删除模块的私有克隆,并在发布0.12并升级到该模块时使用null
值。