0

Helm v3 を使用すると、次のテンプレートが壊れてエラーが発生します。

Error: INSTALLATION FAILED: template: rabbitmq/templates/secrets.yaml:4:31: executing "rabbitmq/templates/secrets.yaml" at <.Values.global.rabbitmq.password>: 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期待どおりにフォールバックしません。

4

1 に答える 1

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 }}
于 2021-12-06T15:42:12.373 に答える