Helm 当变量子键不存在时回退到默认的下一个变量
Helm when variable child key does not exist fallback to default next variable
使用 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
。
在您的代码中,变量 $def
始终是 .Values.default
(即 values.yaml
文件中顶级键 default:
下的任何内容)。这可能不是你想要的。
我在这里发现成功的模式是为层次结构的每个级别设置一个变量,如果它不存在则默认为一个空字典。这将使您可以进行递归查找。
我猜,当你说 $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 }}
使用 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
。
在您的代码中,变量 $def
始终是 .Values.default
(即 values.yaml
文件中顶级键 default:
下的任何内容)。这可能不是你想要的。
我在这里发现成功的模式是为层次结构的每个级别设置一个变量,如果它不存在则默认为一个空字典。这将使您可以进行递归查找。
我猜,当你说 $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 }}