【问题标题】:Should .terraform.lock.hcl be included in the .gitignore file?.terraform.lock.hcl 是否应该包含在 .gitignore 文件中?
【发布时间】:2021-08-29 23:22:55
【问题描述】:

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

【问题讨论】:

  • 它应该被提交:它需要保持插件版本同步。
  • 隐私似乎是一个奇怪的标准。对我来说,.gitignore 的原因是我不想保留在 repo 中的文件(编辑器临时文件、备份、构建输出、生成的源代码)。
  • 我关心的是回购中的隐私和不需要的文件。
  • 由于我没有足够的声誉,我无法发表评论。就像zerkms 说的那样,这应该为插件同步提交。像 package.lock 一样对待它(或对其他语言类似...composer.lock、cargo-lock...)
  • 这完全基于您团队的工作流程和协作风格,以及您在提供程序版本中指定的范围。如果版本很广泛,那么您可能应该提交它。如果团队较少动手,那么您也应该提交它。这与其他语言的其他 .lock 文件背后的推理相同。

标签: terraform hcl


【解决方案1】:

根据 Dependency Lock File 上的 Terraform 文档:

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

了解为什么应该提交该文件的关键在于以下有关依赖项安装行为的部分:

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

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

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

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

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

terraform init -upgrade

【讨论】:

  • 如果您的团队中有多个人使用 mac/linux/windows 并且您尝试共享单个锁定文件github.com/hashicorp/terraform/issues/28041
  • 您在使用 Terraform Cloud 时会怎样?这种情况下就不需要了吗?
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2014-04-16
  • 2013-03-18
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多