【问题标题】:Passing map variable to Terraform command line将地图变量传递给 Terraform 命令行
【发布时间】:2021-08-09 17:02:12
【问题描述】:

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

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

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

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

它也会去掉逗号,但这并不重要,因为我只使用 echo 进行测试,而 bash shell 上的 Terraform 计划并没有这样做。

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

terraform plan -var ip_list=$(ip_list)

【问题讨论】:

    标签: bash terraform


    【解决方案1】:

    试试这个,希望对你有帮助:

    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
    

    【讨论】:

    • 谢谢,但这比我想做的要多一点
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 2017-12-15
      • 2012-06-24
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多