如何从不同的文件夹运行 terraform init?

Posted

技术标签:

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

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

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

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

【问题讨论】:

在下一个版本中将有一个可以设置的 TF_DATA_DIR 环境变量,但这不一定是它的预期目的,因为您需要确保为每个配置设置不同的想要定位。 【参考方案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 依赖于当前工作目录。没有办法解决这个问题。 看起来这是他们应该添加的新功能。我当然希望能够这样做。

以上是关于如何从不同的文件夹运行 terraform init?的主要内容,如果未能解决你的问题,请参考以下文章

通过 Terraform Helm 提供程序设置 grafana.ini

如何从 Terraform 输出中传递值而不将其放入 tfvars 文件中

从另一个 aws 帐户运行 terraform

如何从 terraform 状态中删除资源?

如何使用 Terraform 将文件从本地计算机复制到存储帐户

terraform-kubernetes-provider 如何从文件中创建秘密?