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

Terraform:在一个文件中管理提供程序版本,terraform,Terraform,如何将一个文件中的最佳版本约束集成到项目目录中的不同Terraform模块中? 也就是说,我们的Terraform项目中有3个不同的文件,它们应该使用以下版本约束标题: terraform { required_version = "~> 0.13.0" required_providers { azurerm = "~> 2.19.0" } } provider "azurerm" { feat

如何将一个文件中的最佳版本约束集成到项目目录中的不同Terraform模块中? 也就是说,我们的Terraform项目中有3个不同的文件,它们应该使用以下版本约束标题:

terraform {
  required_version = "~> 0.13.0"
  required_providers {
    azurerm =  "~> 2.19.0"
  }
}

provider "azurerm" {
  features {}
}
现在我想我可以在顶层生成一个
versions.tf
,并通过file命令引用该文件,例如

file("../versions.tf")

这不起作用,但我在地形方面还不是很有经验。是否有比将版本代码片段复制到所有3个文件中更好的方法。

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

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


即将发布的Terraform v0.14版本(在我写这篇文章时即将进入beta版)将包含一个新机制来生成一个版本“锁定”文件,您可以将其包含在版本控制中,以便Terraform记住每个配置使用的每个提供程序的哪个版本。因此,在Terraform v0.14下,不再需要对根模块主动使用
~>
约束,因为Terraform只有在明确要求使用
Terraform init-upgrade

时才会采用较新版本。从Terraform的角度来看,每个模块都有自己的提供者依赖项集。其思想是,每个模块都描述了它特别兼容的提供者版本,而不考虑其他模块可能需要什么。Terraform然后将所有这些版本约束组合在一起,并选择与所有这些约束兼容的最新版本

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

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

时才会采用较新的版本,这是一种常见的模式(我使用的模式)这个文件在你的项目中存在一次,然后在你需要运行“terraform apply”等的地方将其符号链接。这里的一个常见模式(我使用的模式)是在你的项目中存在一次,然后在你需要运行“terraform apply”等的地方将其符号链接。