Kubernetes - How to define ConfigMap built using a file in a yaml? Kubernetes - How to define ConfigMap built using a file in a yaml? kubernetes kubernetes

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

Chart Template Guide

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 against config.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 }}