Что я пытаюсь сделать
Я хочу иметь некоторые настройки и параметры по умолчанию в 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
Мой вопрос ..
Как я могу исправить это падение?
Или как мне добиться того, что я пытаюсь сделать?