[DCAE] Updates to defaults for configmap 27/121727/12
authorJack Lucas <jflos@sonoris.net>
Mon, 7 Jun 2021 20:40:31 +0000 (16:40 -0400)
committerSylvain Desbureaux <sylvain.desbureaux@orange.com>
Wed, 30 Jun 2021 06:32:09 +0000 (06:32 +0000)
Make external configMaps optional by
default for microservices
Make applicationConfig an optional parameter
in values.yaml for microservices.

Issue-ID: DCAEGEN2-2770
Issue-ID: DCAEGEN2-2782
Signed-off-by: Jack Lucas <jflos@sonoris.net>
Change-Id: I80ec8e4a1d55201c5a174f50159bac171953b031

kubernetes/dcaegen2-services/common/dcaegen2-services-common/templates/_configmap.tpl
kubernetes/dcaegen2-services/common/dcaegen2-services-common/templates/_deployment.tpl

index 46f52b8..1dff4d0 100644 (file)
@@ -40,6 +40,7 @@ information for the logging sidecar.
 */}}
 
 {{- define "dcaegen2-services-common.configMap" -}}
+{{- $appConf := .Values.applicationConfig | default (dict) -}}
 apiVersion: v1
 kind: ConfigMap
 metadata:
@@ -48,7 +49,7 @@ metadata:
     labels: {{ include "common.labels" . | nindent 6 }}
 data:
   application_config.yaml: |
-{{ .Values.applicationConfig | toYaml | indent 4 }}
+{{ $appConf | toYaml | indent 4 }}
 
 {{- if .Values.logDirectory }}
 ---
index 328a4c6..ffff46f 100644 (file)
@@ -79,7 +79,7 @@ to give the microservice access to data in volumes created else.
 This initial implementation supports ConfigMaps only, as this is the only
 external volume mounting required by current microservices.
 
-.Values.externalValues is a list of objects.  Each object has 3 required fields and 1 optional field:
+.Values.externalVolumes is a list of objects.  Each object has 3 required fields and 2 optional fields:
    - name: the name of the resource (in the current implementation, it must be a ConfigMap)
      that is to be set up as a volume.  The value is a case sensitive string.  Because the
      names of resources are sometimes set at deployment time (for instance, to prefix the Helm
@@ -91,6 +91,11 @@ external volume mounting required by current microservices.
      value is a case-sensitive string.
    - readOnly: (Optional) Boolean flag.  Set to true to mount the volume as read-only.
      Defaults to false.
+   - optional: (Optional) Boolean flag.  Set to true to make the configMap optional (i.e., to allow the
+     microservice's pod to start even if the configMap doesn't exist).  If set to false, the configMap must
+     be present in order for the microservice's pod to start. Defaults to true.  (Note that this
+     default is the opposite of the Kubernetes default.  We've done this to be consistent with the behavior
+     of the DCAE Cloudify plugin for Kubernetes [k8splugin], which always set "optional" to true.)
 
 Here is an example fragment from a values.yaml file for a microservice:
 
@@ -101,16 +106,19 @@ externalVolumes:
   - name: '{{ include "common.release" . }}-another-example'
     type: configmap
     mountPath: /opt/app/otherconfig
+    optional: false
 */}}
 {{- define "dcaegen2-services-common._externalVolumes" -}}
   {{- $global := . -}}
   {{- if .Values.externalVolumes }}
     {{- range $vol := .Values.externalVolumes }}
       {{- if eq (lower $vol.type) "configmap" }}
-        {{- $vname := (tpl $vol.name $global) }}
+        {{- $vname := (tpl $vol.name $global) -}}
+        {{- $opt := hasKey $vol "optional" | ternary $vol.optional true }}
 - configMap:
     defaultMode: 420
     name: {{ $vname }}
+    optional: {{ $opt }}
   name: {{ $vname }}
       {{- end }}
     {{- end }}