如何使用一个terraform版本文件versions.tf来管理多个terraform目录?

3

我正在更新我的项目,使用最新版本的terraform。 我的项目中每个terraform目录都有自己的versions.tf文件:

 terraform
 ├── s3
 │   ├── main.tf
 │   └── variables.tf
 │   └── versions.tf
 ├── pinpoint
     ├── main.tf
     └── variables.tf
     └── versions.tf

为了保持清洁并避免在每个versions.tf中重复更新版本,我想知道是否可以在项目中只有一个versions.tf文件,所有目录都可以像这样使用:
 terraform
 ├── s3
 │   ├── main.tf
 │   └── variables.tf
 ├── pinpoint
 │   ├── main.tf
 │   └── variables.tf
 │
 └── versions.tf

这可行吗?有没有办法引用另一个版本的文件?(terraform版本0.12.31)


尝试创建指向主versions.tf文件的符号链接。否则,你无法这样做。 - Marcin
1
或者你可以使用 Terragrunt。 - Marko E
这样做将会导致模块检索出现问题,因此不可能实现。 - Matt Schuchard
1个回答

2

versions.tf 的典型内容是每个特定模块所需的提供程序的描述,以及如果需要,该模块旨在支持的 Terraform 版本。

没有理由在模块之间共享这些声明,因为它们是特定于模块的:例如,一个模块可能需要比另一个模块更新的提供程序版本。对于每个模块陈述其要求并不是重复,因为尽管其中一些模块目前具有相同的要求,但这些模块应该能够独立地随时间发展而不总是同时更改其要求。

Terraform 将自动选择符合特定配置中涉及的所有模块约束条件的每个所需提供程序的最新可用版本,因此只要您的所有模块都可以达成一致意见,使用它们兼容的一个版本,就无需紧密协调它们。

请注意,required_providers 块旨在表示您的模块已知兼容的提供程序版本集。那不是选择单个提供程序版本的适当位置。Terraform 会自动记录每个提供程序的单个选定版本在依赖项锁定文件中,因此您可以将该文件检入版本控制以修复特定的版本选择,然后在想要更新该文件以选择与您的模块版本约束也兼容的新版本时运行 terraform init -upgrade

如果你真的想在多个配置之间共享一个文件,那么你可以使用操作系统提供的符号链接机制,在多个目录中让同一个文件“看起来”存在。在这种情况下,Terraform并不知道该文件被共享到所有目录中,因此它仍将每个目录视为单独的,但你可以更新实际文件,然后所有符号链接都将引用更新后的副本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接