Как добавить счетчик в диапазон руля - PullRequest
0 голосов
/ 04 февраля 2020

Вот мой файл values.yaml:

options:
  collection: "myCollection"
  ttl: 100800
  autoReconnect: true
  reconnectTries: 3
  reconnectInterval: 5

Теперь я пытаюсь преобразовать его в JSON в моей configMap следующим образом:

options: {
  {{- range $key, $val := .Values.options }}
  {{ $key }}: {{ $val | quote }},
  {{- end }}
}

Но мне нужно убрать последнюю запятую в JSON, поэтому я пытаюсь добавить счетчик:

options: {
  {{ $c := 0 | int }}
  {{- range $key, $val := .Values.options }}
  {{ if ne $c 0 }},{{ end }}
  {{- $key }}: {{ $val | quote }}
  {{ $c := $c add 1 }}
  {{- end }}
}

Но я получаю следующую ошибку для шаблона helm ... команда:

at <$c>: can't give argument to non-function $c

Так что я делаю не так?

1 Ответ

1 голос
/ 04 февраля 2020

Helm имеет недокументированную toJson шаблонную функцию , поэтому, если вы можете получить ваши данные в правильном формате, вы можете просто попросить их сериализовать их.

Управление квотированием для встроенный JSON файл будет хитрым. Два хороших варианта - использовать блочный скаляр YAML, где отступ в начале строки разделяет содержимое, или обрабатывать его как двоичные данные .

apiVersion: v1
kind: ConfigMap
metadata:
  name: x
data:
  optionsAsBlockScalar: >-
{{ .Values.options | toJson | indent 4 }}
binaryData:
  optionsAsBase64: {{ .Values.options | toJson | b64enc }}

Обратите внимание, что этот подход сохранит нативные типы объектов в содержимом JSON; твой пример заставляет все струны. Если вам нужно, чтобы все было строкой, тогда библиотека поддержки Sprig содержит функции для преобразования произвольных объектов в строки и для изменения объекта словарного типа на месте, хотя это начинает попадать в досадную область написания реальных код на вашем языке шаблонов.

...