Einleitung
Nach
Lesson 0003
kennst du IaC-Modell und OpenTofu als Drop-in. Für
scope = "public" oder "both" muss daraus
noch öffentliches DNS bei Hetzner werden. Das macht der
Terraform-Stack unter tofu/dns.
Heute lernst du die nativen tofu-Befehle.
Das justfile ist nur eine Kurzschreibweise derselben
Kommandos. Live-Apply gegen Hetzner ist fürs Selbststudium nicht
nötig.
Der Terraform-Kern
Terraform vergleicht drei Dinge: deine Config, den State (was es zuletzt verwaltet hat) und oft die Reality bei der API. Daraus entsteht ein Plan (eine Vorschau). Erst Apply führt die Änderungen aus.
Primärquelle zum Vokabular: OpenTofu Getting started (Write → Plan → Apply).
DNS-Pfad in groupdir-infra
Merksatz: Nix-Liste editieren → generieren → Terraform validate/plan/(apply). Die generierte JSON ist Ableitung, keine Quelle. Details: tofu/dns/README.md.
-chdir=tofu/dns sagt der CLI, im Stack-Ordner zu
arbeiten (statt dorthin zu cden). Das ist normales
Terraform/OpenTofu.
Die Befehle im Detail
Vom Repo-Root aus (nach nix develop, damit
tofu und nix da sind):
# 1) Config aus der Nix-DNS-Liste ableiten
nix eval --json --file tofu/dns/records.tf.json.nix \
> tofu/dns/generated-records.tf.json
# 2) Syntax/Provider prüfen, ohne State-Backend
tofu -chdir=tofu/dns init -backend=false
tofu -chdir=tofu/dns validate
# 3) Für echten Plan/Apply: Backend + Provider wie in CI
tofu -chdir=tofu/dns init
tofu -chdir=tofu/dns plan -out=tfplan
tofu -chdir=tofu/dns apply tfplan
-
init -backend=false: Provider herunterladen, aber kein Remote-State. Gut zum Validate ohne Token/Backend. -
init(ohne Flag): verbindet das konfigurierte Backend (in CI: GitLab-Stategroupdir-dns). -
plan -out=tfplan: speichert den Plan; Apply nimmt genau diese Datei.
Auth für Plan/Apply gegen Hetzner: Token
HETZNER_DNS_TOKEN oder lokale
secrets.auto.tfvars (nicht committen); siehe DNS-README.
Was just nur abkürzt
Die Targets tofu-dns-* im
justfile
rufen genau diese Befehle auf. Ein Extra bei
tofu-dns-validate: just legt ein temporäres
TF_DATA_DIR an, damit lokale
.terraform/-Daten den Validate-Lauf nicht
vermüllen. Inhaltlich bleibt es
init -backend=false plus validate.
Wenn du die Mechanismen verstehst, kannst du just als Shortcut nutzen.
Ohne Pipeline üben
-
tofu/dns/README.md
und das
justfilelesen: jedes Target auf den nativen Befehl abbilden -
Optional:
nix eval …(Generate) und die Diff ingenerated-records.tf.jsonanschauen -
Optional:
tofu -chdir=tofu/dns init -backend=falseundvalidate(ohne Hetzner-Token)
Üben: Reihenfolge und Grenzen
Retrieval
Du hast net/dns/groupdir.de.nix geändert. Was kommt vor
dem Plan?
Wo trägst du öffentliche Records nicht von Hand ein?
Was leistet
tofu -chdir=tofu/dns validate
(nach init -backend=false)?
Primärquelle
Konzept: OpenTofu Getting started und CLI: plan.
Repo: tofu/dns/README.md. Zum Abgleich der Kurzformen: justfile.
Kompakt: Referenz: Terraform-Workflow.