Helm循环生成多KafkaConnector模板问题:无法遍历多配置节点
Helm模板生成多个KafkaConnector资源问题解决
问题背景
需要通过Helm从values.yaml的特定映射结构生成多个KafkaConnector资源,现有模板仅能遍历单个节点,需通过两层循环实现完整遍历。
values.yaml配置示例
Definition: Information: - db.user: name: aaa key: bbb - db.secret: name: aaa key: ccc - db.host: hosntame - db.port: 1234 Information1: - db.user: name: zzz key: yyy - db.secret: name: zzz key: vvv - db.host: hosntame1 - db.port: 1235
修正后的Helm模板(connector.yaml)
通过两层range循环实现遍历:第一层处理Definition下的每个连接器条目,第二层解析每个条目的配置项。
{{- range $connName, $configList := .Values.Definition }} --- apiVersion: {{ $.Values.apiVersion }} kind: KafkaConnector metadata: name: {{ include "common.names.fullname" $ }}-{{ $connName }} spec: class: need config: {{- range $item := $configList }} {{- $k := (keys $item) | first }} {{- $v := index $item $k }} {{- if eq $k "db.secret" }} {{ $k }}: ${secrets:{{ $v.name }}/{{ $v.key }}} {{- else if kindIs "map" $v }} {{ $k }}: {{ $v.key }} {{- else }} {{ $k }}: {{ $v }} {{- end }} {{- end }} {{- end }}
模板关键逻辑说明
- 第一层循环
range $connName, $configList := .Values.Definition:遍历Definition下的所有键值对,$connName是连接器名称(如Information、Information1),$configList是对应的配置数组。 - 第二层循环
range $item := $configList:遍历单个连接器的配置数组,每个数组项是单键映射,通过(keys $item) | first提取配置键名,index $item $k获取对应值。 - 配置值处理:针对
db.secret生成特定的${secrets:name/key}格式;对于db.user这类映射型配置,提取key字段值;普通字符串配置直接输出。
期望输出结果
apiVersion: apps/v1 kind: KafkaConnector metadata: name: connect-Information spec: class: need config: db.user: bbb db.secret: ${secrets:aaa/ccc} db.host: hosntame db.port: 1234 --- apiVersion: apps/v1 kind: KafkaConnector metadata: name: connect-Information1 spec: class: need config: db.user: yyy db.secret: ${secrets:zzz/vvv} db.host: hosntame1 db.port: 1235
内容的提问来源于stack exchange,提问作者esefe sgrgrz
相关产品推荐
相关产品推荐

