【问题标题】:Terraform: Manage provider versions in one fileTerraform:在一个文件中管理提供程序版本
【发布时间】:2020-10-12 09:16:41
【问题描述】:

如何将仅来自一个文件的最佳版本约束集成到项目目录中的不同 Terraform 模块中? IE。我们的 Terraform 项目中有 3 个不同的文件,它们应该使用以下版本约束头:

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

provider "azurerm" {
  features {}
}

现在我想我可以在顶层生成一个 versions.tf 并通过 file 命令引用该文件,例如像这样

file("../versions.tf")

这不起作用,但我在 Terraform 方面还不是很有经验。有没有比只将版本代码 sn-p 复制到所有 3 个文件中更好的方法。

【问题讨论】:

  • 这里的一种常见模式(也是我使用的一种模式)是在您的项目中拥有该文件一次,然后将其符号链接到您需要运行的任何地方` terraform apply` 等。

标签: terraform


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-08-29
    • 2021-09-24
    • 2021-03-29
    • 2020-08-28
    • 1970-01-01
    • 2020-08-25
    • 2021-07-24
    • 2021-09-11
    • 2021-09-11
    相关资源
    最近更新 更多