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



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

terraform console    
{"ip_add_1"="1.1.1.1","ip_add_2"="2.2.2.2"}

这个可以工作,但是bash(用来运行plan)会删除terrraform不喜欢的语音标记:

echo {"ip_add_1"="1.1.1.1","ip_add_2"="2.2.2.2"}

它也省略了逗号,但这无关紧要,因为我只使用echo进行测试,而bash shell上的Terraform plan不这样做。

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

terraform plan -var ip_list=$(ip_list)

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

{""ip_add_1"="1.1.1.1","ip_add_2"="2.2.2.2""}

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

试试这个,希望能有所帮助:

variable "demo_var" {}
resource "null_resource" "test" {
triggers = {
always_run = timestamp()
}
provisioner "local-exec" {
command = "echo ${var.demo_var} > out.txt"
}
}
output "demo_output" {
value = null_resource.test.id
}
terraform plan -var=demo_var='{"aws":"/tmp/demo"}'

如果从导出变量中读取:

export demo_var='{"aws":"/tmp/demo_new"}'

使用:

terraform plan -var=demo_var=$demo_var

最新更新