Zum Inhalt

Änderung ausrollen

Ziel

Deine Änderung an einem Host oder an DNS läuft auf dem Server bzw. bei deSEC und steht im Repo auf Codeberg.

Voraussetzungen

Die Schritte gelten für die Hosts (Ordner syslet/<host>/, mit syslet) und für DNS (Ordner desec/, mit desync). Für Authentik gilt derselbe Ablauf mit Terraform; die Befehle stehen in Terraform ausführen.

Schritte

1. Neuesten Stand holen

Im Repo-Ordner:

Bash
git pull --rebase
git status

Erwartet: git pull endet mit Already up to date. oder Successfully rebased and updated refs/heads/main., git status mit nothing to commit, working tree clean. Zeigt git status noch Änderungen, sind das deine eigenen von früher: erst ausrollen oder verwerfen, dann neu anfangen.

2. In den Ordner wechseln

Für einen Host cd syslet/werner bzw. cd syslet/containerhost, für DNS cd desec. Das Token für deSEC setzt direnv aus .envrc (Arbeitsrechner einrichten, Schritt 9).

plan und apply wirken nur auf den Host des Ordners, in dem du sie ausführst. Betrifft deine Änderung beide Hosts, etwa über eine gemeinsame Datei direkt in syslet/ oder in syslet/scripts/, machst du die Schritte 3, 6 und 7 in syslet/werner und in syslet/containerhost.

3. plan vor der Änderung

Bash
cue cmd plan

Erwartet bei einem Host No changes detected. All units are up to date., bei DNS am Ende No changes. Infrastructure is up-to-date.

Zeigt plan schon jetzt Änderungen, hör hier auf und geh nach plan zeigt unerwartete Änderungen vor.

4. Datei ändern

Was du in welcher Datei änderst, steht in der Anleitung zu deiner Aufgabe, etwa Image-Version anheben oder App hinzufügen.

5. Formatieren

Im Ordner der geänderten Datei, für gemeinsame Dateien also in syslet/:

Bash
cue fmt ./...
git diff

Erwartet: cue fmt gibt nichts aus; git diff zeigt nur deine Änderung, höchstens mit angepassten Einrückungen und Leerzeichen. Meldet cue fmt einen Fehler, steht darin Datei und Zeile, in der die CUE-Syntax nicht stimmt.

6. plan nach der Änderung

Bash
cue cmd plan

Erwartet: nur deine Änderung. Zwei gekürzte Beispiele:

HedgeDoc von 1.12.0 auf 1.12.1 in syslet/werner/stack-hedgedoc.cue:

Text Only
Images to pull:
  - quay.io/hedgedoc/hedgedoc:1.12.1

Unit file changes:

--- hedgedoc-server.container
changed:
  [Container] Image
    old: quay.io/hedgedoc/hedgedoc:1.12.0
    new: quay.io/hedgedoc/hedgedoc:1.12.1

Systemd daemon-reload: required

Summary:
UNIT                                     STATUS     CHANGES
hedgedoc-server.container                updated    image pulled, unit updated, restarted (desired: running)

old: ist der Stand auf dem Host, new: der im Repo. Was die Abschnitte bedeuten, steht in Plan output in der syslet-Doku.

Neuer TXT-Record doku-test in desec/desec_garage_lab_de.cue:

Text Only
Fetching current state...

Token Policies:
  (no changes) token 2262403e-a7f8-41bf-b2f1-d32030cd26b5
  (no changes) token 2f198c18-934a-4db4-872b-b1ab604c8728

RRsets:
  Domain "garage-lab.de":
    + create  doku-test                TXT
              ttl=3600 records=["hallo"]

Plan: 1 to create, 0 to update, 0 to delete.

+ create legt an, ~ update ändert, - delete löscht.

Zeigt plan mehr als deine Änderung, roll nicht aus, sondern geh nach plan zeigt unerwartete Änderungen vor.

7. Ausrollen

Bash
cue cmd apply

Erwartet: noch einmal dieselbe Ausgabe wie bei plan, danach Continue? (yes/no). Tippe yes; jede andere Antwort bricht ab, ohne etwas zu ändern. Bei einem Host kommt danach keine weitere Ausgabe, bei DNS die Ausgabe von desync.

8. Prüfen, ob die Änderung wirkt

Bash
cue cmd plan

Erwartet: wieder „No changes“ wie in Schritt 3. Prüfe außerdem das Ergebnis selbst: Öffne bei einer App ihre Adresse im Browser und sieh in die Logs (Container-Status und Logs ansehen); frage bei DNS den Record ab, etwa mit dig +short TXT doku-test.garage-lab.de @ns1.desec.io.

9. Committen

Zurück im Repo-Ordner legst du einen Commit an:

Bash
git add <geänderte Dateien>
git commit

Im Editor schreibst du in die erste Zeile kurz, was du geändert hast, und darunter, warum, wenn das nicht offensichtlich ist (siehe Git-Workflow). Erwartet: eine Zeile wie [main 1a2b3c4] update hedgedoc to 1.12.1.

10. Sofort pushen

Bash
git push

Erwartet: am Ende eine Zeile main -> main. Lehnt Codeberg den Push ab (rejected), hat jemand anders inzwischen gepusht: Git-Konflikt lösen.

Prüfen

  • cue cmd 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