Helm模板遍历标量块列表报错:无法解析interface{}类型字段
解决Helm模板报错:can't evaluate field name in type interface {}
错误原因
你在values.yaml里把myTest定义成了多行字符串(使用|-),虽然内容是YAML格式,但Helm读取时会将其当作字符串处理。模板里用fromYaml解析后,返回的数组元素是interface{}类型,Go模板无法直接访问其name、url字段,从而触发报错。
解决方案
方案1:修改values.yaml为原生YAML数组(推荐)
把myTest从多行字符串改成直接的YAML数组,Helm会自动识别为数组类型,无需额外解析:
myTest: - name: app1 url: https://example.com/app1 - name: app2 url: https://example.com/app2
同步修改模板,去掉| fromYaml部分,直接遍历.Values.myTest:
{{- range $i, $item := .Values.myTest }} apiVersion: v1 kind: ConfigMap metadata: name: config-{{ $item.name }} data: url: {{ $item.url }} --- {{- end }}
方案2:保留多行字符串,优化模板解析
如果必须保留values.yaml的多行字符串格式,可通过键名索引的方式访问字段,绕开Go模板的类型推断问题:
修改模板如下:
{{- $myTest := .Values.myTest | fromYaml }} {{- range $i, $item := $myTest }} apiVersion: v1 kind: ConfigMap metadata: name: config-{{ index $item "name" }} data: url: {{ index $item "url" }} --- {{- end }}
内容的提问来源于stack exchange,提问作者user1657425
相关产品推荐
相关产品推荐

