根据我目前的知识,没有理由将
.terraform.lock.hcl
包含在.gitignore
中。 该文件没有任何内容是私有的,或者存在吗?
根据 Terraform 文档中的 依赖锁定文件:
Terraform 自动创建或更新依赖锁定文件 每次运行 terraform init 命令时。你应该包括这个 文件放在版本控制存储库中,以便您可以讨论 通过代码审查对外部依赖项进行潜在的更改,只需 正如您将讨论配置本身的潜在更改一样。
理解为什么应该提交该文件的关键可以在以下有关依赖项安装行为的部分中找到:
当 terraform init 正在安装所有提供程序时 配置需要,Terraform 考虑这两个版本 记录的配置和版本选择中的约束 在锁定文件中。
如果特定提供者没有现有的记录选择,Terraform 将选择与给定匹配的最新可用版本 版本约束,然后更新锁定文件以包含该约束 选择。
如果特定提供商已在锁中记录了选择 文件,Terraform 将始终重新选择该版本进行安装, 即使有新版本可用。你可以覆盖它 通过在运行 terraform init 时添加 -upgrade 选项来实现以下行为: 在这种情况下,Terraform 将忽略现有的选择,并且一旦 再次选择与版本匹配的最新可用版本 约束。
本质上,这是为了让 Terraform 继续使用您添加时选择的提供程序版本。如果您不签入锁定文件,您将始终自动升级到遵守代码约束的最新版本,这可能会导致意想不到的后果。
注意:您可以在执行 init 调用时通过传递 -upgrade 标志来强制 Terraform 升级。
terraform init -upgrade
跨平台开发更新
来自关于 providers lock 命令的 Terraform 文档:
指定目标平台 例如,在您的环境中,您可以: 让使用您的 Terraform 配置的两个开发人员都在 他们的 Windows 或 macOS 工作站以及适用的自动化系统 在 Linux 上运行时的配置。
在这种情况下,您可以选择验证您的所有 提供商支持所有这些平台,并预先填充锁 通过运行 terraformproviderslock 来生成包含必要校验和的文件 并指定这三个平台:
terraform providers lock \
-platform=windows_amd64 \
-platform=darwin_amd64 \
-platform=linux_amd64 \
-platform=darwin_arm64 \
-platform=linux_arm64
上面的示例使用 Unix 风格的 shell 包装语法以提高可读性。如果你正在跑步 Windows 上的命令,那么您需要将反斜杠替换为脱字号(对于
)或反引号(对于 PowerShell)。cmd
因此,您仍然应该将锁定文件签入版本控制,但您应该确保锁定文件包含所有平台上提供程序的校验和。
我认为上述建议仅在您的源代码控制存储库由一组同质工程师和/或单个工程师使用时才有用。在大型异构组上,它将失败并出现以下错误:
│ 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
不,您不应在 .gitignore 中包含 .terraform.lock.hcl。该文件确保 Terraform 在不同环境和团队成员中运行一致且可预测。它不包含私人信息,对于维持 Terraform 操作的稳定性至关重要。从 .gitignore 中删除它并将其提交到您的版本控制系统。
参考更多步骤
https://careerbytecode.substack.com/p/shouldterraformlockhcl-be-be-included