kubernetes - 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”部分,但我不知道如何解决这个问题。有人知道我该如何解决吗?
解决方案
你不能像这样嵌套 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 }}
推荐阅读
- python - 从数据框中自动制作多个条形图
- c++ - 为什么即使 std::getline 不返回布尔值,while(std::getline) 循环也能工作?
- pandas - 使用 GroupBy 后,列如何在 Pandas 数据框中工作
- blockchain - 如何在卡尔达诺中创建不可转让资产
- php - 如何在前端隐藏缺货并分配给某些产品类别的产品?
- linux - 如何在 dockerfile 中运行 diff php 文件?
- python - 如何在Python中以小时和分钟的格式打印两分钟前的时间
- for-loop - 在 1 个过程中为一个信号分配多个值
- vue.js - 静态渲染后运行 Nuxt 中间件客户端
- c# - 打字稿更新视图与进度