将地图变量传递给 Terraform 命令行

Guy*_*ood 7 bash terraform

需要通过命令行将地图传递到 Terraform(不想使用 var 文件或 tfvar),并且遇到 Linux 删除语音标记的问题。因此需要一些可以通过 Terraform 控制台和 bash echo 解释为地图的东西。

terraform console    
{"ip_add_1"="1.1.1.1","ip_add_2"="2.2.2.2"}
Run Code Online (Sandbox Code Playgroud)

这可行,但 bash(用于运行计划)会删除 Terraform 不喜欢的语音标记:

echo {"ip_add_1"="1.1.1.1","ip_add_2"="2.2.2.2"}
Run Code Online (Sandbox Code Playgroud)

它还会删除逗号,但这并不重要,因为我只使用 echo 进行测试,而 bash shell 上的 Terraform plan 不会这样做。

我已经尝试了 1000 种转义、单引号等变体,但找不到有效的解决方案。有关信息,我使用在 Ubuntu 代理上运行的 Azure DevOps 变量传递此信息:

terraform plan -var ip_list=$(ip_list)
Run Code Online (Sandbox Code Playgroud)

Guy*_*ood 5

虽然这在 Terraform 控制台解释器中不起作用,但它确实解决了我的问题:

{"\"ip_add_1\"=\"1.1.1.1\",\"ip_add_2\"=\"2.2.2.2\""}
Run Code Online (Sandbox Code Playgroud)

双引号括号内的所有内容,然后用反斜杠转义其中的其他双引号。