19

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

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

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

4

5 回答 5

8

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

terraform -chdir=environments/production apply

请参阅此链接以获取有关全局选项 -chdir=" 的帮助

从实际的 Terraform 网站引用:

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

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

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

于 2020-12-27T18:05:29.327 回答
3

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

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

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

-backend-config="path=/foo"
于 2017-11-14T16:54:48.110 回答
3

不带选项指定目录

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

或者你可以使用-chdir选项

terraform -chdir="./path-to-dir" apply
于 2021-02-19T10:54:02.183 回答
2

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

terraform -chdir=[path_to_dir] [command_to_run]

例子:

terraform -chdir=terraform/ plan
terraform -chdir=terraform/ apply
于 2021-12-17T12:33:27.277 回答
0

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

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

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

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

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

于 2017-11-14T12:44:51.640 回答