我使用.terraform-version
文件来选择应该将哪个版本的 Terraform 用于特定的目录树。 我经常对.terraform-version
的内容使用正则表达式方法。 如有必要,我将运行tfenv install
以在我的系统上获取适当的 Terraform 版本(如果它不存在)。 但是,这样做时,tfenv 会使用已安装的确切版本号覆盖我的.terraform-version
文件。
$ echo "latest:^0.12" > .terraform-version
$ tfenv install
....
$ terraform version
Terraform v0.12.6
$ cat .terraform-version
0.12.6
我希望.terraform-version
的内容保持不变,除非我特别改变它。
这是令人担忧的。 会尽快调查
这似乎来自tfenv-install
末尾对tfenv-use
的tfenv-use
覆盖了版本文件。
在我看来,安装时不需要调用tfenv-use
,因为只有全局版本文件应该更新,而且只有在全局版本文件不存在的情况下才应该更新。
@e-nomem 这似乎确实是问题所在。 鉴于我如何使用 tfenv,我认为可以避免在tfenv-install
末尾调用tfenv-use
tfenv-install
。 仅仅因为我安装了一个 Terraform 版本,并不意味着我想立即使用它,或者将它作为我的全局默认版本。
但是,如果您可以配置此行为,那就太好了。 例如:
## Default, use version file
$ tfenv install
(just installs version from file, no tfenv-use required)
$ tfenv install 0.12.6
(just installs, but when detecting an interactive shell, it asks what you want)
Do you want to set Terraform 0.12.6 as your global default (y/n)? y
Updating global version in /Users/benny/.terraform-version... done
$ tfenv install 0.12.6 --global
(installs and sets the default)
我绝对想要一种至少关闭覆盖的方法,即使它是一个 shell 变量。 我们正在推出一系列从 tf 0.11 到 0.12 的复杂升级,我们希望通常跟踪最新的 0.12,但是每当有人从 CI 外部运行tfenv install
,.terraform-version 就会更新为特定版本就像在此样品中。 如果人们真的使用覆盖,我不会破坏tfenv install
的现有功能,但是如果我们可以通过设置像 TFENV_NOOVERWRITE 这样的东西来关闭它,我会很高兴。
覆盖特定于项目的.terraform-version
文件几乎会使文件的使用变得无用,并且还会冒着有人无意中将更改提交到源代码管理的风险。 我们使用 repo 中的文件来 _fix_ 用于项目的版本,因此用tfenv
命令覆盖它是相当有问题的。
我同意 tfenv 使用不应修改 .terraform-version 文件。
阻止它这样做可能会使发出 tfenv 的用户感到困惑,然后因为他们有版本文件而无法获得他们要求的版本。
我欢迎关于改善用户体验的想法,但停止覆盖肯定是正确的。
我不确定您在寻找什么样的想法,但在我看来, tfenv
应该_永远_不要写入该文件,即使它不存在。 它应该将该文件视为_只读_。 由tfenv
的 _users_ 创建该文件(如果他们愿意的话),然后如果他们想将 Terraform 的固定版本用于他们的项目,则将其提交到他们自己的存储库中。
当命令行上没有明确指定版本时, tfenv install
和tfenv use
命令应该查找.terraform-version
文件。 如果文件存在,命令应该使用它来确定要与命令一起使用的版本,如果不存在,命令应该失败,指示用户应该在命令行上或在.terraform-version
指定一个版本.terraform-version
文件。
最有用的评论
@e-nomem 这似乎确实是问题所在。 鉴于我如何使用 tfenv,我认为可以避免在
tfenv-install
末尾调用tfenv-use
tfenv-install
。 仅仅因为我安装了一个 Terraform 版本,并不意味着我想立即使用它,或者将它作为我的全局默认版本。但是,如果您可以配置此行为,那就太好了。 例如: