2
votes

Convertir yaml en fichier de propriétés dans le modèle de barre

Je voudrais convertir une partie de la structure dans values.yaml en fichier de propriétés dans une carte de configuration.

Est-il possible de convertir une structure yaml comme:

field1=value1
field2.field21=value21
field2.field22=value22

dans

field1: value1
field2:
   field21: value21
   field22: value22

avec les fonctions de création de modèles Helm?


0 commentaires

3 Réponses :


4
votes

Vous devrez apporter vos valeurs sous une clé distincte et certaines fonctions de modèle Sprig dans votre Configmap .

values.yaml

---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: Configmap
data:
  field1=value1
  field2.field21=value21
  field2.field22=value22

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: Configmap
data:
{{ range $key, $value := .Values.fields }}
  {{- if kindIs "map" $value -}}
  {{ $top:=$key }}
  {{- range $key, $value := $value }}
  {{ $top }}.{{ $key }}={{ $value }}
  {{- end -}}
  {{- else -}}
  {{ $key | indent 2}}={{ $value }}
  {{- end -}}
{{- end -}}

modèle de barre. -x modèles / configmap.yaml

fields:
  field1: value1
  field2:
    field21: value21
    field22: value22

Je suggère d'extraire cette logique dans le fichier _helpers.tpl . Vous devrez ajouter plus de logique si vous avez plus de configurations imbriquées.


0 commentaires

3
votes

En tant que problème de programmation, il s'agit d'un simple appel récursif. Vous pouvez utiliser des text/template Go comme des fonctions. La seule astuce ici est qu'ils ne prennent qu'un seul paramètre, vous devez donc utiliser la fonction de list brins pour regrouper plusieurs valeurs dans ce paramètre, et la fonction d' index text/template pour récupérer les valeurs.

{{- $top := index . 2 -}}
# from the {{ $top.Chart.Name }} Helm chart

{{/* in your ConfigMap proper */}}
{{ template "envify" (list "" .Values.fields .) }}

Cela fonctionnera avec des valeurs imbriquées arbitrairement profondes.

Si vous faites référence à des variables Helm standard ( .Release , .Values , ...), cela devient également délicat car le . variable est réutilisée pour le paramètre de modèle unique (elle est également réutilisée dans la boucle de range ). J'ai tendance à le passer explicitement comme paramètre de modèle supplémentaire.

{{- define "envify" -}}
{{- $prefix := index . 0 -}}
{{- $value := index . 1 -}}
{{- if kindIs "map" $value -}}
  {{- range $k, $v := $value -}}
    {{- template "envify" (list (printf "%s.%s" $prefix $k) $v) -}}
  {{- end -}}
{{- else -}}
{{ $prefix }}={{ $value }}
{{ end -}}

data:
{{ template "envify" (list "" .Values.fields) | indent 2 }}


0 commentaires

1
votes

L'appel récursif au même modèle est simple. L'extrait ci-dessous fonctionne. Il doit convertir values.yaml en données configmap en tant que propriété.

{{- define "envify" -}}
{{- $prefix := index . 0 -}}
{{- $value := index . 1 -}}
{{- if kindIs "map" $value -}}
  {{- range $k, $v := $value -}}
    {{- if $prefix -}}
        {{- template "envify" (list (printf "%s.%s" $prefix $k) $v) -}}
    {{- else -}}
        {{- template "envify" (list (printf "%s" $k) $v) -}}
    {{- end -}}          
  {{- end -}}
{{- else -}}
{{ $prefix | indent 2 }}={{ $value }}
{{ end -}}
{{- end -}}


0 commentaires