需要通过命令行将地图传递到 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)
虽然这在 Terraform 控制台解释器中不起作用,但它确实解决了我的问题:
{"\"ip_add_1\"=\"1.1.1.1\",\"ip_add_2\"=\"2.2.2.2\""}
Run Code Online (Sandbox Code Playgroud)
双引号括号内的所有内容,然后用反斜杠转义其中的其他双引号。