<p>tfenv sobrescreve o arquivo .terraform-version ao instalar o terraform</p>

Criado em 12 ago. 2019  ·  7Comentários  ·  Fonte: tfutils/tfenv

Problema

Eu uso o arquivo .terraform-version para selecionar quais versões do Terraform devem ser usadas para uma árvore de diretório específica. Eu regularmente uso o método regex para o conteúdo de .terraform-version . Quando necessário, executarei tfenv install para obter a versão apropriada do Terraform em meu sistema, caso ela não esteja presente. No entanto, ao fazer isso, tfenv sobrescreve meu arquivo .terraform-version com o número de versão exato que foi instalado.

Passos para reproduzir

$ echo "latest:^0.12" > .terraform-version
$ tfenv install
....
$ terraform version
Terraform v0.12.6
$ cat .terraform-version
0.12.6

Comportamento esperado

Eu esperaria que o conteúdo de .terraform-version permanecesse o mesmo, a menos que eu o alterasse especificamente.

Configurar

  • SO: MacOS Mojave (10.14.6)
  • Shell: Bash 5.0.7
  • Versão TFEnv: 1.0.1
bug

Comentários muito úteis

@ e-nomem esse parece ser o problema. Dado como eu uso tfenv, acho que pode ser feito um caso para nunca chamar tfenv-use no final de tfenv-install . Só porque instalo uma versão do Terraform, não significa que quero usá-lo agora ou tê-lo como minha versão padrão global.

No entanto, seria bom se você pudesse configurar esse comportamento. Por exemplo:

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

Todos 7 comentários

Isso é preocupante. Vou investigar o mais rápido possível

Isso parece vir da chamada para tfenv-use no final de tfenv-install , porque tfenv-use sobrescreve o arquivo de versão .
Parece-me que a chamada para tfenv-use não é necessária para a instalação, porque apenas o arquivo de versão global deve ser atualizado, e apenas se o arquivo de versão global ainda não existir.

@ e-nomem esse parece ser o problema. Dado como eu uso tfenv, acho que pode ser feito um caso para nunca chamar tfenv-use no final de tfenv-install . Só porque instalo uma versão do Terraform, não significa que quero usá-lo agora ou tê-lo como minha versão padrão global.

No entanto, seria bom se você pudesse configurar esse comportamento. Por exemplo:

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

Eu definitivamente gostaria de uma maneira de desligar a substituição, pelo menos, mesmo que seja uma variável de shell. Estamos lançando um monte de atualizações complicadas de tf 0.11 a 0.12 e queremos rastrear o mais recente 0,12 em geral, mas sempre que alguém executa tfenv install de fora do CI, a versão .terraform é atualizada com a versão específica como no exemplo. Estou bem em não interromper a funcionalidade existente de tfenv install se as pessoas realmente usarem a substituição, mas se pudéssemos desligá-la definindo algo como TFENV_NOOVERWRITE, ficaria feliz com isso.

Substituir o arquivo .terraform-version específico do projeto quase torna o uso do arquivo inútil e também corre o risco de alguém comprometer inadvertidamente a alteração no controle de origem. Usamos o arquivo em um repo para _fixar_ a versão usada para o projeto, portanto, substituí-lo por um comando tfenv é bastante problemático.

Eu concordo que o uso de tfenv não deve modificar o arquivo .terraform-version.
Parar de fazer isso provavelmente confundirá os usuários que emitem um tfenv e, em seguida, não obtêm a versão solicitada porque têm um arquivo de versão.
Congratulo-me com as idéias sobre como melhorar a experiência do usuário, mas certamente é a coisa certa para interromper a substituição.

Não tenho certeza de que tipo de pensamento você está procurando, mas em minha opinião, tfenv _nunca_ deve gravar nesse arquivo, mesmo que ele não exista. Deve tratar esse arquivo como _read only_. Fica a cargo dos _usuários_ de tfenv criar esse arquivo, se assim o desejarem, e então submetê-lo a seus próprios repositórios se quiserem usar uma versão fixa do Terraform para seus projetos.

Os comandos tfenv install e tfenv use devem procurar o arquivo .terraform-version quando nenhuma versão for explicitamente especificada na linha de comando. Se o arquivo existir, os comandos devem usá-lo para determinar qual versão usar com o comando e, se não existir, os comandos devem falhar, indicando que o usuário deve especificar uma versão na linha de comando ou dentro de .terraform-version arquivo. Quando uma versão é especificada na linha de comando, o arquivo .terraform-version deve ser ignorado.

Esta página foi útil?
0 / 5 - 0 avaliações