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

4
如何将仅有一个文件中的最佳版本限制集成到项目目录中的不同Terraform模块中?也就是说,我们的Terraform项目中有三个不同的文件,应使用以下版本限制标头:
terraform {
  required_version = "~> 0.13.0"
  required_providers {
    azurerm =  "~> 2.19.0"
  }
}

provider "azurerm" {
  features {}
}

现在我认为我可以在顶层生成一个versions.tf文件,并通过文件命令引用该文件,例如:
file("../versions.tf")

这个不起作用,但我在Terraform方面经验还不够丰富。除了将版本代码片段复制到所有三个文件中,是否有更好的方法?


1
在这里有一个常见的模式(也是我使用的模式),就是在项目中只有一个文件,然后在需要运行terraform apply等命令的地方创建符号链接。 - undefined
1个回答

5
从Terraform的角度来看,每个模块都有自己的提供程序依赖项。其想法是,每个模块描述了与其兼容的提供程序版本,而不考虑其他模块可能需要什么。 Terraform将把所有这些版本约束条件组合在一起,并选择与所有约束条件兼容的最新版本。
通常情况下,只有当模块开始使用早期版本中没有的功能时,才需要更改模块中提供程序的版本约束条件。如果其他模块仍然只使用其早期版本中可用的功能,则无需更改其版本约束条件。
即将发布的Terraform v0.14版本(在我撰写这篇文章时即将进入beta版)将包括一种新机制,可以生成一个版本“锁”文件,您可以在其中加入您的版本控制,让Terraform记住每个配置使用哪个版本的每个提供程序。在Terraform v0.14下,因此不再需要在根模块上主动使用~> 约束,因为Terraform只有在明确要求使用terraform init -upgrade 时才会采用更新版本。

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