diff --git a/.make b/.make index f3c36666eb1b1b7fa4b01bc4047b9209ed47126b..5af9b3e0ca97633f77ac472b43797a7d0f6bb60d 160000 --- a/.make +++ b/.make @@ -1 +1 @@ -Subproject commit f3c36666eb1b1b7fa4b01bc4047b9209ed47126b +Subproject commit 5af9b3e0ca97633f77ac472b43797a7d0f6bb60d diff --git a/charts/ci-values.yaml b/charts/ci-values.yaml deleted file mode 100644 index 696b3422973890628a8bde70590bd2fa4a16bd34..0000000000000000000000000000000000000000 --- a/charts/ci-values.yaml +++ /dev/null @@ -1,17 +0,0 @@ -global: - annotations: - app.gitlab.com/app: CI_PROJECT_PATH_SLUG - app.gitlab.com/env: CI_ENVIRONMENT_SLUG - # by setting this parameter we can disable the lower level sub-system tango-base, archiver and webjive - # sub-system: - # tango-base: - # enabled: false - # archiver: - # enabled: false - # webjive: - # enabled: false - -# tango-base: -# enabled: true - - diff --git a/charts/ska-tango-base/Chart.yaml b/charts/ska-tango-base/Chart.yaml index 87652141a471581bf8157f0bab875665634419e4..c49d114f773905d0336aefebf61e118f8e01db96 100644 --- a/charts/ska-tango-base/Chart.yaml +++ b/charts/ska-tango-base/Chart.yaml @@ -2,9 +2,9 @@ apiVersion: v2 appVersion: 0.3.23 description: A Helm chart for deploying the TANGO base system on Kubernetes name: ska-tango-base -version: 0.3.26 +version: 0.4.0 icon: https://www.skatelescope.org/wp-content/uploads/2016/07/09545_NEW_LOGO_2014.png dependencies: - name: ska-tango-util - version: 0.3.23 + version: 0.4.0 repository: file://../ska-tango-util diff --git a/charts/ska-tango-base/templates/databaseds.yaml b/charts/ska-tango-base/templates/databaseds.yaml index 6e4aa2f915786ac329641ed0f55b0873a186919b..7175751eabe004f71fe77a16af74cd8f3aea815f 100644 --- a/charts/ska-tango-base/templates/databaseds.yaml +++ b/charts/ska-tango-base/templates/databaseds.yaml @@ -4,8 +4,47 @@ {{ $tries := coalesce .Values.global.tries 10}} {{ $sleep := coalesce .Values.global.sleep 5}} +{{ if .Values.global.operator }} + --- +apiVersion: tango.tango-controls.org/v1 +kind: DatabaseDS +metadata: + name: {{ tpl ($databaseds_name | toString) . }} + namespace: {{ .Release.Namespace }} + labels: + component: {{ .Values.databaseds.component }} + function: {{ .Values.databaseds.function }} + domain: {{ .Values.databaseds.domain }} + intent: {{ .Values.databaseds.intent }} +{{ toYaml (coalesce .Values.global.labels .Values.labels "label:none") | indent 4 }} +{{- if or (.Values.global.annotations) (.Values.annotations) ((.Values.databaseds.vault).useVault) }} + annotations: + vault.hashicorp.com/agent-inject: "true" + vault.hashicorp.com/agent-inject-status: "update" + vault.hashicorp.com/agent-inject-secret-config: "{{ .Values.databaseds.vault.secretPath }}/ska-tango-base/databaseds" + vault.hashicorp.com/agent-inject-template-config: | + {{`{{- with secret `}}"{{ .Values.databaseds.vault.secretPath }}/ska-tango-base/databaseds"{{` -}}`}} + {{`{{- range $k, $v := .Data.data }}`}} + {{`export {{ $k }}={{ $v }}`}} + {{`{{- end }}`}} + {{`{{- end }}`}} + vault.hashicorp.com/role: "{{ .Values.databaseds.vault.role }}" +{{ toYaml (coalesce .Values.global.annotations .Values.annotations) | indent 4 }} +{{- end }} +spec: +{{- if or (.Values.global.minikube) (.Values.global.exposeAllDS) }} + enableLoadBalancer: true +{{- end }} + imagePullPolicy: IfNotPresent +{{- if (coalesce .Values.global.minikube .Values.minikube false) }} + tangDBStorageClass: standard +{{- else }} + tangDBStorageClass: nfss1 +{{- end }} +{{- else }} +--- apiVersion: v1 kind: Service metadata: @@ -72,8 +111,8 @@ spec: domain: {{ .Values.databaseds.domain }} intent: {{ .Values.databaseds.intent }} {{ toYaml (coalesce .Values.global.labels .Values.labels "label:none") | indent 8 }} - annotations: -{{ if ((.Values.databaseds.vault).useVault) }} +{{ if or (.Values.global.annotations) (.Values.annotations) ((.Values.databaseds.vault).useVault) }} + annotations: vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/agent-inject-status: "update" vault.hashicorp.com/agent-inject-secret-config: "{{ .Values.databaseds.vault.secretPath }}/ska-tango-base/databaseds" @@ -84,8 +123,6 @@ spec: {{`{{- end }}`}} {{`{{- end }}`}} vault.hashicorp.com/role: "{{ .Values.databaseds.vault.role }}" -{{ end }} -{{ if or (.Values.global.annotations) (.Values.annotations) }} {{ toYaml (coalesce .Values.global.annotations .Values.annotations) | indent 8 }} {{ end }} spec: @@ -161,3 +198,5 @@ spec: tolerations: {{ toYaml . | indent 8 }} {{- end }} + +{{- end }} \ No newline at end of file diff --git a/charts/ska-tango-base/values.yaml.sh b/charts/ska-tango-base/values.yaml.sh index 4f60ea29d62f56048c89c5d572c8e4c1a0465aeb..6b4fb9759b4567dd52df3ee80bfccb421df4c83d 100644 --- a/charts/ska-tango-base/values.yaml.sh +++ b/charts/ska-tango-base/values.yaml.sh @@ -60,9 +60,6 @@ telescope: SKA-mid labels: app: ska-tango-images -annotations: - app.gitlab.com/app: CI_PROJECT_PATH_SLUG - app.gitlab.com/env: CI_ENVIRONMENT_SLUG dsconfig: image: diff --git a/charts/ska-tango-umbrella/Chart.yaml b/charts/ska-tango-umbrella/Chart.yaml index 3b464e622f54ac8539e22d5159be3ee46b23eaed..d60bf23d996f159ef0a16912f81dc1210aaabb89 100644 --- a/charts/ska-tango-umbrella/Chart.yaml +++ b/charts/ska-tango-umbrella/Chart.yaml @@ -1,15 +1,15 @@ apiVersion: v2 -appVersion: 0.2.5 description: A Helm chart for deploying the TANGO base system on Kubernetes name: ska-tango-umbrella -version: 0.2.6 +version: 0.2.7 +appVersion: 0.2.7 icon: https://www.skatelescope.org/wp-content/uploads/2016/07/09545_NEW_LOGO_2014.png dependencies: - name: ska-tango-base - version: 0.3.26 + version: 0.4.0 repository: file://../ska-tango-base condition: ska-tango-base.enabled,global.sub-system.ska-tango-base.enabled - name: ska-tango-util - version: 0.3.23 + version: 0.4.0 repository: file://../ska-tango-util diff --git a/charts/ska-tango-util/Chart.yaml b/charts/ska-tango-util/Chart.yaml index 8a64a070d1ad25689613b880c3e874bb918d7a7c..e5433d08d0e0dfda8de282341c9b7482d7a2ebf0 100644 --- a/charts/ska-tango-util/Chart.yaml +++ b/charts/ska-tango-util/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 description: A Helm chart library of utilities for TANGO deployents name: ska-tango-util type: library -appVersion: 0.3.23 -version: 0.3.23 +appVersion: 0.4.0 +version: 0.4.0 icon: https://www.skatelescope.org/wp-content/uploads/2016/07/09545_NEW_LOGO_2014.png maintainers: - name: Matteo Di Carlo diff --git a/charts/ska-tango-util/templates/_configuration.yaml b/charts/ska-tango-util/templates/_configuration.yaml index 4e3b9444dda91aa38a6898d4072fc944d1bf44b8..c1dceb832f9fd515ebaedc2574dd67719857de07 100644 --- a/charts/ska-tango-util/templates/_configuration.yaml +++ b/charts/ska-tango-util/templates/_configuration.yaml @@ -5,6 +5,7 @@ {{ $dsconfig := coalesce .Values.global.dsconfig .Values.dsconfig}} {{ $itango := coalesce .Values.global.itango .Values.itango}} +{{- if not .Values.global.operator }} --- apiVersion: v1 kind: ServiceAccount @@ -144,4 +145,5 @@ spec: name: {{ .Values.subsystem }}-configuration-{{ .Release.Name }} restartPolicy: Never -{{- end -}} +{{- end }} +{{- end }} diff --git a/charts/ska-tango-util/templates/_deviceserver.yaml b/charts/ska-tango-util/templates/_deviceserver.yaml index a17ab0923ffd68badf802ef08b98773257df079f..ce63a671c7129cfaf4b7747c339225e66913a395 100644 --- a/charts/ska-tango-util/templates/_deviceserver.yaml +++ b/charts/ska-tango-util/templates/_deviceserver.yaml @@ -4,14 +4,18 @@ {{ $annotations := coalesce .local.Values.global.annotations .local.Values.annotations }} {{ $default_tango_host := printf "%s-%s:10000" "databaseds-tango-base" .local.Release.Name }} {{ $tango_host := tpl (coalesce .local.Values.global.tango_host .local.Values.tango_host $default_tango_host | toString) .local }} +{{- $databaseds_name := (split ":" $tango_host)._0 }} {{ $dsconfig := coalesce .local.Values.global.dsconfig .local.Values.dsconfig}} {{ $chart := .local }} {{ $safe_instance := .instance |toString | replace "_" "-" }} {{ $kubectl_wait_timeout := coalesce $dsconfig.timeout "120s" }} + +{{- if not .local.Values.global.operator }} --- # Device Server Service # Parameter: deviceserver struct, global.Values.dsconfig struct, project image struct # giving a dummy Service entry ensures that the single pod is DNS addressable + apiVersion: v1 kind: Service metadata: @@ -186,4 +190,75 @@ spec: {{ toYaml . | indent 8 }} {{- end }} +{{- else }} #operator + +--- +apiVersion: tango.tango-controls.org/v1 +kind: DeviceServer +metadata: + name: {{.deviceserver.name | toString }}-{{ $safe_instance }} + namespace: {{ $chart.Release.Namespace }} + labels: +{{ toYaml $labels | indent 4 }} + component: {{tpl (.deviceserver.name | toString) $chart }}-{{ $safe_instance }} + function: {{ .deviceserver.function }} + domain: {{ .deviceserver.domain }} + subsystem: {{ $chart.Values.subsystem }} +{{ if $annotations }} + annotations: +{{ toYaml $annotations | indent 4 }} {{ end }} +spec: +{{- if or ($chart.Values.global.minikube) ($chart.Values.global.exposeAllDS) (.deviceserver.exposeDS) }} + enableLoadBalancer: true +{{- end }} + databaseds: {{ $databaseds_name }} + image: "{{ tpl (.deviceserver.image.registry | toString) $chart }}/{{ tpl (.deviceserver.image.image | toString) $chart }}:{{ tpl (.deviceserver.image.tag | toString) $chart }}" + imagePullPolicy: {{ tpl (.deviceserver.image.pullPolicy | toString) $chart }} + args: "{{ $safe_instance | toString }}" +{{- if $chart.Values.dsconfig.configuration_file }} + config: | +{{ $chart.Files.Get $chart.Values.dsconfig.configuration_file | indent 4 }} +{{- end }} + script: "{{ .deviceserver.command }}" +{{- if (.deviceserver.depends_on) }} + dependsOn: +{{- range $index, $device := .deviceserver.depends_on }} + - "{{ $device.device | toString }}" +{{- end }} +{{- end }} +{{- if or ($chart.Values.global.environment_variables) (.deviceserver.environment_variables) }} + env: +{{- range $index, $envvar := $chart.Values.global.environment_variables }} + - name: {{$envvar.name}} + value: {{tpl ($envvar.value | toString) $chart }} +{{- end }} +{{- range $index, $envvar := .deviceserver.environment_variables }} + - name: {{$envvar.name}} + value: {{tpl ($envvar.value | toString) $chart | quote }} +{{- end }} +{{- end }} +{{- if not $chart.Values.do_not_constraint_resources }} + resources: +{{ toYaml (coalesce .deviceserver.resources $chart.Values.resources) | indent 4 }} +{{ end }} +{{- with (coalesce .deviceserver.securityContext $chart.Values.securityContext) }} + securityContext: + {{- toYaml . | nindent 4 }} +{{ end }} +{{- with (coalesce .deviceserver.nodeSelector $chart.Values.nodeSelector) }} + nodeSelector: + {{- toYaml . | nindent 4 }} +{{- end }} +{{- with $chart.Values.affinity }} + affinity: + {{- toYaml . | nindent 4 }} +{{- end }} +{{- with $chart.Values.tolerations }} + tolerations: + {{- toYaml . | nindent 4 }} +{{- end }} + + +{{- end }} # end if operator +{{- end }} #device server diff --git a/charts/ska-tango-util/templates/_multidevice-config.yaml b/charts/ska-tango-util/templates/_multidevice-config.yaml index 228de1e042c3ec17d8b309a07a2f5a7a50afff22..ae1d5e31cc76714dce57343e618ad04ab6891030 100644 --- a/charts/ska-tango-util/templates/_multidevice-config.yaml +++ b/charts/ska-tango-util/templates/_multidevice-config.yaml @@ -1,5 +1,4 @@ {{ define "ska-tango-util.multidevice-config.tpl" }} - --- {{ $labels := coalesce .local.Values.global.labels .local.Values.labels "label: none" }} {{ $annotations := coalesce .local.Values.global.annotations .local.Values.annotations }} @@ -23,6 +22,7 @@ metadata: annotations: {{ toYaml $annotations | indent 4 }} data: +{{- if not .local.Values.global.operator }} configuration.json: | { "servers": { @@ -115,6 +115,7 @@ data: exit $rc fi fi +{{- end }} {{ $deviceserver.server.name }}.py: | import importlib import importlib.util @@ -152,8 +153,4 @@ data: main() - - - - {{ end }} # multidevice-config.tpl diff --git a/charts/ska-tango-util/templates/_multidevice-job.yaml b/charts/ska-tango-util/templates/_multidevice-job.yaml index 3f8918918d6e5629052b0386132568aafe68241b..021d4743ddb67c5044143a40a346001ab2cc279b 100644 --- a/charts/ska-tango-util/templates/_multidevice-job.yaml +++ b/charts/ska-tango-util/templates/_multidevice-job.yaml @@ -1,5 +1,7 @@ {{ define "ska-tango-util.multidevice-job.tpl" }} +{{- if not .local.Values.global.operator }} + --- {{ $labels := coalesce .local.Values.global.labels .local.Values.labels "label:none" }} {{ $annotations := coalesce .local.Values.global.annotations .local.Values.annotations }} @@ -94,5 +96,5 @@ spec: - +{{ end }} {{ end }} # multidevice-job.tpl diff --git a/charts/ska-tango-util/templates/_multidevice-sacc-role.yaml b/charts/ska-tango-util/templates/_multidevice-sacc-role.yaml index d82a3724b32903ad788d9cf4870d357b3389e8e7..b8246630706758451492aeba3cfac11de8a9dec0 100644 --- a/charts/ska-tango-util/templates/_multidevice-sacc-role.yaml +++ b/charts/ska-tango-util/templates/_multidevice-sacc-role.yaml @@ -1,4 +1,6 @@ {{ define "ska-tango-util.multidevice-sacc-role.tpl" }} +{{- if not .local.Values.global.operator }} + --- {{ $deviceserver_name := tpl (coalesce .name .deviceserver.name | toString) .local }} --- @@ -35,4 +37,5 @@ rules: verbs: ["list", "get", "watch"] +{{ end }} {{ end }} # multidevice-sacc-role.tpl diff --git a/charts/ska-tango-util/templates/_multidevice-svc.yaml b/charts/ska-tango-util/templates/_multidevice-svc.yaml index 1c4cb850e643a0d26986603c26d5ed0b67d9fee8..2b03160a5ea0d78a107b24c49e2713561d7d33d8 100644 --- a/charts/ska-tango-util/templates/_multidevice-svc.yaml +++ b/charts/ska-tango-util/templates/_multidevice-svc.yaml @@ -7,6 +7,9 @@ Parameters: - instance (of the device server) */}} {{ define "ska-tango-util.multidevice-svc.tpl" }} + +{{- if not .local.Values.global.operator }} + --- {{ $labels := coalesce .local.Values.global.labels .local.Values.labels "label:none" }} {{ $annotations := coalesce .local.Values.global.annotations .local.Values.annotations }} @@ -143,7 +146,7 @@ spec: - sh - -c args: - - kubectl wait job --for=condition=complete {{ $deviceserver_name | toString }}-{{ $chart.Release.Name }}-config --timeout={{ $kubectl_wait_timeout }} + - kubectl wait job --for=jsonpath='{.status.succeeded}'=1 {{ $deviceserver_name | toString }}-{{ $chart.Release.Name }}-config --timeout={{ $kubectl_wait_timeout }} {{ if ($deviceserver.depends_on) }} {{ range $index, $device := $deviceserver.depends_on }} {{ if ($device.host) }} @@ -350,4 +353,10 @@ spec: {{ end }} # range instances +{{ else }} ## else operator + +{{- $context := dict "name" .name "deviceserver" .deviceserver "image" .image "local" .local }} +{{ template "ska-tango-util.operator-svc.tpl" $context }} + +{{ end }} {{ end }} # multidevice-svc.tpl diff --git a/charts/ska-tango-util/templates/_operator-ds.yaml b/charts/ska-tango-util/templates/_operator-ds.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c74392462a52f35d992219dbc744c28684de24bc --- /dev/null +++ b/charts/ska-tango-util/templates/_operator-ds.yaml @@ -0,0 +1,187 @@ +{{- /* +tango-util.operator.tpl +Parameters: +- deviceserver (the deviceserver entire yaml tag) +- image (to be used for the deviceserver) +- local (the local chart) +- instance (of the device server) +*/}} +{{ define "ska-tango-util.operator-svc.tpl" }} +--- +{{- $labels := coalesce .local.Values.global.labels .local.Values.labels "label:none" }} +{{- $annotations := coalesce .local.Values.global.annotations .local.Values.annotations }} +{{- $default_tango_host := printf "%s-%s:10000" "databaseds-tango-base-" .local.Release.Name }} +{{- $tango_host := tpl (coalesce .local.Values.global.tango_host .local.Values.tango_host $default_tango_host | toString) .local }} +{{- $databaseds_name := (split ":" $tango_host)._0 }} +{{- $chart := .local }} +{{- $deviceserver := .deviceserver }} +{{- $deviceserver_name := tpl (coalesce .name .deviceserver.name | toString) .local }} +{{- range $instance := $deviceserver.server.instances }} +{{- $safe_instance := $instance.name | toString | replace "_" "-" }} +{{- if has $safe_instance $deviceserver.instances }} +--- +apiVersion: tango.tango-controls.org/v1 +kind: DeviceServer +metadata: + name: {{$deviceserver_name | toString }}-{{ $safe_instance }} + namespace: {{ $chart.Release.Namespace }} + labels: +{{ toYaml $labels | indent 4 }} + component: {{tpl ($deviceserver_name | toString) $chart }}-{{ $safe_instance }} + function: {{ $deviceserver.function }} + domain: {{ $deviceserver.domain }} + subsystem: {{ $chart.Values.subsystem }} +{{ if $annotations }} + annotations: +{{ toYaml $annotations | indent 4 }} +{{ end }} +spec: +{{- if or ($chart.Values.global.minikube) ($chart.Values.global.exposeAllDS) ($deviceserver.exposeDS) }} + enableLoadBalancer: true +{{- end }} + databaseds: {{ $databaseds_name }} + image: "{{ tpl ($deviceserver.image.registry | toString) $chart }}/{{ tpl ($deviceserver.image.image | toString) $chart }}:{{ tpl ($deviceserver.image.tag | toString) $chart }}" + imagePullPolicy: {{ tpl ($deviceserver.image.pullPolicy | toString) $chart }} + args: "{{ $safe_instance | toString }}" + volumes: + - name: configuration + configMap: + name: {{$deviceserver_name | toString }}-{{ $chart.Release.Name }}-dsconfig-json + {{ if hasKey $deviceserver "volume" }} + - name: volume-data + persistentVolumeClaim: + claimName: {{ $deviceserver.volume.existingClaimName | default (printf "%s-pvc-%s" $deviceserver.volume.name $chart.Release.Name) }} + {{ end }} + volumeMounts: + - name: configuration + mountPath: data + readOnly: true + {{ with $deviceserver.volume }} + - name: volume-data + mountPath: {{ .mountPath }} + readOnly: {{ (hasKey . "readOnly" | ternary .readOnly true) }}{{/* https://github.com/helm/helm/issues/3308 */}} + {{ end }} + config: | + { + "servers": { + "{{ $deviceserver.server.name }}" : { + {{- range $index_instance,$instance := $deviceserver.server.instances }} + {{- if has $instance.name $deviceserver.instances }} + {{- if hasKey $deviceserver "tmp_start_instance" }},{{end}} + {{- $_ := set $deviceserver "tmp_start_instance" "1" }} + "{{ $instance.name }}": { + {{- range $index_class, $class := $instance.classes }} + {{- if $index_class}},{{end}} + "{{ $class.name }}": { + {{- range $index_device, $device := $class.devices }} + {{- if $index_device}},{{end}} + "{{ $device.name }}": { + {{- if $device.properties }} + "properties": { + {{- range $index_property, $property := $device.properties }} + {{- if $index_property}},{{end}} + "{{ $property.name }}": [ + {{- range $index_value, $value := $property.values }} + {{- if $index_value}},{{end}} + "{{ tpl $value $chart }}" + {{- end }} + ] + {{- end }} + }{{ if $device.attribute_properties }},{{ end }} + {{- end }} + {{- if $device.attribute_properties }} + "attribute_properties": { + {{- range $index_attr_prop, $attr_prop := $device.attribute_properties }} + {{- if $index_attr_prop}},{{end}} + "{{ $attr_prop.attribute }}": { + {{- range $index_prop, $prop := $attr_prop.properties }} + {{- if $index_prop}},{{end}} + "{{ $prop.name }}": [ + {{- range $index_value, $value := $prop.values }} + {{- if $index_value}},{{end}} + "{{ tpl $value $chart }}" + {{- end }} + ] + {{- end }} + } + {{- end }} + } + {{- end }} + } + {{- end }} + } + {{- end }} + } + {{- end }} + {{- end }} + } + }{{ if $deviceserver.class_properties }}, + "classes": { + {{- range $index_class_prop_group, $class_prop_group := $deviceserver.class_properties }} + {{- if $index_class_prop_group}},{{end}} + "{{ $class_prop_group.name }}": { + "properties": { + {{- range $index_class_prop, $class_prop := $class_prop_group.properties }} + {{- if $index_class_prop}},{{end}} + "{{ $class_prop.name }}": [ + {{- range $index_value, $value := $class_prop.values }} + {{- if $index_value}},{{end}} + "{{ tpl $value $chart }}" + {{- end }} + ] + {{- end }} + } + } + {{- end }} + } + {{- end }} + } + {{- $_ := unset $deviceserver "tmp_start_instance" }} +{{- if $deviceserver.command }} + script: "{{ $deviceserver.command }}" +{{- else }} + script: "/data/{{ $deviceserver.server.name }}.py" +{{- end }} +{{- if ($deviceserver.depends_on) }} + dependsOn: +{{- range $index, $device := $deviceserver.depends_on }} + - "{{ $device.device | toString }}" +{{- end }} +{{- end }} +{{- if or ($chart.Values.global.environment_variables) ($deviceserver.environment_variables) }} + env: +{{- range $index, $envvar := $chart.Values.global.environment_variables }} + - name: {{$envvar.name}} + value: {{tpl ($envvar.value | toString) $chart }} +{{- end }} +{{- range $index, $envvar := $deviceserver.environment_variables }} + - name: {{$envvar.name}} + value: {{tpl ($envvar.value | toString) $chart | quote }} +{{- end }} +{{- end }} +{{- if not $chart.Values.do_not_constraint_resources }} + resources: +{{ toYaml (coalesce $instance.resources $deviceserver.resources $chart.Values.resources) | indent 4 }} +{{ end }} +{{- with (coalesce $deviceserver.securityContext $chart.Values.securityContext) }} + securityContext: + {{- toYaml . | nindent 4 }} +{{ end }} +{{- with (coalesce $deviceserver.nodeSelector $chart.Values.nodeSelector) }} + nodeSelector: + {{- toYaml . | nindent 4 }} +{{- end }} +{{- with $chart.Values.affinity }} + affinity: + {{- toYaml . | nindent 4 }} +{{- end }} +{{- with $chart.Values.tolerations }} + tolerations: + {{- toYaml . | nindent 4 }} +{{- end }} + +{{ end }} ## if has + +{{ end }} # range instances + +{{ end }} # ska-tango-util.operator-svc.tpl