【问题标题】:How do I run terraform init from a different folder?如何从不同的文件夹运行 terraform init?
【发布时间】:2018-04-26 17:18:23
【问题描述】:

我想为 CI/CD 编写 terraform 脚本,我不喜欢在脚本中进行 CDing,我宁愿有特定的路径。

我试过terraform init c:\my\folder\containing\tf-file

但运行时会将 .terraform 文件夹放入我的 cwd 中。

【问题讨论】:

  • 在下一个版本中将有一个可以设置的 TF_DATA_DIR 环境变量,但这不一定是它的预期目的,因为您需要确保为每个配置设置不同的想要定位。

标签: windows terraform terraform-template-file


【解决方案1】:

我知道这是一个旧线程,但是...您要查找的命令是:

terraform -chdir=environments/production apply

请看这个link for help with the global option -chdir=":

引自实际 Terraform 网站:

运行 Terraform 的常用方法是先切换到 包含根模块的 .tf 文件的目录(例如, 使用 cd 命令),以便 Terraform 找到这些文件 自动,无需任何额外参数。

但在某些情况下——尤其是在将 Terraform 包装在 自动化脚本——可以很方便地从 与根模块目录不同的目录。为了允许, Terraform 支持全局选项 -chdir=... 您可以包括 在您打算运行的子命令的名称之前:

terraform -chdir=environments/production apply chdir 选项 指示 Terraform 将其工作目录更改为给定的 运行给定子命令之前的目录。这意味着任何 Terraform 通常会在当前读取或写入的文件 工作目录将在给定目录中读取或写入 而是。

【讨论】:

    【解决方案2】:

    terraform init 命令中的[DIR] 选项告诉 terraform 从哪里处理 tf 文件,但没有告诉它在哪里存储状态文件。如果要更改本地路径状态文件的存储位置,请在 main.tf 中添加一个部分以配置后端路径。

    terraform {
      backend "local" {
        path = "relative/path/to/terraform.tfstate"
      }
    }
    

    我还没有实际尝试过,但是您可以将命令行中的路径传递为:

    -backend-config="path=/foo"
    

    【讨论】:

      【解决方案3】:

      不带选项指定目录

      terraform apply [options] ./path-to-dir
      

      或者你可以使用-chdir 选项

      terraform -chdir="./path-to-dir" apply
      

      【讨论】:

      • -chdir 的问题是它会改变所有参数的相对路径。这对于 .tf 文件和 .tfvars 文件位于不同目录的情况没有帮助
      【解决方案4】:

      默认情况下,Terraform 假定您在 terraform 文件所在的目录中运行命令,但如果您是不同的目录并且想要对位于其他位置的文件运行 terraform 命令,您可以执行以下操作:

      terraform -chdir=[path_to_dir] [command_to_run]

      例子:

      terraform -chdir=terraform/ plan
      terraform -chdir=terraform/ apply
      

      【讨论】:

        【解决方案5】:

        更新:Terraform cli 现在支持 -chdir=PATH/TO/TF_files

        https://www.terraform.io/cli/commands#switching-working-directory-with-chdir

        默认情况下,terraform init 假定工作目录已经 包含一个配置,并将尝试初始化它 配置。

        (可选)init 可以针对空目录运行 -from-module=MODULE-SOURCE 选项,在这种情况下,给定模块将在任何其他初始化之前复制到目标目录 步骤已运行。

        https://www.terraform.io/docs/commands/init.html

        【讨论】:

        • 我不认为你理解我的问题?我有一个文件夹,里面有我的 tf 文件。我不想为了运行 init 和其他 terraform 命令而必须 CD 到该目录,我想从任何地方运行 terraform 并明确指定文件夹。根据文档,我可以将一个文件夹指定为 arg,但是当我这样做时,它仍然会在 cwd 中创建 .terraform。使用 -from-module=mydir 它实际上将 tf 从 mydir dir 复制到我的 cwd
        • @red888:terraform 依赖于当前工作目录。没有办法解决这个问题。
        • 看起来这是他们应该添加的新功能。我当然希望能够这样做。
        猜你喜欢
        • 2018-05-23
        • 1970-01-01
        • 1970-01-01
        • 2012-08-09
        • 2020-03-09
        • 2017-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多