.terraform.lock.hcl 应该包含在 .gitignore 文件中吗?

eng*_*r-x 7 terraform hcl

根据我目前的知识,没有理由.terraform.lock.hcl应该包含在.gitignore. 这个文件没有任何内容是私人的,或者有吗?

Dar*_*ton 12

根据依赖锁定文件的 Terraform 文档:

每次运行 terraform init 命令时,Terraform 都会自动创建或更新依赖项锁定文件。您应该将此文件包含在您的版本控制存储库中,以便您可以通过代码审查讨论对外部依赖项的潜在更改,就像讨论对配置本身的潜在更改一样。

理解为什么应该提交该文件的关键可以在以下有关依赖项安装行为的部分中找到:

当 terraform init 正在安装配置所需的所有提供程序时,Terraform 会考虑配置中的版本约束和锁定文件中记录的版本选择

如果特定提供程序没有现有的记录选择,Terraform 将选择与给定版本约束匹配的最新可用版本,然后更新锁定文件以包含该选择。

如果某个特定的提供者已经在锁定文件中记录了一个选择,Terraform 将始终重新选择该版本进行安装,即使有更新的版本可用。您可以通过在运行 terraform init 时添加 -upgrade 选项来覆盖该行为,在这种情况下,Terraform 将忽略现有选择并再次选择与版本约束匹配的最新可用版本。

本质上,这是为了让 Terraform 继续使用添加时选择的提供程序的版本。如果您不签入锁定文件,您将始终自动升级到遵守代码约束的最新版本,这可能会导致意想不到的后果。

注意:您可以在执行 init 调用时通过传递 -upgrade 标志来强制 Terraform 升级。

terraform init -upgrade
Run Code Online (Sandbox Code Playgroud)

  • 当您使用 Terraform Cloud 时怎么样?这种情况下是不是就不需要了? (7认同)
  • 如果团队中有多人使用 mac/linux/windows 并且您尝试共享单个锁定文件,则需要考虑一些特殊注意事项 https://github.com/hashicorp/terraform/issues/28041 (5认同)

phi*_*ero 9

我认为上述建议仅在您的源代码控制存储库由一组同质工程师和/或单个工程师使用时才有用。在大型异构组上,它将失败并出现以下错误:

\n
\xe2\x94\x82 Error: Failed to install provider\n\xe2\x94\x82\n\xe2\x94\x82 Error while installing hashicorp/null v3.1.1: the local package for registry.terraform.io/hashicorp/null 3.1.1 doesn't match any of the checksums previously recorded in the dependency lock file\n\xe2\x94\x82 (this might be because the available checksums are for packages targeting different platforms)\n
Run Code Online (Sandbox Code Playgroud)\n

要解决该错误,请删除 .terraform.lock.hcl 文件,然后重新初始化。它将为您自己的工作站重新生成文件。

\n

我愿意接受我们做错了,但至少在我们的例子中,我们需要将其添加到 .gitignore,或者每次一名工程师进行提交时,所有使用不同操作系统的工程师都会收到此错误并有再次到terraform init

\n