I'm setting up a ConfigMap for my Helm chart.
As per good practice, I want to include non-yaml resources through separate files rather than inline. Currently I am trying to include both an xml file and a tpl helper in my ConfigMap under "data". Both are read without issue in the below code. But I cannot seem to make the indentation for the keys work properly.
My ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "name" . }}
labels:
app: {{ template "name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
release: {{ quote .Release.Name }}
heritage: {{ quote .Release.Service }}
name: {{ template "name" . }}
data:
logback.xml: |-
{{- .Files.Get "application-resources/logback.xml" | nindent 8 -}}
application.yml: |-
{{- include "application.yml" . | nindent 8 -}}
This produces the following indentation (actual values are removed for readability):
apiVersion: v1
kind: ConfigMap
metadata:
name: erklaering-anden-lov-detektor-app
labels:
app: name-of-app
chart: name-of-chart
release: "release-name"
heritage: "Tiller"
name: name-of-app
data:
logback.xml: |-
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<xml-stuff>
</configuration>
application.yml: |-
application.yml.contents
Which should be:
apiVersion: v1
kind: ConfigMap
metadata:
name: erklaering-anden-lov-detektor-app
labels:
app: name-of-app
chart: name-of-chart
release: "release-name"
heritage: "Tiller"
name: name-of-app
data:
logback.xml: |-
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<xml-stuff>
</configuration>
application.yml: |-
application.yml.contents
I'm at my wit's end. What am I doing wrong? How do I make yaml snap back to recognizing configMap's own indentation and/or explicitly control it?
Files.Get
assumes files terminated by linefeed. In case the XML file has carriage returns (as under Windows) Helm will issue the error message:error converting YAML to JSON: yaml: line 12: could not find expected ':'
. Just convert the XML file to linefeed. – Gaskins