You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Helm将values.yaml中application节点转为ConfigMap结构?

自动将Helm values中application节点转为ConfigMap的data映射

你可以通过Helm的模板函数或自定义模板片段,自动把application节点下的嵌套配置转成ConfigMap所需的点分隔键值对,两种可行方案如下:

方案1:使用Sprig的dotize函数(推荐)

若你的Helm版本在3.5及以上(默认集成Sprig 2.10+),可直接用dotize函数一键扁平化嵌套结构:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "helper.app-name" . }}-config
data:
  {{- range $key, $value := .Values.application | dotize }}
  {{ $key }}: {{ $value | toString | quote }}
  {{- end }}

说明:

  • dotize函数会自动将嵌套的YAML层级(比如application.database.jdbcUrl)转换为点分隔的键名
  • toString确保所有值转为字符串格式,quote为字符串添加引号,避免ConfigMap出现格式错误

方案2:自定义递归模板(兼容低版本Helm)

若你的Helm版本较低,没有dotize函数,可以定义递归模板片段遍历嵌套结构:

首先在模板文件中添加自定义模板定义:

{{- define "flatmap" }}
{{- $path := .path }}
{{- range $k, $v := .value }}
{{- $newPath := printf "%s.%s" $path $k | trimPrefix "." }}
{{- if kindIs "map" $v }}
{{- include "flatmap" (dict "path" $newPath "value" $v) }}
{{- else }}
{{ $newPath }}: {{ $v | toString | quote }}
{{- end }}
{{- end }}
{{- end }}

然后在ConfigMap中引用该模板:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "helper.app-name" . }}-config
data:
  {{- include "flatmap" (dict "path" "" "value" .Values.application) }}

说明:

  • 该自定义模板会递归遍历application下的所有节点,将嵌套层级拼接成点分隔的键名
  • 无论嵌套多少层,都能正确生成ConfigMap所需的键值对格式

内容的提问来源于stack exchange,提问作者xbmono

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:32:24