Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Einen OpenTofu-Plan lesen und verstehen

Nach dieser Lektion: Ich kann einen Plan nach einer Änderung lesen und sagen, was angelegt, geändert oder gelöscht wird.

Lektion, 60 Min.14 BefehleOpenTofu-Lab: Infrastructure as Code mit Plan, Apply und State auf einer VM

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

BegriffWas er bedeutetBeispiel
Plan-Symboldas Zeichen vor einer Zeile im Plan, es sagt, was geschieht+ ~ - -/+
Änderung am Ortdie Ressource bleibt und bekommt nur einen neuen Wertupdate in-place
Ersetzendie Ressource wird gelöscht und danach neu angelegtmust be replaced
triggers_replaceein Wert, dessen Änderung ein Ersetzen erzwingt
known after applyder Wert steht erst nach dem Apply fest
Exitcodedie 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

SymbolHeißtFolge 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

Befehl
mkdir -p ~/iac-demo/lesen

Hier 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

Befehl
cd ~/iac-demo/lesen

Hier 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

Befehl
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.tf

Hier 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

Befehl
tofu init -no-color | grep initialized

Hier 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

Befehl
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

Befehl
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

Befehl
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

Befehl
tofu plan -no-color -detailed-exitcode > /dev/null

Hier 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

Befehl
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

Befehl
tofu plan -no-color -detailed-exitcode -var groesse=gross > /dev/null

Hier 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

Befehl
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

Befehl
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

Befehl
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?

Befehl
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.

Über dieses Lab und seinen Quellcode: OpenTofu-Lab: Infrastructure as Code mit Plan, Apply und State auf einer VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.