使用 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