Иерархия значений для конфигурации динамического рулевого управления - PullRequest
0 голосов
/ 04 января 2019

Что я пытаюсь сделать

Я хочу иметь некоторые настройки и параметры по умолчанию в values.yaml, а затем хэш-карту различных экземпляров, которые будут преобразованы в службы и развертывания, чьи отдельныенастройки переопределяют значения по умолчанию.

values.yaml

someSetting: TheDefault
deployments:
  one:
    role: XYZ
  two:
    role: ABC
    someSetting: Overridden

В приведенном выше случае будет два развертывания и службы, one и two.Значение для someSetting для one будет TheDefault, а для two будет Overridden.

actual template yaml

Я пытаюсь это - построитьсловарь, $p, в котором находятся объекты корневой области Chart и Release, затем объединены значения корневой области, затем объединено текущее значение развертывания.

{{- range $deploymentKey, $deploymentVal := .Values.deployments }}
{{- $p := dict "deploymentKey" $deploymentKey }}
{{- $_ := set $p "Chart" $.Chart }}
{{- $_ := set $p "Release" $.Release }}
{{- $_ := merge $p $.Values }}
{{- $_ := merge $p . }}
...
{{- end }}

причина включения Chart и Release заключается в том, что, несмотря на то, что говорится в документации, $.Chart не всегда доступен - он буквально пуст, когда я передаю область в шаблон, и этот шаблон пытается использовать $. для ссылки накорневая область.

Поэтому я делаю такие вещи, как:

name: {{ template "my-app.fullname" $p }}

и

image: {{ $p.image.name }}

Ошибка

Проблема в том, что хотя helm lint не возвращает ошибок, helm template . (или пробный прогон) дает:

Error: rendering template failed: runtime error: invalid memory address or nil pointer dereference

То, что я пробовал

  • Удаление каждого merge, чтобы попытаться сузить аварию - они, похоже, не вызывают его
  • Обычное слияние $ в словарь
  • Плач
  • Задавание провала в шлеме
  • Задание проблем с GitHub

Мой вопрос ..

Как я могу исправить это падение?

Или как мне добиться того, что я пытаюсь сделать?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

попробуйте это:

deployment.yaml:

{{- range $deploymentKey, $deploymentVal := .Values.deployments }}
{{- $p := dict "deploymentKey" $deploymentKey }}
{{- $_ := set $p "Chart" $.Chart }}
{{- $_ := set $p "Release" $.Release }}
{{- $_ := merge $p . }}
{{- $_ := merge $p $.Values }}
...
{{ end }}

_helpers.tpl:

{{- define "repro.fullname" -}}
{{- printf "%s" .Chart.Name }}
{{- end -}}
0 голосов
/ 04 января 2019

Вместо этого вы можете создать общую базовую диаграмму со значениями по умолчанию и ванильным обслуживанием и развертыванием, а затем создать зонтичную диаграмму, включающую базовую диаграмму дважды под псевдонимами «один» и «два».Затем в файле значений зонтичной диаграммы вы переопределяете значения по умолчанию, и вам не нужен словарь.

В качестве примера приведена базовая диаграмма - https://github.com/ryandawsonuk/configmaps-transformers/tree/master/helm/transformers/charts/transformer, а зонтичная диаграмма включает еенесколько раз под разными псевдонимами - https://github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/requirements.yaml. Файл значений зонтичной диаграммы содержит разные значения для каждого включенного экземпляра базовой диаграммы.В значениях зонтика на каждый экземпляр ссылается его псевдоним - https://github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/values.yaml#L14

...