使用 EOT 找不到 Terraform 供应器 local_exec 文件
Terraform provisioner local_exec file not found using EOT
我希望在 Terraform 中执行一个命令来创建需要文件的资源。
在像 command = "<COMMAND>"
.
这样的 oneliner 中使用它时,该命令可以完美执行
但是,由于命令很长,我希望使用 EOT
并创建一个带有 \
分隔符的多行命令。
现在,它不识别我需要的任何文件,但它在使用 oneliner 之前识别(下面的命令只是一个例子)。
provisioner "local-exec" {
interpreter = ["bash", "-c"]
command = <<-EOT
cat .state/test.txt
EOT
}
我抛出以下错误:
│ Error running command 'cat .state/test.txt
│ ': exit status 1. Output: cat: '.state/test.txt'$'\r': No such file or directory
当文件确实存在时?
感谢任何有助于理解的帮助。
我将在这里冒险并猜测 state
目录与您 运行 terraform 代码所在的同一目录,所以这应该是一个简单的修复:
provisioner "local-exec" {
interpreter = ["bash", "-c"]
command = <<-EOT
cat ./state/test.txt
EOT
}
或者,您可以执行以下操作:
provisioner "local-exec" {
interpreter = ["bash", "-c"]
command = <<-EOT
cat "${path.root}/state/test.txt"
EOT
}
有关使用基于 path
的变量的更多信息,请参阅 [1]。
[1] https://www.terraform.io/language/expressions/references#filesystem-and-workspace-info
我希望在 Terraform 中执行一个命令来创建需要文件的资源。
在像 command = "<COMMAND>"
.
但是,由于命令很长,我希望使用 EOT
并创建一个带有 \
分隔符的多行命令。
现在,它不识别我需要的任何文件,但它在使用 oneliner 之前识别(下面的命令只是一个例子)。
provisioner "local-exec" {
interpreter = ["bash", "-c"]
command = <<-EOT
cat .state/test.txt
EOT
}
我抛出以下错误:
│ Error running command 'cat .state/test.txt
│ ': exit status 1. Output: cat: '.state/test.txt'$'\r': No such file or directory
当文件确实存在时?
感谢任何有助于理解的帮助。
我将在这里冒险并猜测 state
目录与您 运行 terraform 代码所在的同一目录,所以这应该是一个简单的修复:
provisioner "local-exec" {
interpreter = ["bash", "-c"]
command = <<-EOT
cat ./state/test.txt
EOT
}
或者,您可以执行以下操作:
provisioner "local-exec" {
interpreter = ["bash", "-c"]
command = <<-EOT
cat "${path.root}/state/test.txt"
EOT
}
有关使用基于 path
的变量的更多信息,请参阅 [1]。
[1] https://www.terraform.io/language/expressions/references#filesystem-and-workspace-info