<p>tfenv 在安装 terraform 时覆盖 .terraform-version 文件</p>

创建于 2019-08-12  ·  7评论  ·  资料来源: tfutils/tfenv

问题

我使用.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的内容保持不变,除非我特别改变它。

设置

  • 操作系统:MacOS Mojave (10.14.6)
  • 外壳:Bash 5.0.7
  • TFEnv 版本:1.0.1

最有用的评论

@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)

所有7条评论

这是令人担忧的。 会尽快调查

这似乎来自tfenv-install末尾对tfenv-usetfenv-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 installtfenv use命令应该查找.terraform-version文件。 如果文件存在,命令应该使用它来确定要与命令一起使用的版本,如果不存在,命令应该失败,指示用户应该在命令行上或在.terraform-version指定一个版本.terraform-version文件。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

gudlyf picture gudlyf  ·  10评论

sthristov picture sthristov  ·  5评论

ibakayoko picture ibakayoko  ·  6评论

kamatama41 picture kamatama41  ·  15评论

itsSaad picture itsSaad  ·  6评论