在 terraform 中获取当前工作目录

Get current working directory in terraform

我是 运行 使用 Terragrunt 的 Terraform,所以我实际上不确定调用 Terraform 的路径。

所以我试图获取当前工作目录如下:

resource null_resource "pwd" {
  triggers {
    always_run = "${uuid()}"
  }
  provisioner "local-exec" {
    command = "echo $pwd >> somefile.txt"
  }
}

但是生成的文件是空的。

有什么建议吗?

试试看 command = "echo $(pwd) > somefile.txt"

Terraform 有一个 built-in object path,其中包含 Terraform 知道的各种路径的属性:

  • path.module 是包含放置 path.module 表达式的模块的目录。
  • path.root 是包含根模块的目录。
  • path.cwd 是当前工作目录。

在编写 Terraform 模块时,我们最常希望解析相对于 模块本身 的路径,以便它是独立的,不对任何问题做出任何假设或导致对配置中任何其他模块的影响。因此 path.module 通常是正确的选择,使模块不知道它从哪里被实例化。

很少使用当前工作目录,因为这会使 Terraform 配置对其应用位置敏感,并且如果您稍后从不同目录或在不同机器上应用相同配置,可能会导致不必要的资源更改共。然而,在极少数情况下需要这样的事情,path.cwd 会做。

path.modulepath.root 都是来自 path.cwd 的相对路径,因为这最大限度地降低了无意中将有关 Terraform 运行 的系统细节引入到配置。但是,如果你 do 出于某种原因需要绝对模块路径,你可以使用 abspath,例如 abspath(path.module).