Ошибка рендеринга при разборе configmap в пакете helm - PullRequest
0 голосов
/ 16 октября 2019

У меня есть пакет helm, в котором values.yaml содержит что-то вроде:

ere:
  adm-users:
  - userName: test1
    password: test2
  - useName: user3
    password: user4

, и я хочу динамически включить эти значения в XML-файл, для которого в deploy.yaml я включил карту конфигурации,Мой configmap содержит что-то вроде:

data:
  PoolServer.xml: {{ tpl (.Files.Get "files/config/PoolServer.xml") . | nindent 4 }}

Внутри моего PoolServer.xml у меня есть этот контент:

{{- range $index, $val := .Values.ere.adm-users }}
<User Name="{{ tpl "{{ $val.userName }}" $ }} " Password="{{ tpl "{{ $val.password }}" $ }}" />
{{- end }

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

Когда я задерживаюсь, происходит сбой с ошибкой:

[ERROR] templates/: render error in "eric-em-ere/templates/deployment-ere.yaml": template: eric-em-ere/templates/deployment-ere.yaml:25:28: executing "eric-em-ere/templates/deployment-ere.yaml" at <include (print $.Tem...>: error calling include: template: eric-em-ere/templates/configmap.yaml:14:21: executing "eric-em-ere/templates/configmap.yaml" at <tpl (.Files.Get "fil...>: error calling tpl: Error during tpl function execution for "<User Name=\"{{ .Values.ere.adm-users.userName }}\" Password=\"{{ .Values.ere.adm-users.password }}\" />\r\n": parse error in "eric-em-ere/templates/deployment-ere.yaml": template: eric-em-ere/templates/deployment-ere.yaml:1: bad character U+002D '-'

Пожалуйста, помогите мне указать, что я делаю здесь неправильно.

1 Ответ

0 голосов
/ 17 октября 2019

Текстовая / шаблонная документация Go намекает на фактическое сообщение об ошибке: в выражениях .Values.foo.bar каждая часть должна быть действительным именем Go, которое не может содержать дефисы. Обычно имена значений имеют camelCased, поэтому вы можете изменить и ссылку на переменную, и имя значения на admUsers (заглавная "U", без дефиса).

Несколько слоев tpl сбивают с толку ивероятно, не нужно, если ваши userName и password всегда будут простыми строками. От вас также не требуется назначать итератор range чему-либо, и (в отличие от стандартного Go), если вы назначите только одну переменную, это будет значение.

Я, вероятно, записал бы этот цикл как:

{{/* Protect against .Values.ere being missing entirely */}}
{{- $ere := .Values.ere | default dict -}}
{{- range $ere.admUsers }}
<User Name="{{ .userName }}" Password="{{ .password }}" />
{{- end }}

Если вы хотите, чтобы можно было поместить синтаксис шаблона в файл values.yaml для имен пользователей и паролей, вам необходимо создать соответствующее выражение для tpl;вы не можете вложить синтаксис шаблона так, как вы его показали.

{{- $top := . -}}
{{- $ere := .Values.ere | default dict -}}
{{- range $ere.admUsers }}
<User Name="{{ tpl .userName $top }}" Password="{{ tpl .password $top }}" />
{{- end }}

Если вы хотите создать строку, подобную {{ .userName }}, и оценить ее, вы могли бы , но вьющиесяБрекеты в шаблонах становятся хитрыми. Я думаю, что внутреннее тело вашего цикла эквивалентно моей первой форме (в конечном итоге оно печатает userName и password каждого элемента в цикле).

...