如何从不同的文件夹运行 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 文件中