#kubernetes-helm #helm3
#кубернетес-рулевой #helm3
Вопрос:
При использовании Helm v3 следующий шаблон выходит из строя с ошибкой:
Error: INSTALLATION FAILED: template: rabbitmq/templates/secrets.yaml:4:31: executing "rabbitmq/templates/secrets.yaml" at lt;.Values.global.rabbitmq.passwordgt;: nil pointer evaluating interface {}.rabbitmq
Содержание rabbitmq/templates/secrets.yaml
:
{{- $def := index .Values "default" -}} apiVersion: v1 data: rabbitmq-password: {{ $def.global.rabbitmq.password | default $def.RABBITMQ_PASSWORD | b64enc | quote }} rabbitmq-erlang-cookie: {{ randAlphaNum 20 | b64enc | quote }} kind: Secret metadata: name: rabbitmq-password type: Opaque
Это работает, когда .Values.global.{}
существует. Однако, .Values.global
$def.RABBITMQ_PASSWORD
когда его не существует, он не возвращается, как я ожидал бы.
Ответ №1:
В вашем коде переменная $def
всегда .Values.default
(то есть все, что находится под ключом верхнего уровня default:
в values.yaml
файле). Вероятно, это не то, чего ты хочешь.
Шаблон, который я нашел здесь успешным, заключается в том, чтобы установить переменную для каждого уровня иерархии, по умолчанию используя пустой словарь, если он не существует. Это позволит вам выполнять рекурсивный поиск.
Я предполагаю, что , когда вы говорите $def.global
, вы действительно имеете .Values.global
в виду объект верхнего уровня, который имеет особое значение в контексте подсхемы Helm. Таким образом, вы могли бы безопасно выполнять эти поиски, например:
{{- $def := .Values.default | default dict }} {{- $global := .Values.global | default dict }} {{- $rabbitmq := $global.rabbitmq | default dict }} rabbitmq-password: {{ $rabbitmq.password | default $def.RABBITMQ_PASSWORD | b64enc | quote }}