【问题标题】:Get current working directory in terraform在 terraform 中获取当前工作目录
【发布时间】:2020-06-03 18:15:47
【问题描述】:

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

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

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

但是生成的文件是空的。

有什么建议吗?

【问题讨论】:

标签: terraform terragrunt


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 动词描述通常很有帮助
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 2010-09-18
    • 1970-01-01
    • 2012-04-12
    • 2011-06-19
    • 2021-01-18
    相关资源
    最近更新 更多