Helm模板遍历values.yaml数组遇字段解析错误,求助
解决Helm模板遍历数组时的
can't evaluate field Values in type interface {}错误 错误根源
报错的核心是Helm range循环的上下文切换:当执行{{ range .Values.agent.admin_group }}时,循环内部的.变量会指向当前遍历到的数组元素(比如TEST_GROUP_1),而非全局的模板上下文。此时尝试访问.Values必然报错,因为字符串类型的元素不存在Values字段。
另外你的模板还有两处细节问题:
- Rolebinding模板中
apiGroup: rbac. authorization.k8s.io多了一个空格,会导致K8s API识别失败 - 两个模板都错误地引用了整个
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
相关产品推荐
相关产品推荐

