首页 > 解决方案 > Helm 图表升级抛出“错误调用索引:未键入 nil 的索引”

问题描述

我有以下秘密定义:

apiVersion: v1
kind: Secret
metadata:
    name: "{{ .Release.Name }}-psql"
type: Opaque
stringData:
  {{ if not .Release.IsUpgrade }}
  dbReplPassword: {{ (randAlphaNum 23) | quote }}
  {{ else  }}
  dbReplPassword: {{ index (lookup "v1" "Secret" .Release.Namespace "{{ .Release.Name }}-psql").data "dbReplPassword" | b64dec | quote }}
  {{ end }}

在初始安装我的 helm chart 时,一切正常。但是当我升级我的掌舵图时,它显示了以下错误:

pgsql.yaml:11:21: 在 <index (lookup "v1" "Secret" .Release.Namespace "{{ .Release.Name }}-psql").data 处执行“helm-chart/templates/pgsql.yaml” “dbReplPassword”>:错误调用索引:无类型 nil 的索引

我想问题是查找函数的“{{ .Release.Name }}-psql”部分,但我不知道如何解决这个问题。有人知道我该如何解决吗?

标签: kuberneteskubernetes-helm

解决方案


你不能像这样嵌套 Helm 模板。标准Gotext/template语言包含一个printf函数,可用于从参数构造字符串,因此请改用它:

... (lookup "v1" "Secret" .Release.Namespace (printf "%s-psql" .Release.Name)) ...

将这个复杂的表达式分解为多个变量可能会更清楚:

{{- $secretName := printf "%s-psql" .Release.Name }}
{{- $secret := lookup "v1" "Secret" .Release.Namespace $secretName }}
dbReplPassword: {{ $secret.data.dbReplPassword | b64dec | quote }}

推荐阅读