Post

JSON-Schema für Helm-Charts automatisch per GitHub-Actions erstellen

JSON-Schema für Helm-Charts automatisch per GitHub-Actions erstellen

Das Problem: JSON-Schema für Helm nicht mehr händisch schreiben und pflegen!

Nach dem letzten Post über JSON-Schemas mit Helm-Charts, stellt sich natürlich die Frage: “Gibt es Tools die das Erstellen und Pflegen von diesen Dateien für Helm vereinfachen können?”

Die Lösung: automatische Schema Generierung aus der values.yaml

Hier sei das GitHub-Projekt helm-values-schema-json genannt. Dort gibt es für für die Kommandozeile ein Tool. Aber noch schöner ist die GitHub-Action, die das ganze dann noch bequemer erledigt. Ob Du also einen PreCommit-Hook nutzt oder entspannt dem GitHub-Runner die Arbeit überlässt, Du tust deiner Chart Qualität etwas gutes. Das Tool liest dabei die values.yaml aus und erstellt ein entsprechendes JSON-Schema. Wenn Du dabei auch noch Annotationen in der values.yaml hinzufügst, wird es noch magischer! Lass uns schauen wie es funktionier.

Ein Beispiel: Schema Generierung per GitHub-Action

Aber als erstes erstmal den GitHub-Workflow im Projekt erstellen (.github/workflows/helm-json-values.yaml)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name: Generate values schema json
on:
  push:
    branches:
      - main

jobs:
  generate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          ref: $
      - name: Generate values schema json
        uses: losisin/helm-values-schema-json-action@v1
        with:
          input: values.yaml
          git-push: true
          git-commit-message: "chore: update values.schema.json"

Hier wird bei jedem push auf den main-Branch das Projekt ausgecheckt und aktuell nur die values.yaml verarbeitet. Die verwendete GitHub-Action unterstützt noch wesentlich mehr Spielarten, das Ganze ist hier bewusst einfach gehalten. Die erstellte values.schema.jsonwird dann mittels git-push: truecommited. Denkt dabei bitte daran das der commit aus der Action auch die Berechtigung benötigt. Schaut einfach mal in Eurem Repo unter Settings -> Code and automation -> Actions -> General und dann im Bereich Workflow-Permissions.

GitHub-Settings

Hier sollte im einfachsten Fall einfach ein Read and write permissions ausgewählt sein.

Mehr Magie in der values.yaml

Die erstellte values.schema.json ist recht generisch. Tolle Features wie die Werteliste Always, Never, IfNotPresent bei der pullPolicy aus dem letzten Post sucht man vergebens. Hier können wir mit einem einfachen Trick nachschärfen.

1
2
3
image:
  repository: ghcr.io/stevedetm/restart-pod-job # @schema pattern: ^[a-z0-9./-]+$
  pullPolicy: IfNotPresent # @schema enum: [IfNotPresent, Always, Never]

Direkt hinter der jeweiligen Wertzuweisung wird per # ein Kommentar erstellt. Die Annotation @schema enum: [IfNotPresent, Always, Never] weist dann entsprechend gültige Werte zu. Bei dem Repository können wir einen regulären Ausdruck hinterlegen. Weitere Annotationen wie maxLength und mehr findest Du in der Dokumentation der GitHub-Projektes.

Fazit

Mit einer kleinen Automatisierung wird eine lästige Pflegearbeit abgenommen. Sicherlich ist es immer noch nötig die values.yaml sinnvoll zu Annotieren, aber das sollte zu Dokumentationszwecken ja eh gemacht werden, oder?

This post is licensed under CC BY 4.0 by the author.