![](/img/trans.png)
[英]Passing dynamic terraform variables in json using shell script
[英]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.