Kubernetes - How to define ConfigMap built using a file in a yaml?
Your config.json
file should be inside your mychart/ directory, not inside mychart/templates
configmap.yaml
apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: config.json: |-{{ .Files.Get "config.json" | indent 4}}
config.json
{ "val": "key"}
helm install --dry-run --debug mychart
[debug] Created tunnel using local port: '52091' [debug] SERVER: "127.0.0.1:52091" ... NAME: dining-saola REVISION: 1 RELEASED: Fri Nov 23 15:06:17 2018 CHART: mychart-0.1.0 USER-SUPPLIED VALUES: {} ... --- # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: dining-saola-configmap data: config.json: |- { "val": "key" }
EDIT:
But I want it the values in the config.json file to be taken from values.yaml. Is that possible?
configmap.yaml
apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: config.json: |- {{{- range $key, $val := .Values.json }}{{ $key | quote | indent 6}}: {{ $val | quote }}{{- end}} }
values.yaml
json: key1: val1 key2: val2 key3: val3
helm install --dry-run --debug mychart
# Source: mychart/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: mangy-hare-configmapdata: config.json: |- { "key1": "val1" "key2": "val2" "key3": "val3" }
Here is an example of a ConfigMap
that is attached to a Deployment
:
ConfigMap:
---apiVersion: v1kind: ConfigMapmetadata: name: jksconfigdata: config.json: |-{{ .Files.Get "config.json" | indent 4 }}
Deployment:
---apiVersion: apps/v1beta2kind: Deploymentmetadata: name: jksapp labels: app: jksappspec: selector: matchLabels: app: jksapp template: metadata: labels: app: jksapp containers: - name: jksapp image: jksapp:1.0.0 ports: - containerPort: 8080 volumeMounts: - name: config #The name(key) value must match pod volumes name(key) value mountPath: /path/to/config.json volumes: - name: config configMap: name: jksconfig
Soln 01:
- insert your
config.json
file content into a template - then use this template into your
data
againstconfig.json
- then run
$ helm install
command
finally,
{{define "config"}}{ "a": "A", "b": { "b1": 1 }}{{end}}apiVersion: v1kind: ConfigMapmetadata: name: jksconfig labels: chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" app: "my-app" heritage: "{{ .Release.Service }}" release: "{{ .Release.Name }}"data: config.json: {{ (include "config" .) | trim | quote }}