Helm Преобразует многострочную строку меток диаграммы в строку, разделенную запятыми

# #kubernetes #kubernetes-helm #go-templates #helm3

Вопрос:

У меня есть метки в виде многострочной строки, _helpers.tpl как показано ниже. Как я могу преобразовать это в список, разделенный запятыми.

_helpers.tpl:-

 {{- define "mongo.selectorLabels" -}}
app: {{ include "mongo.name" . }}
release: {{ .Release.Name }}
{{- end }}
 

Ожидающий:

обогревает/yaml:-

           env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "{{- include "mongo.sidecar.pod.labels" . }}"

 
 value: "app=mongo,release=dev"
 

Псевдокод, который я пытаюсь использовать.

_helpers.tpl:-

 {{- define "mongo.sidecar.pod.labels" -}}
{{- $list := list -}}
{{- range $k, $v := ( include "mongo.selectorLabels" ) -}}
{{- $list = append $list (printf "%s="%s"" $k $v) -}}
{{- end -}}
{{ join ", " $list }}
{{- end -}}

 

Ответ №1:

Функция расширения Helm include всегда возвращает строку; поэтому вы не можете использовать range ее для перебора, как вы показали. Однако Helm также включает недокументированную fromYaml функцию расширения, которая может преобразовать строку в формате YAML обратно в форму объекта. Поэтому, если вы include используете вспомогательный шаблон, а затем вызываете fromYaml для анализа результат строки, вы можете range переопределить результат:

 {{- range $k, $v := include "mongo.selectorLabels" . | fromYaml -}}
 

Комментарии:

1. Получение wrong number of args for include: want 2 got 1 ошибки с вышеуказанным решением.

2. Я пропустил . «а», я отредактирую его.

3. Потрясающе, Сработало как шарм. Большое спасибо @David.

Ответ №2:

Я могу конвертировать значения в = отдельные пары ключ-значение. Как мы можем соединить их , и объединить в одну строку?

 {{- define "mongo.sidecar.pod.labels" -}}
{{ $lines := splitList "n" ( include "mongo.selectorLabels" .| nindent 1) -}}
{{- range $lines }}
{{- if not (. | trim | empty) -}}
{{- $kv := . | splitn ":" 2 -}}
{{ printf "%s=%s" $kv._0 ($kv._1 | trim) }}
{{ end -}}
{{- end -}}
{{- end -}}
 

Вывод с помощью приведенного выше кода:-

          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: " app=mongo
 release=v1
"