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 回答