Helm: Unterstützung für komplexe Objekte in Sets

Erstellt am 3. März 2017  ·  3Kommentare  ·  Quelle: helm/helm

Im Chat fragte ich nach der Möglichkeit, ein Objekt wie dieses über --set und wurde leider mit der Wahrheit konfrontiert:

env:
  - name: ROUTER
    value: cake
  - name: PASSWORD
    value: derp

Ich verwende gerne Zeilengruppen wie diese in meinen values.yaml , um den gesamten Bedarf an env-Variablen für eine bestimmte Containerspezifikation zu definieren, sodass ich in der Spezifikation nur Folgendes benötige:

        env:
{{ toYaml .Values.env | indent 10 }}

Es gibt viele Gründe, warum dies nützlich ist:

  1. Ich muss mir keine Sorgen machen, leere Variablen an meine App zu übergeben.
  2. Variablen sind alle an einem einzigen Ort definiert. Sollte sich also ein Variablenname ändern, kann ich schnell festlegen und loslegen.
  3. Ich muss mir nie Sorgen machen, etwas wie ein deployment Objekt vollständig neu bereitzustellen, nur weil ich ein paar andere Variablen an den Hauptprozess übergeben möchte.

Leider wird die Übergabe dieser Objekttypen derzeit nicht unterstützt. Verwenden Sie if-Anweisungen direkt in meinen Vorlagen, um dies im Moment am besten zu umgehen, aber es wäre großartig, große Mengen potenziell dynamischer Informationen über meine App direkt in values.yaml

feature

Hilfreichster Kommentar

Dies ist nun mit folgender Syntax möglich:

helm install foo --set env[0].name="ROUTER",env[0].value="cake"

Dies ist hier dokumentiert.

Alle 3 Kommentare

Ich habe gerade einen anderen Weg gefunden, dies zu tun, indem ich kube-lego :

          {{- range $key, $value := .Values.config }}
            - name: "{{ $key }}"
              value: "{{ $value }}"
          {{- end }}

Mein Problem ist ähnlich.
Wir möchten den Chart aws-cluster-autoscaler verwenden bei:
https://github.com/kubernetes/charts/tree/master/stable/aws-cluster-autoscaler

Wir möchten die autoscalingGroups[].name über die Befehlszeile mit --set und die anderen Informationen über eine Datei params.yaml übergeben:

autoscalingGroups:
- minSize: 2
  maxSize: 8
awsRegion: eu-west-1

Wenn wir versuchen, den Namen der Autoscaling-Gruppe festzulegen mit:

$ helm upgrade cluster-autoscaler stable/aws-cluster-autoscaler -f params.yaml --set "autoscalingGroups[].name"="nodes.k8s.test.eu-west-1.aws.redacted.net"

Aber das geht nicht.

Wenn man die Dokumentation liest, ist dies bekannt, aber es wäre trotzdem schön, dies tun zu können.

Dies ist nun mit folgender Syntax möglich:

helm install foo --set env[0].name="ROUTER",env[0].value="cake"

Dies ist hier dokumentiert.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen