Как проблема программирования, это простой рекурсивный вызов. Вы можете использовать Go text/template
шаблоны, такие как функции. Единственная хитрость в том, что они принимают только один параметр, поэтому вам нужно использовать функцию sprig list
, чтобы упаковать несколько значений в этот параметр, и text/template
* Функция 1008 * для возврата значений.
{{- 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 }}
Это будет работать с произвольно глубокими вложенными значениями.
Если вы ссылаетесь на стандартные переменные Хелма (.Release
, .Values
,. ..) это также становится сложным, потому что переменная .
повторно используется для одного параметра шаблона (она также используется повторно в range
l oop). Я склонен явно передавать его в качестве дополнительного параметра шаблона.
{{- $top := index . 2 -}}
# from the {{ $top.Chart.Name }} Helm chart
{{/* in your ConfigMap proper */}}
{{ template "envify" (list "" .Values.fields .) }}