Helm Chart ConfigMap模板导入YAML文件格式错乱解决方案
Helm ConfigMap导入外部YAML配置缩进错乱修复
问题场景
Helm Chart开发中,需将files目录下存储的Java SpringBoot应用YAML配置文件导入ConfigMap,文件可正常导入,但导入后内容原有缩进结构丢失、格式错乱,无法被SpringBoot应用正常识别。
初始实现与问题表现
- 待导入的SpringBoot YAML配置示例:
spring: jpa: hibernate: ddl-auto: none naming: implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl database-platform: org.hibernate.dialect.MySQL5InnoDBDialect #database-platform: org.hibernate.dialect.PostgreSQL95Dialect datasource: #### MYSQL #### url: jdbc:mysql://mysql:3306/database username: user password: useabetteruserpassword driver-class-name: com.mysql.cj.jdbc.Driver
- 初始ConfigMap模板写法:
{{- if .Values.configMap.enabled -}} apiVersion: v1 kind: ConfigMap metadata: name: configmap-local data: {{ (.Files.Glob "files/*").AsConfig | indent 2 }} {{- end }}
- 异常表现:执行
helm --dry-run验证时,导入的YAML内容被转义为携带\r\n换行符的字符串,原有换行、缩进格式完全丢失。
可行解决方案
通过逐文件读取+YAML多行块语法+缩进控制的组合写法可彻底解决该问题,参考模板如下:
{{- if .Values.configMap.enabled -}} apiVersion: v1 kind: ConfigMap metadata: name: configmap-local data: info-center-docker.yaml: |- {{- .Files.Get "files/info-center-docker.yaml" | nindent 4 -}} info-center-writer-docker.yaml: |- {{- .Files.Get "files/info-center-writer-docker.yaml" | nindent 4 -}} topic-configuration-3p.yaml: |- {{- .Files.Get "files/topic-configuration-3p.yaml" | nindent 4 -}} {{- end }}
核心逻辑:使用
|-标识YAML多行字面量块,配合nindent函数为读取到的文件内容统一添加匹配层级的前置缩进,保证渲染后ConfigMap内的配置文件与原文件格式完全一致。
内容的提问来源于stack exchange,提问作者joaovicaria
相关产品推荐
相关产品推荐

