如何将最佳版本约束从仅一个文件集成到项目目录中的不同Terraform模块中? 即我们的Terraform项目中有3个不同的文件,应使用以下版本约束标头:
terraform {
required_version = "~> 0.13.0"
required_providers {
azurerm = "~> 2.19.0"
}
}
provider "azurerm" {
features {}
}
现在我想我可以在顶层生成一个versions.tf
并通过file命令引用该文件,例如像这样
file("../versions.tf")
这行不通,但是我对Terraform的经验还不是很丰富。是否有比将版本代码片段复制到所有3个文件中更好的方法。
答案 0 :(得分:2)
从Terraform的角度来看,每个模块都有自己的一组提供程序依赖项。想法是每个模块都描述专门兼容的提供程序版本,而不考虑其他模块可能需要什么。然后,Terraform将所有这些版本约束组合在一起,并选择与所有版本约束兼容的最新版本。
通常,仅当该模块开始使用早期版本中不可用的功能时,才需要更改该模块中提供程序的版本约束。如果其他模块仍仅使用早期版本中可用的功能,则无需更改其版本限制。
即将发布的Terraform v0.14版本(在我撰写本文时即将进入beta)将包括一种新的机制,用于生成版本“锁定”文件,您可以将其包含在版本控件中,以使Terraform记住哪个每个配置都使用每个提供程序的版本。因此,在Terraform v0.14下,不再需要在根模块上主动使用~>
约束,因为Terraform仅在使用terraform init -upgrade
明确要求时才会采用较新的版本。