将“ Provider”和“ Terraform”版本存储在单独的TF文件中?

时间:2019-04-17 21:44:18

标签: terraform provider

当前,我必须在每个Terraform模板中定义Terraform版本和Provider版本。

我想在Terraform模板之外创建一个文件,在其中可以定义用于目录结构中每个模板的Provider版本和Terraform版本。

我已经看过使用替代文件(https://www.terraform.io/docs/configuration/override.html),但看来我不得不从override.tf文件中的每个模板定义整个Terraform / Provider块。我真的很想告诉Terraform查看(伪文件)versions.tf,例如,获取每个模板的必需版本。

因此,这样的东西将是所需的(简化的)目录结构:

 terraform
     ├── dev
     │   └── main.tf
     ├── prod
     │   └── main.tf
     ├── stg
     │   └── main.tf
     └── versions.tf

现在只需要在versions.tf

中定义一个提供者版本和一个Terraform版本。

是否可以通过这种方式将Provider / Terraform版本传递到模板中?

1 个答案:

答案 0 :(得分:0)

如果您不想使用Terraform Workspaces,则在每个指向versions.tf文件的子目录中创建一个符号链接。

例如,如果您的结构是:

terraform
     ├── dev
     │   └── main.tf
     ├── prod
     │   └── main.tf
     ├── stg
     │   └── main.tf
     └── versions.tf

并且您希望每个子目录(devprodstg)指向根versions.tf目录中的terraform文件,创建一个符号链接在每个子目录中:

ln -sf terraform/versions.tf terraform/dev/versions.tf
ln -sf terraform/versions.tf terraform/prod/versions.tf
ln -sf terraform/versions.tf terraform/stg/versions.tf

您的最终结构将是:

terraform
     ├── dev
     │   └── main.tf
     │   └── versions.tf -> ../versions.tf
     ├── prod
     │   └── main.tf
     │   └── versions.tf -> ../versions.tf
     ├── stg
     │   └── main.tf
     │   └── versions.tf -> ../versions.tf
     └── versions.tf

使用Terraform工作区,而不是为您使用的每个“环境”都有一个子目录,因此只有一个目录,如:

terraform
     ├── main.tf
     └── versions.tf

以及通过执行以下操作创建的每个环境的工作区:

terraform workspace new dev

然后根据您所使用的环境,使用terraform插值来做一些不同的事情,terraform状态也分别存储在每个工作空间中。

因此,如果您想在dev环境中工作,请切换到该环境:

terraform workspace select dev