簡體   English   中英

Terraform不支持shell括號中的變量?

[英]Terraform doesn't support shell variables in brackets?

我正在使用 Terraform v0.13.1。 我正在嘗試使用 provisioner local-exec 在 EC2 實例上運行一些 shell 命令:

provisioner "local-exec" {
  command = <<EOF
    AWS_PROFILE=test ssh centos@<EC2 instance ID> "filename=test && touch \$filename && mv \$filename \$\{filename//t/a\}"
    EOF
}

運行 terraform apply 后出現以下錯誤信息:

null_resource.test (local-exec): Executing: ["/bin/sh" "-c" "      AWS_PROFILE=test ssh centos@<instance ID> \"filename=test && touch \\$filename && mv \\$filename \\$\\{filename//t/a\\}\"\n"]
null_resource.test (local-exec): mv: cannot move 'test' to '${filename//t/a}' : No such file or directory


Error: Error running command '      AWS_PROFILE=test ssh centos@<instance ID> "filename=test && touch \$filename && mv \$filename \$\{filename//t/a\}"
': exit status 1. Output: mv: cannot move 'test' to '${filename//t/a}' : No such file or directory

看起來 Terraform 在向美元符號添加轉義后能夠解析 $filename 變量。 但是,在我的例子中,括號中的 shell 個變量 (${filename}) 沒有被正確解析,即使我在美元符號中添加了轉義符。

我也嘗試了 $$ 和 %${ 但都沒有用。 我對此迷路了。 有人可以告訴我 Terraform 是否支持這個嗎?我做錯了什么?

以下代碼對我有用:

provisioner "local-exec" {
    interpreter = ["/bin/bash", "-c"]
    command = <<EOF
        AWS_PROFILE=test ssh centos@<instance ID> "filename=test && touch \$filename && mv \$filename \$${filename//t/a}"
      EOF
    }

基本上需要加倍初始標記並轉義美元符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM