Сбой диаграммы Хелма с «интерфейсом оценки нулевого указателя {}» при попытке оценить отсутствующий вложенный ключ - PullRequest
1 голос
/ 11 апреля 2020

Я пишу библиотечную диаграмму Helm 3 и хотел бы создать YAML со значениями по умолчанию. Тем не менее, при попытке установить значение по умолчанию для вложенного ключа, который не существует, Helm завершается ошибкой со следующим сообщением об ошибке:

nil pointer evaluating interface {}

Скажите, что у меня есть этот фрагмент в моем объекте Kubernetes:

{{- if eq (.Values.deployment.scale.type | default "static") "static" }}
  replicas: {{ default "3" .Values.deployment.scale.replicas }}
{{- end }}

Если определено .Values.deployment.scale, шаблон будет хорошо отображаться, и значение replicas будет равно 3, даже если .Values.deployment.scale.replicas не определено.

Однако, если один из родительских ключей не определен, Helm завершится с ошибкой с сообщением об ошибке выше. Например, если values.yaml следующее:

# values.yaml
deployment:
  not_scale: {}

Визуализация завершится неудачно с: nil pointer evaluating interface {}.scale

Как можно установить значение по умолчанию для вложенного ключа, даже если его родительские ключи не определены?

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Я не думаю, что вы можете установить значение по умолчанию для этого случая. Вам необходимо предварительно проверить, существует ли поле scale. Для этого вы можете использовать функцию hasKey от sprig :

{{- if hasKey .Values.deployment "scale" }}
{{- if eq (.Values.deployment.scale.type | default "static") "static" }}
replicas: {{ default "3" .Values.deployment.scale.replicas }}
{{- end }}
{{- else }}
replicas: 3
{{- end }}
0 голосов
/ 13 апреля 2020

Я решил решить эту проблему, используя пошаговую оценку иерархии и используя default dict, чтобы назначить пустую карту, если ключ не существует. Он работает и выглядит лучше.

Пример:

{{ $deployment := default dict .Values.deployment }}
{{ $scale      := default dict $deployment.scale }}
{{- if eq ($scale.type | default "static") "static" }}
  replicas: {{ default "3" $scale.replicas }}
{{- end }}
...