11

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

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

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

但是生成的文件是空的。

有什么建议么?

4

2 回答 2

50

Terraform 有一个内置对象path,其中包含 Terraform 知道的各种路径的属性:

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

在编写 Terraform 模块时,我们通常希望解析相对于模块本身的路径,以便它是自包含的,并且不会对配置中的任何其他模块做出任何假设或造成影响。因此path.module,通常是正确的选择,使模块与实例化的位置无关。

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

path.modulepath.root都是来自 的相对路径path.cwd,因为这样可以最大限度地降低无意中将有关正在运行 Terraform 的系统的详细信息引入配置的风险。但是,如果出于某种原因确实需要绝对模块路径,则可以abspath使用abspath(path.module).

于 2020-02-19T17:05:31.793 回答
3

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

于 2020-02-19T14:57:54.590 回答