From 1a2ade4a3c4f20f9f968affef2317124255c0cb1 Mon Sep 17 00:00:00 2001 From: Andrea Borghi Date: Thu, 22 Dec 2022 16:02:21 +0100 Subject: [PATCH] GEO-6100: add logic for range over services --- Chart.yaml | 2 +- templates/deployment.yaml | 45 +++--- templates/ingress.yaml | 53 ------- templates/pdb.yaml | 13 +- templates/service.yaml | 18 ++- tests/expected.yaml | 283 +++++++++++++++++++++++----------- tests/mapserver-expected.yaml | 0 tests/values.yaml | 212 +++++++++++++++---------- values.yaml | 68 ++++---- 9 files changed, 409 insertions(+), 285 deletions(-) delete mode 100644 templates/ingress.yaml delete mode 100644 tests/mapserver-expected.yaml diff --git a/Chart.yaml b/Chart.yaml index 1670a6c..1f13356 100644 --- a/Chart.yaml +++ b/Chart.yaml @@ -6,4 +6,4 @@ version: 0.1.0 dependencies: - name: common repository: https://camptocamp.github.io/helm-common - version: 0.3.0 + version: 0.4.0 diff --git a/templates/deployment.yaml b/templates/deployment.yaml index 6b3a242..13964bc 100644 --- a/templates/deployment.yaml +++ b/templates/deployment.yaml @@ -1,22 +1,28 @@ +{{- $root := . -}} +{{- $values := .Values -}} + +{{- range $serviceName, $serviceDefinition := $values.services }} +{{- if eq $serviceDefinition.enabled true }} +--- apiVersion: apps/v1 kind: Deployment metadata: - name: {{ include "common.fullname" ( dict "root" . "service" .Values ) }} - {{- include "common.metadata" ( dict "root" . "service" .Values ) | nindent 2 }} + name: {{ include "common.fullname" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) }} + {{- include "common.metadata" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) | nindent 2 }} spec: - replicas: {{ .Values.replicaCount }} - revisionHistoryLimit: {{ .Values.global.revisionHistoryLimit | default 3 }} + replicas: {{ $serviceDefinition.replicaCount | default 1 }} + revisionHistoryLimit: {{ $values.global.revisionHistoryLimit | default 3 }} strategy: type: RollingUpdate selector: - matchLabels: {{- include "common.selectorLabels" ( dict "root" . "service" .Values ) | nindent 6 }} + matchLabels: {{- include "common.selectorLabels" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) | nindent 6 }} template: - metadata: {{- include "common.podMetadata" ( dict "root" . "service" .Values ) | nindent 6 }} + metadata: {{- include "common.podMetadata" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) | nindent 6 }} spec: - {{- include "common.podConfig" ( dict "root" . "service" .Values ) | nindent 6 }} - {{- if .Values.initContainers }} + {{- include "common.podConfig" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) | nindent 6 }} + {{- if and (hasKey $serviceDefinition "initContainers") ($serviceDefinition.initContainers) }} initContainers: - {{- range $name, $config := .Values.initContainers }} + {{- range $name, $config := $serviceDefinition.initContainers }} - name: {{ $name }} {{- include "common.containerConfig" ( dict "root" $ "container" $config ) | nindent 10 }} {{- with $config.command }} @@ -26,12 +32,13 @@ spec: args: {{ $config.args | toYaml | nindent 12 }} {{- end }} {{- with $config.volumeMounts }} - volumeMounts: {{ $config.volumeMounts | toYaml | nindent 12 }} - {{- end }} + volumeMounts: + {{- include "common.dictToList" ( dict "keyName" "mountPath" "contents" . ) | nindent 12 -}} + {{- end -}} {{- end }} {{- end }} containers: - {{- range $name, $config := .Values.containers }} + {{- range $name, $config := $serviceDefinition.containers }} - name: {{ $name }} {{- include "common.containerConfig" ( dict "root" $ "container" $config ) | nindent 10 }} {{- with $config.command }} @@ -44,12 +51,12 @@ spec: {{- end }} {{- with $config.volumeMounts }} volumeMounts: - {{- . | toYaml | nindent 12 }} - {{- end }} + {{- include "common.dictToList" ( dict "keyName" "mountPath" "contents" . ) | nindent 12 -}} + {{- end -}} {{- with $config.ports }} ports: - {{- $config.ports | toYaml | nindent 12 }} - {{- end }} + {{- include "common.dictToList" ( dict "contents" . ) | nindent 12 -}} + {{- end -}} {{- with $config.livenessProbe }} livenessProbe: {{- toYaml . | nindent 12 }} @@ -63,7 +70,9 @@ spec: {{- toYaml . | nindent 12 }} {{- end }} {{- end }} - {{- with .Values.volumes }} + {{- with $serviceDefinition.volumes }} volumes: - {{- toYaml . | nindent 8 }} + {{- include "common.dictToList" ( dict "contents" . ) | nindent 8 -}} {{- end }} +{{- end }} +{{- end }} diff --git a/templates/ingress.yaml b/templates/ingress.yaml deleted file mode 100644 index 532a1de..0000000 --- a/templates/ingress.yaml +++ /dev/null @@ -1,53 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "common.fullname" ( dict "root" . "service" .Values ) -}} -{{- $svcPort := $.Values.ingress.servicePort -}} -{{- range $ingress_host := .Values.ingress.hosts }} ---- -{{- if semverCompare ">=1.19.0" ( trimPrefix "v" $.Capabilities.KubeVersion.Version ) }} -apiVersion: networking.k8s.io/v1 -{{- else -}} -{{- if semverCompare ">=1.14-0" $.Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }}-{{ $ingress_host.name }} - labels: {{ include "common.labels" ( dict "root" $ "service" $.Values ) | nindent 4 }} - {{- with $.Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: -{{- if $ingress_host.tls }} - tls: - {{- range $ingress_host.tls }} - - hosts: - - {{ $ingress_host.host }} - secretName: {{ $ingress_host.tls.secretName }} - {{- end }} -{{- end }} - rules: - - host: {{ $ingress_host.host }} - http: - paths: - {{- range $.Values.ingress.paths }} - - path: {{ . }} - {{- if semverCompare ">=1.14-0" $.Capabilities.KubeVersion.GitVersion }} - pathType: Prefix - {{- end }} - backend: - {{- if semverCompare ">=1.14-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end -}} - {{- end }} -{{- end }} -{{- end }} diff --git a/templates/pdb.yaml b/templates/pdb.yaml index 6a7dfb0..6296ca3 100644 --- a/templates/pdb.yaml +++ b/templates/pdb.yaml @@ -1,3 +1,8 @@ +{{- $root := . -}} +{{- $values := .Values -}} +{{- range $serviceName, $serviceDefinition := $values.services }} +{{- if eq $serviceDefinition.enabled true }} +--- {{- if semverCompare ">=1.21.0" ( trimPrefix "v" $.Capabilities.KubeVersion.Version ) }} apiVersion: policy/v1 {{- else -}} @@ -5,9 +10,11 @@ apiVersion: policy/v1beta1 {{- end }} kind: PodDisruptionBudget metadata: - name: {{ include "common.fullname" ( dict "root" . "service" .Values ) }} - labels: {{- include "common.selectorLabels" ( dict "root" . "service" .Values ) | nindent 4 }} + name: {{ include "common.fullname" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) }} + labels: {{- include "common.selectorLabels" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) | nindent 4 }} spec: maxUnavailable: 1 selector: - matchLabels: {{- include "common.selectorLabels" ( dict "root" . "service" .Values ) | nindent 6 }} + matchLabels: {{- include "common.selectorLabels" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) | nindent 6 }} +{{- end }} +{{- end }} diff --git a/templates/service.yaml b/templates/service.yaml index 98f4e22..ce7fcb8 100644 --- a/templates/service.yaml +++ b/templates/service.yaml @@ -1,13 +1,21 @@ +{{- $root := . -}} +{{- $values := .Values -}} + +{{- range $serviceName, $serviceDefinition := $values.services }} +{{- if eq $serviceDefinition.enabled true }} +--- apiVersion: v1 kind: Service metadata: - name: {{ include "common.fullname" ( dict "root" . "service" .Values ) }} - labels: {{ include "common.labels" ( dict "root" . "service" .Values ) | nindent 4 }} + name: {{ include "common.fullname" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) }} + labels: {{ include "common.labels" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) | nindent 4 }} prometheus: "true" spec: - type: {{ .Values.service.type }} - {{- with .Values.service.ports }} + type: {{ $serviceDefinition.service.type }} + {{- with $serviceDefinition.service.ports }} ports: {{- . | toYaml | nindent 4 }} {{- end }} - selector: {{- include "common.selectorLabels" ( dict "root" . "service" .Values ) | nindent 4 }} + selector: {{- include "common.selectorLabels" ( dict "root" $root "service" $serviceDefinition "serviceName" $serviceName ) | nindent 4 }} +{{- end }} +{{- end }} diff --git a/tests/expected.yaml b/tests/expected.yaml index 1738e1e..196652f 100644 --- a/tests/expected.yaml +++ b/tests/expected.yaml @@ -1,33 +1,50 @@ --- # Source: custom-pod/templates/pdb.yaml -apiVersion: policy/v1 +apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata: - name: custom-custom-pod + name: custom-custom-pod-with-serv labels: app.kubernetes.io/name: custom-pod app.kubernetes.io/instance: custom - app.kubernetes.io/component: main + app.kubernetes.io/component: with-service-name spec: maxUnavailable: 1 selector: matchLabels: app.kubernetes.io/name: custom-pod app.kubernetes.io/instance: custom - app.kubernetes.io/component: main + app.kubernetes.io/component: with-service-name +--- +# Source: custom-pod/templates/pdb.yaml +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + name: custom-with-name-override-example2 + labels: + app.kubernetes.io/name: with-name-override + app.kubernetes.io/instance: custom + app.kubernetes.io/component: example2 +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: with-name-override + app.kubernetes.io/instance: custom + app.kubernetes.io/component: example2 --- # Source: custom-pod/templates/service.yaml apiVersion: v1 kind: Service metadata: - name: custom-custom-pod + name: custom-custom-pod-with-serv labels: helm.sh/chart: custom-pod app.kubernetes.io/version: "1.0" app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: custom-pod app.kubernetes.io/instance: custom - app.kubernetes.io/component: main + app.kubernetes.io/component: with-service-name prometheus: "true" spec: type: ClusterIP @@ -39,20 +56,45 @@ spec: selector: app.kubernetes.io/name: custom-pod app.kubernetes.io/instance: custom - app.kubernetes.io/component: main + app.kubernetes.io/component: with-service-name +--- +# Source: custom-pod/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: custom-with-name-override-example2 + labels: + helm.sh/chart: custom-pod + app.kubernetes.io/version: "1.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: with-name-override + app.kubernetes.io/instance: custom + app.kubernetes.io/component: example2 + prometheus: "true" +spec: + type: ClusterIP + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: http + selector: + app.kubernetes.io/name: with-name-override + app.kubernetes.io/instance: custom + app.kubernetes.io/component: example2 --- # Source: custom-pod/templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: - name: custom-custom-pod + name: custom-custom-pod-with-serv labels: helm.sh/chart: custom-pod app.kubernetes.io/version: "1.0" app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: custom-pod app.kubernetes.io/instance: custom - app.kubernetes.io/component: main + app.kubernetes.io/component: with-service-name spec: replicas: 1 revisionHistoryLimit: 3 @@ -62,25 +104,23 @@ spec: matchLabels: app.kubernetes.io/name: custom-pod app.kubernetes.io/instance: custom - app.kubernetes.io/component: main + app.kubernetes.io/component: with-service-name template: metadata: labels: app.kubernetes.io/name: custom-pod app.kubernetes.io/instance: custom - app.kubernetes.io/component: main + app.kubernetes.io/component: with-service-name spec: serviceAccountName: default securityContext: - runAsNonRoot: true - runAsUser: 33 + {} affinity: {} initContainers: - name: aa securityContext: - runAsNonRoot: true - runAsUser: 33 + {} image: "camptocamp/custom-aa:latest" imagePullPolicy: IfNotPresent env: @@ -99,10 +139,17 @@ spec: - "3600" - name: bb securityContext: - runAsNonRoot: true - runAsUser: 33 + {} image: "camptocamp/custom-bb:latest" imagePullPolicy: IfNotPresent + env: + - name: "JWT_SECRET_KEY" + valueFrom: + secretKeyRef: + name: "jwt-key-secret" + key: "JWT_SECRET_KEY" + - name: "MY_ENV_VAR" + value: "some-value" terminationMessagePolicy: FallbackToLogsOnError resources: null @@ -110,13 +157,18 @@ spec: - sleep - "3600" volumeMounts: - - mountPath: /tmp/my-volume + - mountPath: /tmp/my-volume/config + name: my-volume + readOnly: true + subPath: config + - mountPath: /tmp/my-volume/data name: my-volume + subPath: data + containers: - name: cc securityContext: - runAsNonRoot: true - runAsUser: 33 + {} image: "camptocamp/custom-aa:latest" imagePullPolicy: IfNotPresent env: @@ -135,10 +187,17 @@ spec: - "3600" - name: dd securityContext: - runAsNonRoot: true - runAsUser: 33 + {} image: "camptocamp/custom-bb:latest" imagePullPolicy: IfNotPresent + env: + - name: "JWT_SECRET_KEY" + valueFrom: + secretKeyRef: + name: "jwt-key-secret" + key: "JWT_SECRET_KEY" + - name: "MY_ENV_VAR" + value: "some-value" terminationMessagePolicy: FallbackToLogsOnError resources: null @@ -146,12 +205,19 @@ spec: - sleep - "3600" volumeMounts: - - mountPath: /tmp/my-volume + - mountPath: /tmp/my-volume/config + name: my-volume + readOnly: true + subPath: config + - mountPath: /tmp/my-volume/data name: my-volume + subPath: data + ports: - - containerPort: 8080 - name: http + - name: http + containerPort: 8080 protocol: TCP + livenessProbe: httpGet: path: / @@ -171,73 +237,116 @@ spec: periodSeconds: 20 timeoutSeconds: 10 volumes: - - emptyDir: {} - name: my-volume ---- -# Source: custom-pod/templates/ingress.yaml -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: custom-custom-pod-int - labels: - helm.sh/chart: custom-pod - app.kubernetes.io/version: "1.0" - app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: custom-pod - app.kubernetes.io/instance: custom - app.kubernetes.io/component: main -spec: - rules: - - host: int.local - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: custom-custom-pod - port: - number: 8080 - - path: /custom - pathType: Prefix - backend: - service: - name: custom-custom-pod - port: - number: 8080 + - name: my-volume + emptyDir: {} --- -# Source: custom-pod/templates/ingress.yaml -apiVersion: networking.k8s.io/v1 -kind: Ingress +# Source: custom-pod/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment metadata: - name: custom-custom-pod-prod + name: custom-with-name-override-example2 labels: helm.sh/chart: custom-pod app.kubernetes.io/version: "1.0" app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: custom-pod + app.kubernetes.io/name: with-name-override app.kubernetes.io/instance: custom - app.kubernetes.io/component: main + app.kubernetes.io/component: example2 spec: - tls: - - hosts: - - prod.local - secretName: prod-custom - rules: - - host: prod.local - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: custom-custom-pod - port: - number: 8080 - - path: /custom - pathType: Prefix - backend: - service: - name: custom-custom-pod - port: - number: 8080 + replicas: 2 + revisionHistoryLimit: 3 + strategy: + type: RollingUpdate + selector: + matchLabels: + app.kubernetes.io/name: with-name-override + app.kubernetes.io/instance: custom + app.kubernetes.io/component: example2 + template: + metadata: + labels: + app.kubernetes.io/name: with-name-override + app.kubernetes.io/instance: custom + app.kubernetes.io/component: example2 + spec: + serviceAccountName: default + securityContext: + {} + affinity: + {} + containers: + - name: cc + securityContext: + {} + image: "camptocamp/custom-aa:latest" + imagePullPolicy: IfNotPresent + env: + - name: "TEST" + value: "aa" + terminationMessagePolicy: FallbackToLogsOnError + resources: + limits: + cpu: 100m + memory: 50Mi + requests: + cpu: 100m + memory: 50Mi + command: + - sleep + - "3600" + - name: dd + securityContext: + {} + image: "camptocamp/custom-bb:latest" + imagePullPolicy: IfNotPresent + env: + - name: "JWT_SECRET_KEY" + valueFrom: + secretKeyRef: + name: "jwt-key-secret" + key: "JWT_SECRET_KEY" + - name: "MY_ENV_VAR" + value: "some-value" + terminationMessagePolicy: FallbackToLogsOnError + resources: + null + args: + - sleep + - "3600" + volumeMounts: + - mountPath: /tmp/my-volume/config + name: my-volume + readOnly: true + subPath: config + - mountPath: /tmp/my-volume/data + name: my-volume + subPath: data + + ports: + - name: http + containerPort: 8080 + protocol: TCP + + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 5 + periodSeconds: 20 + timeoutSeconds: 10 + startupProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 5 + periodSeconds: 20 + timeoutSeconds: 10 + volumes: + - name: my-volume + emptyDir: {} + - name: my-volume-2 + emptyDir: {} diff --git a/tests/mapserver-expected.yaml b/tests/mapserver-expected.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/tests/values.yaml b/tests/values.yaml index aa616c8..d674c1f 100644 --- a/tests/values.yaml +++ b/tests/values.yaml @@ -1,84 +1,138 @@ -initContainers: - aa: &aa - image: - repository: camptocamp/custom-aa - tag: latest - sha: - command: - - sleep - - '3600' - resources: - limits: - cpu: '100m' - memory: '50Mi' - requests: - cpu: '100m' - memory: '50Mi' - env: - TEST: - value: 'aa' - bb: &bb - image: - repository: camptocamp/custom-bb - tag: latest - sha: - args: - - sleep - - '3600' - volumeMounts: - - name: my-volume - mountPath: /tmp/my-volume - -containers: - cc: - <<: *aa - dd: - <<: *bb - livenessProbe: - httpGet: - path: / - port: http - readinessProbe: - httpGet: - path: / - port: http - initialDelaySeconds: 5 - timeoutSeconds: 10 - periodSeconds: 20 - startupProbe: - httpGet: - path: / - port: http - ports: - - name: http - containerPort: 8080 - protocol: TCP - -volumes: - - name: my-volume - emptyDir: {} - -securityContext: - runAsNonRoot: true - runAsUser: 33 # www-data - -ingress: - enabled: true - servicePort: 8080 - paths: - - / - - /custom - hosts: - - name: int - host: int.local - - name: prod - host: prod.local - tls: - secretName: prod-custom - -service: +servicedefinition: &servicedefinition + type: ClusterIP ports: - name: http port: 8080 protocol: TCP targetPort: http + +affinity: {} + +services: + example1: + enabled: true + replicaCount: 1 + nodeSelector: {} + affinity: {} + serviceName: 'with-service-name' + initContainers: + aa: &aa + image: + repository: camptocamp/custom-aa + tag: latest + sha: + command: + - sleep + - '3600' + resources: + limits: + cpu: '100m' + memory: '50Mi' + requests: + cpu: '100m' + memory: '50Mi' + env: + TEST: + value: 'aa' + bb: &bb + env: + MY_ENV_VAR: + value: 'some-value' + JWT_SECRET_KEY: + type: secret + name: jwt-key-secret + key: JWT_SECRET_KEY + image: + repository: camptocamp/custom-bb + tag: latest + sha: + args: + - sleep + - '3600' + volumeMounts: + /tmp/my-volume/config: + name: my-volume + subPath: config + readOnly: true + /tmp/my-volume/data: + name: my-volume + subPath: data + + containers: + cc: + <<: *aa + dd: + <<: *bb + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 5 + timeoutSeconds: 10 + periodSeconds: 20 + startupProbe: + httpGet: + path: / + port: http + ports: + http: + containerPort: 8080 + protocol: TCP + + volumes: + my-volume: + emptyDir: {} + + securityContext: + runAsNonRoot: true + runAsUser: 33 # www-data + + service: + <<: *servicedefinition + + example2: + enabled: true + replicaCount: 2 + + nameOverride: with-name-override + + containers: + cc: + <<: *aa + dd: + <<: *bb + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 5 + timeoutSeconds: 10 + periodSeconds: 20 + startupProbe: + httpGet: + path: / + port: http + ports: + http: + containerPort: 8080 + protocol: TCP + + volumes: + my-volume: + emptyDir: {} + my-volume-2: + emptyDir: {} + + securityContext: + runAsNonRoot: true + runAsUser: 33 # www-data + service: + <<: *servicedefinition diff --git a/values.yaml b/values.yaml index b8fa73b..2ae5025 100644 --- a/values.yaml +++ b/values.yaml @@ -2,25 +2,9 @@ global: image: pullPolicy: IfNotPresent revisionHistoryLimit: 3 + configMapNameOverride: {} -nameOverride: '' -fullnameOverride: '' - -imagePullSecrets: [] -replicaCount: 1 - -# ConfigMap or secret from env name override -configMapNameOverride: {} - -initContainers: {} -containers: {} - -serviceAccount: - # Specifies whether a service account should be created - create: false - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: default +tolerations: [] podSecurityContext: {} @@ -35,26 +19,32 @@ securityContext: # drop: # - ALL -service: - type: ClusterIP - ports: [] - -ingress: - enabled: false - annotations: - {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - paths: [] - hosts: - [] - #- name: main - # host: chart-example.local - # tls: - # - secretName: main-tls - -nodeSelector: {} +serviceAccount: + # Specifies whether a service account should be created + create: false + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: default + +services: + example: + enabled: false -tolerations: [] + env: {} + + imagePullSecrets: [] + replicaCount: 1 + + # ConfigMap or secret from env name override + configMapNameOverride: {} + + initContainers: {} + containers: {} + + service: + type: ClusterIP + ports: [] + + nodeSelector: {} -affinity: {} + affinity: {}