Ich verwende die Datei .terraform-version
, um auszuwählen, welche Version(en) von Terraform für einen bestimmten Verzeichnisbaum verwendet werden soll. Ich verwende regelmäßig die Regex-Methode für den Inhalt von .terraform-version
. Bei Bedarf führe ich tfenv install
, um die entsprechende Terraform-Version auf meinem System zu erhalten, falls diese nicht vorhanden ist. Dabei überschreibt tfenv jedoch meine .terraform-version
Datei mit der genauen Versionsnummer, die installiert wurde.
$ echo "latest:^0.12" > .terraform-version
$ tfenv install
....
$ terraform version
Terraform v0.12.6
$ cat .terraform-version
0.12.6
Ich würde erwarten, dass der Inhalt von .terraform-version
bleibt, es sei denn, ich ändere ihn ausdrücklich.
Dies ist besorgniserregend. Werde so schnell wie möglich nachforschen
Dies scheint vom Aufruf von tfenv-use
am Ende von tfenv-install
, da tfenv-use
die Versionsdatei überschreibt .
Mir scheint, dass der Aufruf von tfenv-use
für die Installation nicht notwendig ist, da nur die globale Versionsdatei aktualisiert werden soll und nur wenn die globale Versionsdatei noch nicht existiert.
@e-nomem, das scheint tatsächlich das Problem zu sein. Angesichts der Art, wie ich tfenv verwende, denke ich, dass es möglich ist, am Ende von tfenv-install
nie tfenv-use
aufzurufen. Nur weil ich eine Version von Terraform installiere, heißt das nicht, dass ich sie jetzt verwenden oder als globale Standardversion verwenden möchte.
Es wäre jedoch schön, wenn Sie dieses Verhalten konfigurieren könnten. Zum Beispiel:
## 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)
Ich hätte definitiv gerne eine Möglichkeit, das Überschreiben zumindest zu deaktivieren, auch wenn es sich um eine Shell-Variable handelt. Wir führen eine Reihe komplizierter Upgrades von tf 0.11 auf 0.12 ein und möchten die neueste 0.12 im Allgemeinen verfolgen, aber immer wenn jemand tfenv install
von außerhalb von CI ausführt, wird die .terraform-Version mit der spezifischen Version aktualisiert wie im Beispiel. Ich bin damit einverstanden, die vorhandene Funktionalität von tfenv install
zerstören, wenn die Leute wirklich das Überschreiben verwenden, aber wenn wir es deaktivieren könnten, indem wir etwas wie TFENV_NOOVERWRITE setzen, wäre ich damit zufrieden.
Das Überschreiben der projektspezifischen .terraform-version
Datei macht die Verwendung der Datei fast nutzlos und birgt außerdem die Gefahr, dass jemand die Änderung unbeabsichtigt in die Quellcodeverwaltung überführt. Wir verwenden die Datei in einem Repo, um die für das Projekt verwendete Version zu _fixieren_, daher ist es ziemlich problematisch, sie mit einem tfenv
Befehl zu überschreiben.
Ich stimme zu, dass die Verwendung von tfenv die .terraform-version-Datei nicht ändern sollte.
Wenn Sie dies verhindern, werden Benutzer, die ein tfenv ausgeben, wahrscheinlich verwirren und dann nicht die Version erhalten, nach der sie gefragt haben, weil sie eine Versionsdatei haben.
Ich begrüße Gedanken zur Verbesserung dieser Benutzererfahrung, aber es ist sicherlich das Richtige, das Überschreiben zu stoppen.
Ich bin mir nicht sicher, nach welcher Art von Gedanken Sie suchen, aber meiner Meinung nach sollte tfenv
_nie_ in diese Datei schreiben, selbst wenn sie nicht existiert. Es sollte diese Datei als _nur lesen_ behandeln. Es liegt an den _Benutzern_ von tfenv
, diese Datei zu erstellen, wenn sie dies wünschen, und sie dann in ihre eigenen Repositorys zu übertragen, wenn sie eine feste Version von Terraform für ihre Projekte verwenden möchten.
Die Befehle tfenv install
und tfenv use
sollten nach der Datei .terraform-version
suchen, wenn keine Version explizit in der Befehlszeile angegeben ist. Wenn die Datei vorhanden ist, sollten die Befehle sie verwenden, um zu bestimmen, welche Version mit dem Befehl verwendet werden soll, und wenn sie nicht vorhanden ist, sollten die Befehle fehlschlagen, was bedeutet, dass der Benutzer entweder eine Version in der Befehlszeile oder innerhalb eines .terraform-version
Datei. Wenn eine Version in der Befehlszeile angegeben wird, sollte die Datei .terraform-version
ignoriert werden.
Hilfreichster Kommentar
@e-nomem, das scheint tatsächlich das Problem zu sein. Angesichts der Art, wie ich tfenv verwende, denke ich, dass es möglich ist, am Ende von
tfenv-install
nietfenv-use
aufzurufen. Nur weil ich eine Version von Terraform installiere, heißt das nicht, dass ich sie jetzt verwenden oder als globale Standardversion verwenden möchte.Es wäre jedoch schön, wenn Sie dieses Verhalten konfigurieren könnten. Zum Beispiel: