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.
$ echo "latest:^0.12" > .terraform-version
$ tfenv install
....
$ terraform version
Terraform v0.12.6
$ cat .terraform-version
0.12.6
Eu esperaria que o conteúdo de .terraform-version
permanecesse o mesmo, a menos que eu o alterasse especificamente.
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.
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 detfenv-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: