Wie liest man einen OpenTofu-Plan?
Einen Plan zu lesen heißt: vor dem Apply erkennen, was OpenTofu anlegt, ändert oder löscht. Das ist der wichtigste Handgriff bei Infrastruktur als Code.
Wer den Plan überspringt, löscht irgendwann aus Versehen einen Server mit echten Daten. Wer ihn liest, sieht es eine Zeile vorher.
Am Ende dieser Lektion
Notiz
Ich kann einen Plan nach einer Änderung lesen und sagen, was angelegt, geändert oder gelöscht wird.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Plan-Symbol | das Zeichen vor einer Zeile im Plan, es sagt, was geschieht | + ~ - -/+ |
| Änderung am Ort | die Ressource bleibt und bekommt nur einen neuen Wert | update in-place |
| Ersetzen | die Ressource wird gelöscht und danach neu angelegt | must be replaced |
| triggers_replace | ein Wert, dessen Änderung ein Ersetzen erzwingt | |
| known after apply | der Wert steht erst nach dem Apply fest | |
| Exitcode | die Zahl, die ein Befehl am Ende zurückgibt, 0 heißt meist in Ordnung |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Vier Zeichen sagen, was geschieht
Jede Ressource im Plan trägt vorn ein Zeichen. Ein Plus legt an. Eine Tilde ändert die Ressource am Ort. Ein Minus löscht sie. Minus und Plus zusammen heißen Ersetzen: erst löschen, dann neu anlegen.
Die Zeile unten zählt alles zusammen. Beim Ersetzen steht die Ressource in zwei Zahlen: einmal beim Anlegen und einmal beim Löschen.
Beispiel: die vier Plan-Symbole
| Symbol | Heißt | Folge für eine echte Ressource |
|---|---|---|
| + | anlegen (create) | Eine neue Ressource entsteht |
| ~ | am Ort ändern (update in-place) | Dieselbe Ressource, nur ein Wert ändert sich |
| - | löschen (destroy) | Die Ressource verschwindet |
| -/+ | ersetzen (replace) | Löschen und neu anlegen: auch die id ist danach neu |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Einen eigenen Ordner anlegen
mkdir -p ~/iac-demo/lesenHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
In den Ordner wechseln
cd ~/iac-demo/lesenHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zwei Ressourcen und zwei Variablen schreiben
printf '%s\n' 'variable "groesse" {' ' default = "klein"' '}' '' 'variable "abbild" {' ' default = "v1"' '}' '' 'resource "terraform_data" "vm" {' ' input = var.groesse' ' triggers_replace = var.abbild' '}' '' 'resource "terraform_data" "notiz" {' ' input = "Betrieb: Rechenzentrum"' '}' > main.tfHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Ordner vorbereiten
tofu init -no-color | grep initializedHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Ausgangszustand anlegen
tofu apply -auto-approve -no-color | grep "Apply complete"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein neuer Wert ändert die Ressource am Ort
Die Ressource vm bekommt ihre Größe aus der Variable groesse. Wir fragen den Plan: Was wäre bei gross statt klein?
Sie sehen eine Tilde, den alten und den neuen Wert mit einem Pfeil und in der letzten Zeile 1 to change. Die Ressource bleibt, ihre id bleibt.
Die Größe ändern, nur im Plan
tofu plan -no-color -var groesse=gross | grep -E "input|Plan:"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Manche Änderungen erzwingen ein Ersetzen
Bei einem echten Server lässt sich nicht jede Eigenschaft am laufenden Gerät ändern. Das Abbild, mit dem er startet, ist so eine. Dann muss OpenTofu den Server löschen und neu anlegen.
In unserer Datei spielt triggers_replace diese Rolle. Ändert sich sein Wert, steht im Plan must be replaced.
Das Abbild ändern, nur im Plan
tofu plan -no-color -var abbild=v2 | grep -E "triggers_replace|must be|Plan:"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele lesen nur die Zahl bei change und denken, es werde nichts gelöscht. Ein Ersetzen steht aber unter add und unter destroy. Lesen Sie immer die Zeile mit dem Symbol und die Worte must be replaced, bevor Sie den Plan anwenden.
Ein Skript fragt den Plan über den Exitcode
Ein Mensch liest den Plan. Ein Skript fragt nur: Gibt es etwas zu tun? Mit der Option -detailed-exitcode beantwortet der Plan das mit einer Zahl.
0 heißt: keine Änderung. 2 heißt: Es gibt Änderungen. 1 heißt: ein Fehler. Der Befehl selbst druckt dann nichts Wichtiges, echo $? zeigt die Zahl.
Plan ohne Änderung, still
tofu plan -no-color -detailed-exitcode > /dev/nullHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Exitcode zeigen
echo $?Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Plan mit Änderung, still
tofu plan -no-color -detailed-exitcode -var groesse=gross > /dev/nullHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den zweiten Exitcode zeigen
echo $?Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Einen geprüften Plan genau so anwenden
Zwischen Plan und Apply kann sich etwas ändern. Mit -out=datei speichert OpenTofu den Plan. tofu apply datei führt dann genau diesen Plan aus und fragt nicht mehr nach.
Mit der Option -destroy fragen Sie dagegen: Was würde gelöscht, wenn alles verschwinden soll?
Den Plan in eine Datei speichern
tofu plan -no-color -var groesse=gross -out=plan.bin | grep Plan:Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Genau diesen Plan anwenden
tofu apply -no-color plan.bin | grep "Apply complete"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Was würde ein Löschen tun?
tofu plan -no-color -destroy | grep -E "will be|Plan:"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Weiterführend
Entfernen Sie in main.tf die Ressource vm samt ihren beiden Variablen und planen Sie ohne -var. Sie sollten ein Minus und 1 to destroy sehen.
Mit tofu destroy -auto-approve räumen Sie Ihren Ordner auf. Die Ordner des Labs bleiben dabei unberührt.