.terraform.lock.hcl是否应包含在.gignore文件中



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

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

Terraform自动创建或更新依赖锁定文件每次运行terraform init命令时。你应该包括这个文件,以便您可以讨论通过代码审查对外部依赖项进行潜在更改正如您将讨论配置本身的潜在更改一样。

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

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

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

如果特定提供程序已在锁中记录了一个选择文件,Terraform将始终重新选择该版本进行安装,即使有新版本可用。你可以覆盖它在中运行terraform init时添加-upgrade选项的行为在这种情况下,Terraform将忽略现有的选择再次选择与版本匹配的最新可用版本限制

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

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

terraform init -upgrade

跨平台开发更新

来自提供者锁定命令的Terraform文档:

指定目标平台在您的环境中,例如,让两位开发人员在他们的Windows或macOS工作站和应用程序的自动化系统在Linux上运行时的配置。

在这种情况下,您可以选择验证提供者支持所有这些平台,并预先填充锁通过运行terraform providers lock并指定这三个平台:

terraform providers lock 
-platform=windows_amd64 
-platform=darwin_amd64 
-platform=linux_amd64 
-platform=darwin_arm64 
-platform=linux_arm64

为了可读性,上面的例子使用了Unix风格的shell包装语法。如果你正在跑步则需要将反斜杠替换为插入符号(对于cmd(或反斜杠(对于PowerShell(。

因此,您仍然应该将锁定文件检查到版本控制中,但您应该确保锁定文件包含所有平台上提供程序的校验和。

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

│ Error: Failed to install provider
│
│ 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
│ (this might be because the available checksums are for packages targeting different platforms)

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

我愿意承认我们做错了,但至少在我们的情况下,我们需要将其添加到.gitignore中,或者每次一个工程师做出承诺时,所有使用不同操作系统的工程师都会收到这个错误,并不得不再次使用terraform init

您还可以执行以下命令来建立环境中存在的平台:

terraform providers lock -platform=darwin_amd64 -platform=darwin_arm64 -platform=linux_amd64

最新更新