如何将Helm模板中的YAML配置转换为JSON格式ConfigMap内容?
解决Helm模板中将YAML配置转为格式化JSON的问题
在Helm里要把YAML配置转成标准JSON输出到ConfigMap,核心是利用Helm内置的模板函数处理:
核心函数说明
toJson:将Go类型(如map、结构体)转为紧凑的JSON字符串toPrettyJson:生成带换行、缩进的格式化JSON,可读性更强fromYaml:如果你的配置在values里是多行YAML字符串,需要先用这个函数解析为map对象,再转JSON
场景1:Values中是结构化YAML(已被Helm解析为map)
假设你的values.yaml结构如下:
serviceName: my-service configMaps: - name: app-config appSettings: featureFlags: enableAuth: true database: host: db.example.com port: 5432
修改templates/configmap.yaml模板,用toPrettyJson生成格式化JSON,同时用nindent保证YAML缩进正确:
{{- range .Values.configMaps }} apiVersion: v1 kind: ConfigMap metadata: name: {{ .name }} labels: app: {{ $.Values.serviceName }} data: config.json: {{ .appSettings | toPrettyJson | nindent 4 }} {{- end }}
场景2:Values中是多行YAML字符串
如果你的values.yaml里存的是原始YAML字符串(比如用户输入的多行内容):
serviceName: my-service configMaps: - name: app-config yamlContent: | featureFlags: enableAuth: true database: host: db.example.com port: 5432
需要先通过fromYaml解析字符串为map,再转JSON:
{{- range .Values.configMaps }} apiVersion: v1 kind: ConfigMap metadata: name: {{ .name }} labels: app: {{ $.Values.serviceName }} data: config.json: {{ .yamlContent | fromYaml | toPrettyJson | nindent 4 }} {{- end }}
注意事项
- 不要直接输出map对象(比如
{{ .appSettings }}),这会打印Go的map字符串表示,不是标准JSON nindent的数字要和YAML层级匹配,比如上面例子里data:下缩进4个空格,所以用nindent 4- 如果需要紧凑的JSON(节省空间),把
toPrettyJson换成toJson即可
内容的提问来源于stack exchange,提问作者David Pilger
相关产品推荐
相关产品推荐

