Terraform:在一个文件中管理提供程序版本

时间:2020-10-12 09:16:41

标签: terraform

如何将最佳版本约束从仅一个文件集成到项目目录中的不同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个文件中更好的方法。

1 个答案:

答案 0 :(得分:2)

从Terraform的角度来看,每个模块都有自己的一组提供程序依赖项。想法是每个模块都描述专门兼容的提供程序版本,而不考虑其他模块可能需要什么。然后,Terraform将所有这些版本约束组合在一起,并选择与所有版本约束兼容的最新版本。

通常,仅当该模块开始使用早期版本中不可用的功能时,才需要更改该模块中提供程序的版本约束。如果其他模块仍仅使用早期版本中可用的功能,则无需更改其版本限制。

即将发布的Terraform v0.14版本(在我撰写本文时即将进入beta)将包括一种新的机制,用于生成版本“锁定”文件,您可以将其包含在版本控件中,以使Terraform记住哪个每个配置都使用每个提供程序的版本。因此,在Terraform v0.14下,不再需要在根模块上主动使用~>约束,因为Terraform仅在使用terraform init -upgrade明确要求时才会采用较新的版本。