Helm: Prise en charge d'objets complexes dans des ensembles

Créé le 3 mars 2017  ·  3Commentaires  ·  Source: helm/helm

Dans le chat, j'ai posé des questions sur la possibilité de définir un objet comme celui-ci via --set et j'ai malheureusement été confronté à la vérité :

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

J'aime utiliser des strophes comme celles-ci dans mon values.yaml pour définir l'ensemble des besoins en variables d'environnement pour une spécification de conteneur particulière, de sorte que dans la spécification j'ai seulement besoin de :

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

Il y a beaucoup de raisons pour lesquelles cela est utile :

  1. Je n'ai pas à me soucier de transmettre des variables vides à mon application.
  2. Les variables sont toutes définies à un seul endroit, donc si un nom de variable devait changer, je peux rapidement le définir et être sur mon chemin.
  3. Je n'ai jamais à me soucier de redéployer complètement quelque chose comme un objet deployment juste parce que je veux passer quelques autres variables au processus principal.

Malheureusement, la transmission de ces types d'objets n'est actuellement pas prise en charge. Utiliser les instructions if directement dans mes modèles de la meilleure façon de contourner cela pour l'instant, mais ce serait génial de définir de grands échantillons d'informations potentiellement dynamiques sur mon application directement dans values.yaml

feature

Commentaire le plus utile

C'est maintenant possible en utilisant la syntaxe suivante :

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

Ceci est documenté ici .

Tous les 3 commentaires

En fait, je viens de trouver un autre moyen de le faire en observant kube-lego :

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

Mon problème est similaire.
Nous voulons utiliser le Chart aws-cluster-autoscaler à :
https://github.com/kubernetes/charts/tree/master/stable/aws-cluster-autoscaler

Nous aimerions passer l'autoscalingGroups[].name via la ligne de commande, en utilisant --set , et les autres informations via un fichier params.yaml :

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

Lorsque nous essayons de définir le nom du groupe d'autoscaling avec :

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

Mais cela ne fonctionne pas.

En lisant la documentation , c'est connu, mais ce serait quand même bien de pouvoir le faire.

C'est maintenant possible en utilisant la syntaxe suivante :

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

Ceci est documenté ici .

Cette page vous a été utile?
0 / 5 - 0 notes