Zum Inhalt

Terraform ausführen

Ziel

Deine Änderung an Authentik ist mit Terraform ausgerollt, und die Dateien und der State stehen im Repo auf Codeberg.

Voraussetzungen

Die Schritte gelten für beide Ordner, apps/authentik/tf-core/ und apps/authentik/tf-groups/. Betrifft deine Änderung beide, machst du die Schritte 2 bis 9 erst in tf-core, dann in tf-groups.

Nie zwei Leute gleichzeitig

Der State liegt im Repo; führen zwei Leute gleichzeitig terraform apply aus, passt der State danach nicht mehr zu Authentik. Sag in Signal Bescheid, bevor du anfängst, und push den State sofort nach dem apply.

Schritte

1. Neuesten Stand holen

Im Repo-Ordner:

Bash
git pull --rebase
git status

Erwartet: nothing to commit, working tree clean.

2. In den Ordner wechseln

Bash
cd apps/authentik/tf-core
echo ${TF_VAR_authentik_token:+gesetzt}

Erwartet: gesetzt. Das Token des Service-Accounts terraform-mgmt setzt direnv aus .envrc im Repo-Ordner. Bleibt die Zeile leer, fehlt es dort noch; trag es ein wie in Arbeitsrechner einrichten, Schritt 9.

3. Terraform vorbereiten

Bash
terraform version
terraform init

Erwartet: terraform version zeigt die Version aus .tool-versions im selben Ordner; terraform init endet mit Terraform has been successfully initialized!. init lädt den Provider in der Version, die in .terraform.lock.hcl steht; bei späteren Durchläufen ist es schnell fertig und schadet nicht.

4. plan vor der Änderung

Bash
terraform plan

Erwartet: No changes. Your infrastructure matches the configuration.

Zeigt plan schon jetzt Änderungen, hat jemand in der Web-Oberfläche von Authentik etwas an einem Objekt geändert, das Terraform verwaltet, oder ausgerollt und nicht gepusht. Hör hier auf und geh nach plan zeigt unerwartete Änderungen vor; dort gilt für Authentik dasselbe wie für einen Host.

5. Dateien ändern und formatieren

Was du in welcher Datei änderst, steht in der Anleitung zu deiner Aufgabe, etwa App per OIDC anbinden oder Gruppe für eine App anlegen.

Bash
terraform fmt
terraform validate

Erwartet: terraform fmt nennt höchstens die Dateien, deren Einrückung es korrigiert hat; terraform validate meldet Success! The configuration is valid. Sonst stehen in der Meldung Datei und Zeile des Fehlers.

6. plan nach der Änderung

Bash
terraform plan

Erwartet: nur deine Änderung, am Ende etwa Plan: 1 to add, 0 to change, 0 to destroy. Vor jeder Resource steht, was passiert: + wird angelegt, ~ geändert, - gelöscht, -/+ gelöscht und neu angelegt.

Steht bei einer bestehenden Resource -/+ oder must be replaced, prüf, ob das gewollt ist: Wird eine Gruppe neu angelegt, verliert sie ihre Mitglieder. Zeigt plan mehr als deine Änderung, roll nicht aus, sondern geh nach plan zeigt unerwartete Änderungen vor.

7. Ausrollen

Bash
terraform apply

Erwartet: noch einmal derselbe plan, dann Do you want to perform these actions? und Enter a value:. Tippe yes; jede andere Antwort bricht ab, ohne etwas zu ändern. Am Ende steht Apply complete! Resources: 1 added, 0 changed, 0 destroyed. mit den Zahlen aus dem plan.

8. Prüfen

Bash
terraform plan

Erwartet: No changes. Your infrastructure matches the configuration. Sieh dir das Ergebnis außerdem in der Admin-Oberfläche von Authentik an, etwa die neue Application oder Gruppe.

9. Dateien und State committen und sofort pushen

Bash
1
2
3
4
git add *.tf terraform.tfstate
git status
git commit
git push

Erwartet: git status zeigt unter Changes to be committed: deine .tf-Dateien und terraform.tfstate; terraform.tfstate.backup und .terraform/ tauchen nicht auf, weil .gitignore sie ausschließt. Nach git push steht am Ende main -> main. Die Commit-Message schreibst du wie in Änderung ausrollen, Schritt 9.

Prüfen

  • terraform plan zeigt in jedem Ordner, in dem du ausgerollt hast, „No changes“.
  • git status zeigt Your branch is up to date with 'origin/main'. und nothing to commit, working tree clean.

Wenn etwas schiefgeht

  • plan oder apply melden 403 oder 401: Das Token in .envrc stimmt nicht oder ist abgelaufen; hol es neu aus dem Vaultwarden, trag es ein und führ direnv allow aus.
  • terraform init oder plan melden Inconsistent dependency lock file: terraform init noch einmal ausführen; ändert sich dabei .terraform.lock.hcl, frag in Signal nach, bevor du sie committest.
  • apply bricht mittendrin ab: Ein Teil ist dann schon in Authentik angelegt und steht auch im State. Committe und pushe den State trotzdem (Schritt 9), damit er zu Authentik passt, und frag dann in Signal nach.
  • Push abgelehnt oder Konflikt in terraform.tfstate: nicht von Hand zusammenführen, sondern Git-Konflikt lösen und nachfragen.
  • Allgemeines: Terraform-Doku: Kommandozeile und Authentik-Provider in der Terraform Registry