Конвертировать yaml в файл свойств в шаблоне helm - PullRequest
1 голос
/ 12 февраля 2020

Я хотел бы преобразовать часть структуры в values.yaml в файл свойств на карте конфигурации.

Можно ли преобразовать структуру yaml, например:

field1: value1
field2:
   field21: value21
   field22: value22

в

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

с шаблонными функциями Хелма?

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

Вам нужно будет ввести значения в отдельный ключ и некоторые Функции шаблона Sprig в вашем Configmap.

values.yaml

fields:
  field1: value1
  field2:
    field21: value21
    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 -}}

шаблон руля. -x templates / configmap.yaml

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

Я предлагаю извлечь этот файл logi c в _helpers.tpl . Вам нужно будет добавить больше логи c, если у вас есть больше вложенных конфигов.

2 голосов
/ 12 февраля 2020

Как проблема программирования, это простой рекурсивный вызов. Вы можете использовать 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 .) }}
...