You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为YAML块创建Helm模板?解决SecretProviderClass部署报错

解决Helm模板中SecretProviderClass的nil pointer错误

问题场景

创建Helm Chart部署K8s的SecretProviderClass时,模板化特定YAML块遇到报错。

需要生成的目标YAML:

objects:  |
  array:
    - |
      objectName: secret1
      objectType: secret
    - |
      objectName: secret2
      objectType: secret

当前使用的Values文件:

vault:
  secrets:
.   array:
      - |
        objectName: secret1
        objectType: secret
      - |
        objectName: secret2
        objectType: secret

Helm模板代码:

objects:  |
  array:
    {{ .Values.vault.secrets.array | toJson | nindent 6 }}

运行时触发错误:

Error: at <.Values.vault.secrets.array>: nil pointer evaluating interface {}.array

错误原因

  1. Values文件语法错误:secrets节点下的array前有多余的点号和缩进问题,导致Helm无法正确解析该配置,使得.Values.vault.secrets为nil,访问.array时触发nil pointer错误。
  2. 模板转换方式错误:使用toJson会将数组转为JSON格式,无法生成目标YAML要求的多行字符串结构。

解决方案

1. 修复Values文件语法

删除多余的点号,确保缩进符合YAML规范:

vault:
  secrets:
    array:
      - |
        objectName: secret1
        objectType: secret
      - |
        objectName: secret2
        objectType: secret

2. 调整Helm模板逻辑

使用range循环遍历数组元素,配合nindent处理缩进,直接渲染多行字符串:

objects:  |
  array:
    {{- range .Values.vault.secrets.array }}
    - |
      {{ . | nindent 6 }}
    {{- end }}

3. 可选:添加默认值增强鲁棒性

如果担心Values中未配置vault.secrets.array,可以添加默认值避免再次触发nil pointer错误:

objects:  |
  array:
    {{- range default list .Values.vault.secrets.array }}
    - |
      {{ . | nindent 6 }}
    {{- end }}

验证

执行helm template <chart-name>命令测试,生成的YAML应与目标格式一致。

内容的提问来源于stack exchange,提问作者user2006760

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:52:27