OnePasswordItem-Verweise: fünf Vorlagen ohne required-Wächter, einer davon belegt falsch #18

Closed
opened 2026-09-16 16:03:31 +02:00 by jlab-bot · 2 comments
Member

Migriert aus jk-cluster/helm-charts#238 — urspruenglich angelegt von jk-cluster-bot am 2026-09-04.

Verweise der Form #123 im folgenden Text beziehen sich auf die GitHub-Nummerierung, nicht auf die Nummern in diesem Repo. Geschlossene Issues wurden nicht mitgezogen und sind weiterhin nur auf GitHub lesbar.


Die meisten OnePasswordItem-Vorlagen sichern ihren Werte-Verweis mit required ab, fünf nicht. Bei mindestens einer davon ist das Fehlen belegt falsch.

Der Unterschied

zipline/templates/db-connection.secret.yaml:

itemPath: {{ required "You must provide a databaseSecret Reference" .Values.secrets.databaseSecretRef }}

urlaubsverwaltung/templates/urlaubsverwaltung-db.secret.yaml:

itemPath: {{ .Values.secrets.databaseSecretRef }}

Ohne den Wächter entsteht bei fehlendem Verweis ein OnePasswordItem mit leerem itemPath — angelegt, ohne dass irgendetwas meldet, dass es so nicht funktionieren kann.

Bestandsaufnahme

Über alle Secret-Vorlagen ausgezählt: 26 von 31 haben den Wächter, fünf nicht.

Ohne required:

  • calibre-web-automated/templates/calibre-web-automated.secret.yaml
  • minecraft-server/templates/minecraft-server.secret.yaml
  • searxng/templates/searxng-valkey.secret.yaml
  • urlaubsverwaltung/templates/urlaubsverwaltung-db.secret.yaml
  • urlaubsverwaltung/templates/urlaubsverwaltung-oidc.secret.yaml

Was belegt ist und was nicht

Belegt falsch ist genau einer: urlaubsverwaltungs Datenbank-Secret. Der Wächter fehlt im Template und secrets.databaseSecretRef ist in urlaubsverwaltung/values.schema.json nicht als required geführt — beides nachgesehen. Eine Datenbank ist für diesen Chart nicht optional; wer den Verweis vergisst, bekommt kein Wort dazu.

Belegt richtig ist mindestens einer: searxngs Valkey-Secret. Die README weist die externe Valkey ausdrücklich als optionale zweite Abhängigkeit aus — dort wäre ein required sogar verkehrt.

Die übrigen drei sind ungeprüft. Ob calibre-web-automated, minecraft-server und urlaubsverwaltungs OIDC-Verweis optional sind oder nur so aussehen, habe ich nicht festgestellt. Genau das ist der Wert dieses Issues: nicht der eine Fund, sondern die systematische Klärung.

Zu tun

Für jede der fünf Stellen entscheiden und festhalten, welcher Fall vorliegt:

  • Nicht optional → required mit einer Meldung, die den Werte-Pfad nennt, und required im Schema.
  • Optional → als solches in values.yaml dokumentieren, damit das fehlende required erkennbar Absicht ist und nicht Nachlässigkeit. Sinnvollerweise dann auch das Template so schreiben, dass es die Ressource bei leerem Verweis gar nicht rendert, statt eine leere anzulegen.

Versionsstufe — der unangenehme Teil

Einen required-Wächter nachzuziehen heißt: eine Installation, die heute (kaputt, aber lautlos) rendert, rendert danach nicht mehr. Nach der Regel dieses Repos ist das eine Verhaltensänderung, also Major je betroffenem Chart — dieselbe Begründung, mit der #158 auf 5.0.0 ging.

Das ist teuer für eine Verbesserung, die niemandem auffällt, solange nichts schiefgeht. Es spricht dafür, die fünf Stellen in einem Zug zu klären statt einzeln, und die rein dokumentarischen Fälle (optional, nur Kommentar) von den echten Wächtern zu trennen — Erstere sind Patch.

> Migriert aus [`jk-cluster/helm-charts#238`](https://github.com/jk-cluster/helm-charts/issues/238) — urspruenglich angelegt von **jk-cluster-bot** am 2026-09-04. > > Verweise der Form `#123` im folgenden Text beziehen sich auf die **GitHub-Nummerierung**, nicht auf die Nummern in diesem Repo. Geschlossene Issues wurden nicht mitgezogen und sind weiterhin nur auf GitHub lesbar. --- Die meisten `OnePasswordItem`-Vorlagen sichern ihren Werte-Verweis mit `required` ab, fünf nicht. Bei mindestens einer davon ist das Fehlen belegt falsch. ## Der Unterschied `zipline/templates/db-connection.secret.yaml`: ```yaml itemPath: {{ required "You must provide a databaseSecret Reference" .Values.secrets.databaseSecretRef }} ``` `urlaubsverwaltung/templates/urlaubsverwaltung-db.secret.yaml`: ```yaml itemPath: {{ .Values.secrets.databaseSecretRef }} ``` Ohne den Wächter entsteht bei fehlendem Verweis ein `OnePasswordItem` mit **leerem `itemPath`** — angelegt, ohne dass irgendetwas meldet, dass es so nicht funktionieren kann. ## Bestandsaufnahme Über alle Secret-Vorlagen ausgezählt: **26 von 31 haben den Wächter, fünf nicht.** Ohne `required`: - `calibre-web-automated/templates/calibre-web-automated.secret.yaml` - `minecraft-server/templates/minecraft-server.secret.yaml` - `searxng/templates/searxng-valkey.secret.yaml` - `urlaubsverwaltung/templates/urlaubsverwaltung-db.secret.yaml` - `urlaubsverwaltung/templates/urlaubsverwaltung-oidc.secret.yaml` ## Was belegt ist und was nicht **Belegt falsch ist genau einer:** `urlaubsverwaltung`s Datenbank-Secret. Der Wächter fehlt im Template **und** `secrets.databaseSecretRef` ist in `urlaubsverwaltung/values.schema.json` nicht als `required` geführt — beides nachgesehen. Eine Datenbank ist für diesen Chart nicht optional; wer den Verweis vergisst, bekommt kein Wort dazu. **Belegt richtig ist mindestens einer:** `searxng`s Valkey-Secret. Die README weist die externe Valkey ausdrücklich als *optionale* zweite Abhängigkeit aus — dort wäre ein `required` sogar verkehrt. **Die übrigen drei sind ungeprüft.** Ob `calibre-web-automated`, `minecraft-server` und `urlaubsverwaltung`s OIDC-Verweis optional sind oder nur so aussehen, habe ich nicht festgestellt. Genau das ist der Wert dieses Issues: nicht der eine Fund, sondern die systematische Klärung. ## Zu tun Für jede der fünf Stellen entscheiden und **festhalten**, welcher Fall vorliegt: - **Nicht optional** → `required` mit einer Meldung, die den Werte-Pfad nennt, und `required` im Schema. - **Optional** → als solches in `values.yaml` dokumentieren, damit das fehlende `required` erkennbar Absicht ist und nicht Nachlässigkeit. Sinnvollerweise dann auch das Template so schreiben, dass es die Ressource bei leerem Verweis **gar nicht** rendert, statt eine leere anzulegen. ## Versionsstufe — der unangenehme Teil Einen `required`-Wächter nachzuziehen heißt: eine Installation, die heute (kaputt, aber lautlos) rendert, rendert danach **nicht mehr**. Nach der Regel dieses Repos ist das eine Verhaltensänderung, also **Major** je betroffenem Chart — dieselbe Begründung, mit der #158 auf 5.0.0 ging. Das ist teuer für eine Verbesserung, die niemandem auffällt, solange nichts schiefgeht. Es spricht dafür, die fünf Stellen **in einem Zug** zu klären statt einzeln, und die rein dokumentarischen Fälle (optional, nur Kommentar) von den echten Wächtern zu trennen — Erstere sind Patch.
Author
Member

Freigegebener Umsetzungsplan (Manager-Sitzung, 2026-09-22). Die im Issue offen gelassene Frage ist damit beantwortet: alle vier ungeschützten Verweise sind nicht optional.

Bestandsaufnahme, mit Beleg

Stelle Verbrauch abgesichert? values.yaml Schema CI setzt ihn? Urteil
calibre-web-automated / cwaSecretRef nein — Env und Volume-Mount, beide ungated kein Kommentar nicht required ja nicht optional
minecraft-server / minecraftServerRef ja — RCON und CurseForge, beide standardmäßig aus Kommentar bezeichnet die Felder als bedingt, nicht den Verweis nicht required ja, mit beiden Funktionen aus nicht optional
urlaubsverwaltung / databaseSecretRef nein — drei Datasource-Variablen kein Kommentar nicht required ja nicht optional
urlaubsverwaltung / oidcSecretRef nein — sechs Variablen, kein Nicht-OIDC-Login im Chart kein Kommentar nicht required ja nicht optional
searxng / valkeySecretRef Template per if abgesichert „Optional: leave it null unless…" Beschreibung sagt „Optional" nein, bewusst bereits korrekt

Die stärksten Einzelbelege stehen in den Charts selbst:

  • calibre-web-automated, NOTES.txt: „the Secret above will never appear — the pod cannot start."
  • minecraft-server, NOTES.txt: „has to be set even when nothing consumes a key from it; it has no default and would otherwise render an itemPath of null." Der Inhalt des Eintrags darf leer sein, der Verweis nicht.
  • urlaubsverwaltung, NOTES.txt: „THE IDENTITY PROVIDER IS REQUIRED AT BOOT, NOT AT LOGIN" — ohne auflösbaren Issuer endet der Prozess vor dem ersten Request.

searxng ist damit nicht nur richtig, sondern das Vorbild: abgesichertes Template, „Optional" in values.yaml und in der Schema-Beschreibung.

Entschieden

  1. Alle vier bekommen required() plus Schema-Eintrag. Die Meldung nennt den Werte-Pfad.
  2. Ein PR über alle Charts, wie im Issue vorgeschlagen. Versionsstufen: calibre-web-automated 7.0.0, minecraft-server 6.0.0, urlaubsverwaltung 10.0.0 — je Major, weil eine heute lautlos kaputte Installation danach nicht mehr rendert.
  3. searxng wird mitgenommen, aber nur dokumentarisch: Der Satz „charts in this repo have no dependencies (README, guideline 13)" in Template und values.yaml ist seit #214 falsch und zitiert zudem die falsche Richtlinie (heute 14). Patch-Bump.

Zwei Punkte, die bei der Umsetzung nicht angenommen werden dürfen

Der Schema-Teil wirkt nur wegen einer Helm-Eigenheit. Weil die Schlüssel in values.yaml mit Default null stehen, entfernt Helms Coalescing sie vor der Schema-Prüfung — erst dadurch greift ein required-Array überhaupt. Das ist nachzuweisen (Render ohne den Wert muss scheitern, Render mit Wert muss durchlaufen), nicht zu unterstellen.

Ein required() macht vorhandene Prosa zu totem Code. calibre-web-automated/templates/NOTES.txt enthält eine handgeschriebene Warnung für genau den leeren Fall; nach dem Wächter wird sie nie mehr gerendert, weil der Render vorher abbricht. Sie gehört im selben PR entfernt. Bei minecraft-server bleibt der NOTES-Text gültig und sollte auf den Wächter verweisen.

Freigegebener Umsetzungsplan (Manager-Sitzung, 2026-09-22). Die im Issue offen gelassene Frage ist damit beantwortet: **alle vier ungeschützten Verweise sind nicht optional.** ## Bestandsaufnahme, mit Beleg | Stelle | Verbrauch abgesichert? | values.yaml | Schema | CI setzt ihn? | Urteil | |---|---|---|---|---|---| | `calibre-web-automated` / `cwaSecretRef` | nein — Env **und** Volume-Mount, beide ungated | kein Kommentar | nicht `required` | ja | nicht optional | | `minecraft-server` / `minecraftServerRef` | ja — RCON und CurseForge, beide standardmäßig aus | Kommentar bezeichnet die **Felder** als bedingt, nicht den Verweis | nicht `required` | ja, mit beiden Funktionen aus | nicht optional | | `urlaubsverwaltung` / `databaseSecretRef` | nein — drei Datasource-Variablen | kein Kommentar | nicht `required` | ja | nicht optional | | `urlaubsverwaltung` / `oidcSecretRef` | nein — sechs Variablen, kein Nicht-OIDC-Login im Chart | kein Kommentar | nicht `required` | ja | nicht optional | | `searxng` / `valkeySecretRef` | Template per `if` abgesichert | „Optional: leave it null unless…" | Beschreibung sagt „Optional" | nein, bewusst | bereits korrekt | Die stärksten Einzelbelege stehen in den Charts selbst: - calibre-web-automated, `NOTES.txt`: „the Secret above will never appear — the pod cannot start." - minecraft-server, `NOTES.txt`: „has to be set even when nothing consumes a key from it; it has no default and would otherwise render an itemPath of null." Der **Inhalt** des Eintrags darf leer sein, der Verweis nicht. - urlaubsverwaltung, `NOTES.txt`: „THE IDENTITY PROVIDER IS REQUIRED AT BOOT, NOT AT LOGIN" — ohne auflösbaren Issuer endet der Prozess vor dem ersten Request. `searxng` ist damit nicht nur richtig, sondern das Vorbild: abgesichertes Template, „Optional" in `values.yaml` **und** in der Schema-Beschreibung. ## Entschieden 1. **Alle vier bekommen `required()` plus Schema-Eintrag.** Die Meldung nennt den Werte-Pfad. 2. **Ein PR über alle Charts**, wie im Issue vorgeschlagen. Versionsstufen: calibre-web-automated `7.0.0`, minecraft-server `6.0.0`, urlaubsverwaltung `10.0.0` — je Major, weil eine heute lautlos kaputte Installation danach nicht mehr rendert. 3. **searxng wird mitgenommen**, aber nur dokumentarisch: Der Satz „charts in this repo have no dependencies (README, guideline 13)" in Template und `values.yaml` ist seit #214 falsch und zitiert zudem die falsche Richtlinie (heute 14). Patch-Bump. ## Zwei Punkte, die bei der Umsetzung nicht angenommen werden dürfen **Der Schema-Teil wirkt nur wegen einer Helm-Eigenheit.** Weil die Schlüssel in `values.yaml` mit Default `null` stehen, entfernt Helms Coalescing sie vor der Schema-Prüfung — erst dadurch greift ein `required`-Array überhaupt. Das ist nachzuweisen (Render ohne den Wert muss scheitern, Render mit Wert muss durchlaufen), nicht zu unterstellen. **Ein `required()` macht vorhandene Prosa zu totem Code.** `calibre-web-automated/templates/NOTES.txt` enthält eine handgeschriebene Warnung für genau den leeren Fall; nach dem Wächter wird sie nie mehr gerendert, weil der Render vorher abbricht. Sie gehört im selben PR entfernt. Bei minecraft-server bleibt der NOTES-Text gültig und sollte auf den Wächter verweisen.
Author
Member

Umsetzung: PR #38.

Eine Abweichung vom freigegebenen Plan, mit Messung und vom Manager bestaetigt: die vier required-Arrays im Schema sind entfallen. Nachgemessen mit Helm 3.22.0 an einem Probe-Chart:

Chart-Default Nutzereingabe Schluessel bei der Pruefung required feuert
null nichts vorhanden, null nein
null --set x=null vorhanden, null nein
"set" --set x=null geloescht ja
gar nicht in values.yaml nichts fehlt ja

JSON Schema prueft mit required die Anwesenheit, nicht die Nicht-Nullheit. Unsere vier Schluessel liegen mit Default null vor, sind also anwesend - das Array haette unter keiner Eingabe feuern koennen. Beide Wege, es feuern zu lassen, machen helm lint --strict auf den Chart-Defaults rot (missing property beim Weglassen des Defaults, got null, want string beim Verengen des Typs), und damit die Pipeline.

Daraus die allgemeine Regel, die jetzt in README-Richtlinie 12, im Chart-Style-Guide §12 und in Lessons-Learned steht: ein Wert ohne gueltigen Default laesst sich per values-schema nicht erzwingen, solange helm lint --strict auf den Defaults gruen sein muss. Der required()-Aufruf im Template ist die ganze Durchsetzung; das Schema beschreibt den Schluessel als erforderlich. Deshalb hat kein Chart im Repo ein solches Array.

Ausserdem korrigiert: der Satz in Richtlinie 12, fuer einen Schluessel mit Chart-Default entferne Helms Coalescing das null vor der Schema-Pruefung. Das gilt nur fuer einen nicht-null Default - angewandt wurde er auf den Fall, in dem er nicht stimmt.

Alles andere wie geplant: Waechter in den vier Vorlagen mit dem Werte-Pfad in der Meldung, Kommentare in values.yaml, tote Prosa in calibre-web-automateds NOTES.txt entfernt, minecraft-servers Notiz auf den Waechter gedreht, searxng nur dokumentarisch (auch die beiden _helpers.tpl-Stellen). Versionen 7.0.0 / 6.0.0 / 10.0.0 / 1.0.6. Wiki ist aktualisiert.

Offen und nicht Teil dieses Durchgangs: dieselbe falsche Abhaengigkeits-Aussage steht noch in den _helpers.tpl der uebrigen Charts.

Umsetzung: PR #38. Eine Abweichung vom freigegebenen Plan, mit Messung und vom Manager bestaetigt: **die vier `required`-Arrays im Schema sind entfallen.** Nachgemessen mit Helm 3.22.0 an einem Probe-Chart: | Chart-Default | Nutzereingabe | Schluessel bei der Pruefung | `required` feuert | |---|---|---|---| | `null` | nichts | vorhanden, `null` | nein | | `null` | `--set x=null` | vorhanden, `null` | nein | | `"set"` | `--set x=null` | geloescht | ja | | gar nicht in values.yaml | nichts | fehlt | ja | JSON Schema prueft mit `required` die *Anwesenheit*, nicht die Nicht-Nullheit. Unsere vier Schluessel liegen mit Default `null` vor, sind also anwesend - das Array haette unter keiner Eingabe feuern koennen. Beide Wege, es feuern zu lassen, machen `helm lint --strict` auf den Chart-Defaults rot (`missing property` beim Weglassen des Defaults, `got null, want string` beim Verengen des Typs), und damit die Pipeline. Daraus die allgemeine Regel, die jetzt in README-Richtlinie 12, im `Chart-Style-Guide` §12 und in `Lessons-Learned` steht: **ein Wert ohne gueltigen Default laesst sich per values-schema nicht erzwingen, solange `helm lint --strict` auf den Defaults gruen sein muss.** Der `required()`-Aufruf im Template ist die ganze Durchsetzung; das Schema *beschreibt* den Schluessel als erforderlich. Deshalb hat kein Chart im Repo ein solches Array. Ausserdem korrigiert: der Satz in Richtlinie 12, fuer einen Schluessel mit Chart-Default entferne Helms Coalescing das `null` vor der Schema-Pruefung. Das gilt nur fuer einen **nicht-null** Default - angewandt wurde er auf den Fall, in dem er nicht stimmt. Alles andere wie geplant: Waechter in den vier Vorlagen mit dem Werte-Pfad in der Meldung, Kommentare in `values.yaml`, tote Prosa in calibre-web-automateds `NOTES.txt` entfernt, minecraft-servers Notiz auf den Waechter gedreht, searxng nur dokumentarisch (auch die beiden `_helpers.tpl`-Stellen). Versionen 7.0.0 / 6.0.0 / 10.0.0 / 1.0.6. Wiki ist aktualisiert. Offen und nicht Teil dieses Durchgangs: dieselbe falsche Abhaengigkeits-Aussage steht noch in den `_helpers.tpl` der uebrigen Charts.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jlab-cluster/helm-charts#18