gpt4 book ai didi

terraform - 将 "Provider"和 "Terraform"版本存储在单独的 TF 文件中?

转载 作者:行者123 更新时间:2023-12-05 04:00:57 24 4
gpt4 key购买 nike

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

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

我看过使用覆盖文件 ( https://www.terraform.io/docs/configuration/override.html ),但看来我必须从 override.tf 文件中的每个模板定义整个 Terraform/Provider block 。我真的很想告诉 Terraform 查看(伪文件)versions.tf,例如,为每个模板获取必要的版本。

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

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

现在只需要在 versions.tf 中定义一个 Provider 版本和一个 Terraform 版本

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

最佳答案

如果你不想使用Terraform Workspaces然后在每个子目录中创建一个指向 versions.tf 文件的符号链接(symbolic link)。

例如,如果您的结构是:

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

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

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 Workspaces,而不是为您正在使用的每个“环境”创建一个子目录,而是使用一个目录,例如:

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

以及您通过以下方式创建的每个环境的工作区:

terraform workspace new dev

然后,您可以使用 Terraform 插值来根据您所处的环境执行不同的操作,Terraform 状态也按工作空间单独存储。

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

terraform workspace select dev

关于terraform - 将 "Provider"和 "Terraform"版本存储在单独的 TF 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com