Helm合并预定义与values中listenerProcessor数组后遍历报错问询
问题原因
你调用fromYaml解析nifi.listener-processor.spec模板输出的内容后,得到的是一个顶层包含listenerProcessor(监听器处理器)键的字典对象,而非直接的监听器处理器数组。你直接遍历这个顶层字典时,遍历到的第一个元素键是listenerProcessor,值才是你需要的处理器数组,自然无法直接读取.name字段。
修复方案
1. 修正_helper.tpl中的数组合并逻辑
你当前的模板拼接逻辑存在两个问题:一是values.yaml中listenerProcessor是顶层数组,没有.ports子属性,你调用.Values.listenerProcessor.ports会取空值;二是拼接自定义数组时没有处理缩进,会导致生成的YAML结构异常。修正后的模板如下:
{{- define "nifi.listener-processor.spec" -}} listenerProcessor: - name: nbinorc port: 9910 allowedPath: - /nbi/norc/tmf641/v4/orders/ - /nbi/norc/tmf645/v4/serviceQualification - name: nbiuiv port: 9920 allowedPath: - /nbi/uiv/tmf640/v4/services/ {{- with .Values.listenerProcessor }} {{ toYaml . | nindent 2 }} {{- end }} {{- end -}}
这里用with判断避免listenerProcessor未定义时报错,用nindent 2保证自定义数组项的缩进和预定义项对齐,确保生成的YAML结构合法。
2. 修正NOTES.txt的遍历逻辑
解析YAML后先提取listenerProcessor数组再遍历即可:
{{- $listenerProcessorSpec := (include "nifi.listener-processor.spec" . ) | fromYaml }} {{- range $index, $element := $listenerProcessorSpec.listenerProcessor }} {{ .name }} {{ .port }} {{- end }}
内容的提问来源于stack exchange,提问作者user1184777
相关产品推荐
相关产品推荐

