web-dev-qa-db-fra.com

Helm variables imbriquées facultatives

Comment créer un bloc facultatif dans le fichier de valeurs et y faire référence dans le modèle?

Pour des exemples, disons que j'ai un fichier de valeurs qui ressemble à ce qui suit:

# values.yaml
foo:
   bar: "something"

Et puis j'ai un modèle de barre qui ressemble à ceci:

{{ .Values.foo.bar }}

Que faire si je veux rendre le foo.bar dans le fichier de valeurs facultatif? Une erreur est générée si la clé foo n'existe pas dans les valeurs.

J'ai essayé d'ajouter comme conditionnel. Cependant, cela échoue toujours si la clé foo est manquante:

{{ if .Values.foo.bar }}
{{ .Values.foo.bar }}
{{ end }}

Toutes suggestions seraient très appréciées.

4
Joe J

J'ai cherché une réponse à cette même question et je n'ai rien trouvé là-bas. Il semble que vous deviez utiliser une fonction personnalisée, alors j'en ai écrit une. Voici ce que j'ai trouvé. Cela fonctionne pour mes cas d'utilisation, les commentaires/améliorations sont les bienvenus.

_helpers.tpl

{{- define "hasDeepKey" -}}
  {{- $mapToCheck := index . "mapToCheck" -}}
  {{- $keyToFind := index . "keyToFind" -}}
  {{- $keySet := (splitList "." $keyToFind) -}}
  {{- $firstKey := first $keySet -}}
  {{- if index $mapToCheck $firstKey -}}{{*/ The key was found */}}
    {{- if eq 1 (len $keySet) -}}{{*/ The final key in the set implies we're done */}}
true
    {{- else }}{{*/ More keys to check, recurse */}}
      {{- include "hasDeepKey" (dict "mapToCheck" (index $mapToCheck $firstKey) "keyToFind" (join "." (rest $keySet))) }}
    {{- end }}
  {{- else }}{{/* The key was not found */}}
false
  {{- end }}
{{- end }}

values.yaml:

    {{- if eq "true" (include "hasDeepKey" (dict "mapToCheck" .Values "keyToFind" "foo.bar")) }}
      bar: {{- .Values.foo.bar }}
    {{- end }}
0
Samuel