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

Helm模板遍历values.yaml数组遇字段解析错误,求助

解决Helm模板遍历数组时的can't evaluate field Values in type interface {}错误

错误根源

报错的核心是Helm range循环的上下文切换:当执行{{ range .Values.agent.admin_group }}时,循环内部的.变量会指向当前遍历到的数组元素(比如TEST_GROUP_1),而非全局的模板上下文。此时尝试访问.Values必然报错,因为字符串类型的元素不存在Values字段。

另外你的模板还有两处细节问题:

  1. Rolebinding模板中apiGroup: rbac. authorization.k8s.io多了一个空格,会导致K8s API识别失败
  2. 两个模板都错误地引用了整个admin_group数组,而非当前遍历的元素,无法生成正确的多组配置

修正后的模板

1. RoleBinding模板

{{- if .Values.agent.enabled }}
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
subjects:
  {{- range .Values.agent.admin_group }}
  - kind: Group
    apiGroup: rbac.authorization.k8s.io
    name: {{ . }}  # 直接用.获取当前遍历的组名
  {{- end}}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: view
{{- end -}}

2. Sync资源模板

如果需要在循环内访问全局的Values,要用$引用根上下文($始终指向全局模板上下文),同时添加资源分隔符---确保多资源能被K8s正确识别:

{{- if .Values.agent.enabled }}
{{- range .Values.agent.admin_group }}
kind: Sync
apiVersion: group.xxx.com/v1alpha1
metadata:
  name: group-sync-{{ $.Values.agent.namespace }}  # 用$访问全局Values
  namespace: {{ $.Values.agent.namespace }}
spec:
  domain: external
  group: {{ . }}  # 用.获取当前遍历的组名
---
{{- end }}
{{- end -}}

补充说明

你的values.yaml结构完全正确,无需修改:

agent:
 namespace: "" # <values are subject to change>
 enabled: true
 admin_group:
   - "TEST_GROUP_1"
   - "TEST_GROUP_2"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:16