<p>tfenv überschreibt die .terraform-version-Datei bei der Installation von terraform</p>

Erstellt am 12. Aug. 2019  ·  7Kommentare  ·  Quelle: tfutils/tfenv

Problem

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.

Schritte zum Reproduzieren

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

Erwartetes Verhalten

Ich würde erwarten, dass der Inhalt von .terraform-version bleibt, es sei denn, ich ändere ihn ausdrücklich.

Aufstellen

  • Betriebssystem: MacOS Mojave (10.14.6)
  • Shell: Bash 5.0.7
  • TFEnv-Version: 1.0.1
bug

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

Alle 7 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen