如何基于Helm Values中multiPod变量生成不同名称的ConfigMap?
问题需求
需要根据Values文件中的multiPod变量生成不同名称的ConfigMap:
- 当
multiPod设为true时,基于region列表生成对应数量的ConfigMap - 当
multiPod设为false时,基于父级key(如storage、compute)生成单个ConfigMap
当前配置与输出
现有ConfigMap模板(templates/configmap.yaml)
{{- range $keys, $values := $.Values.topicsToRead }} {{- if $values.multiPod }} {{- range $values.region }} --- apiVersion: v1 kind: ConfigMap metadata: name: cm-{{ . }} data: features.toml: | [features] x_enabled = false {{- end -}} {{- end }} {{- end }}
Values.yaml配置
topicsToRead: compute: multiPod: true region: - region815 - region816 - region817 storage: multiPod: false region: - region715 - region716 - region717
当前执行结果
执行命令 helm template -s templates/configmap.yaml . 后输出:
--- # Source: helm-chart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: cm-region815 data: features.toml: | [features] x_enabled = false --- # Source: helm-chart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: cm-region816 data: features.toml: | [features] x_enabled = false --- # Source: helm-chart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: cm-region817 data: features.toml: | [features] x_enabled = false
期望输出
--- # Source: helm-chart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: cm-region815 data: features.toml: | [features] x_enabled = false --- # Source: helm-chart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: cm-region816 data: features.toml: | [features] x_enabled = false --- # Source: helm-chart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: cm-region817 data: features.toml: | [features] x_enabled = false --- # Source: helm-chart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: cm-storage data: features.toml: | [features] x_enabled = false
解决方案
修改ConfigMap模板,添加else分支处理multiPod: false的场景,使用遍历得到的$keys作为ConfigMap名称的后缀:
{{- range $keys, $values := $.Values.topicsToRead }} {{- if $values.multiPod }} {{- range $values.region }} --- apiVersion: v1 kind: ConfigMap metadata: name: cm-{{ . }} data: features.toml: | [features] x_enabled = false {{- end -}} {{- else }} --- apiVersion: v1 kind: ConfigMap metadata: name: cm-{{ $keys }} data: features.toml: | [features] x_enabled = false {{- end }} {{- end }}
修改后重新执行helm template -s templates/configmap.yaml .,即可得到期望的输出。
内容的提问来源于stack exchange,提问作者Raghavendra
相关产品推荐
相关产品推荐

