{{/* affinity - https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ */}} {{- define "appNodeaffinity" }} nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: {{- include "appNodeAffinityRequiredDuringScheduling" . }} preferredDuringSchedulingIgnoredDuringExecution: {{- include "appNodeAffinityPreferredDuringScheduling" . }} {{- end }} {{- define "appNodeAffinityRequiredDuringScheduling" }} {{- if or .Values.app.nodeAffinityLabelSelector .Values.global.nodeAffinityLabelSelector }} nodeSelectorTerms: {{- range $matchExpressionsIndex, $matchExpressionsItem := .Values.app.nodeAffinityLabelSelector }} - matchExpressions: {{- range $Index, $item := $matchExpressionsItem.matchExpressions }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} {{- end }} {{- range $matchExpressionsIndex, $matchExpressionsItem := .Values.global.nodeAffinityLabelSelector }} - matchExpressions: {{- range $Index, $item := $matchExpressionsItem.matchExpressions }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} {{- end }} {{- end }} {{- end }} {{- define "appNodeAffinityPreferredDuringScheduling" }} {{- range $weightIndex, $weightItem := .Values.app.nodeAffinityTermLabelSelector }} - weight: {{ $weightItem.weight }} preference: matchExpressions: {{- range $Index, $item := $weightItem.matchExpressions }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} {{- end }} {{- range $weightIndex, $weightItem := .Values.global.nodeAffinityTermLabelSelector }} - weight: {{ $weightItem.weight }} preference: matchExpressions: {{- range $Index, $item := $weightItem.matchExpressions }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} {{- end }} {{- end }} {{- define "appPodAffinity" }} {{- if or .Values.app.podAffinityLabelSelector .Values.app.podAffinityTermLabelSelector}} podAffinity: {{- if .Values.app.podAffinityLabelSelector }} requiredDuringSchedulingIgnoredDuringExecution: {{- include "appPodAffinityRequiredDuringScheduling" . }} {{- end }} {{- if or .Values.app.podAffinityTermLabelSelector}} preferredDuringSchedulingIgnoredDuringExecution: {{- include "appPodAffinityPreferredDuringScheduling" . }} {{- end }} {{- end }} {{- end }} {{- define "appPodAffinityRequiredDuringScheduling" }} {{- range $labelSelector, $labelSelectorItem := .Values.app.podAffinityLabelSelector }} - labelSelector: matchExpressions: {{- range $index, $item := $labelSelectorItem.labelSelector }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} topologyKey: {{ $labelSelectorItem.topologyKey }} {{- end }} {{- range $labelSelector, $labelSelectorItem := .Values.global.podAffinityLabelSelector }} - labelSelector: matchExpressions: {{- range $index, $item := $labelSelectorItem.labelSelector }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} topologyKey: {{ $labelSelectorItem.topologyKey }} {{- end }} {{- end }} {{- define "appPodAffinityPreferredDuringScheduling" }} {{- range $labelSelector, $labelSelectorItem := .Values.app.podAffinityTermLabelSelector }} - podAffinityTerm: labelSelector: matchExpressions: {{- range $index, $item := $labelSelectorItem.labelSelector }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} topologyKey: {{ $labelSelectorItem.topologyKey }} weight: {{ $labelSelectorItem.weight }} {{- end }} {{- range $labelSelector, $labelSelectorItem := .Values.global.podAffinityTermLabelSelector }} - podAffinityTerm: labelSelector: matchExpressions: {{- range $index, $item := $labelSelectorItem.labelSelector }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} topologyKey: {{ $labelSelectorItem.topologyKey }} weight: {{ $labelSelectorItem.weight }} {{- end }} {{- end }} {{- define "appPodAntiAffinity" }} {{- if or .Values.app.podAntiAffinityLabelSelector .Values.app.podAntiAffinityTermLabelSelector}} podAntiAffinity: {{- if .Values.app.podAntiAffinityLabelSelector }} requiredDuringSchedulingIgnoredDuringExecution: {{- include "appPodAntiAffinityRequiredDuringScheduling" . }} {{- end }} {{- if or .Values.app.podAntiAffinityTermLabelSelector}} preferredDuringSchedulingIgnoredDuringExecution: {{- include "appPodAntiAffinityPreferredDuringScheduling" . }} {{- end }} {{- end }} {{- end }} {{- define "appPodAntiAffinityRequiredDuringScheduling" }} {{- range $labelSelectorIndex, $labelSelectorItem := .Values.app.podAntiAffinityLabelSelector }} - labelSelector: matchExpressions: {{- range $index, $item := $labelSelectorItem.labelSelector }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} topologyKey: {{ $labelSelectorItem.topologyKey }} {{- end }} {{- range $labelSelectorIndex, $labelSelectorItem := .Values.global.podAntiAffinityLabelSelector }} - labelSelector: matchExpressions: {{- range $index, $item := $labelSelectorItem.labelSelector }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} topologyKey: {{ $labelSelectorItem.topologyKey }} {{- end }} {{- end }} {{- define "appPodAntiAffinityPreferredDuringScheduling" }} {{- range $labelSelectorIndex, $labelSelectorItem := .Values.app.podAntiAffinityTermLabelSelector }} - podAffinityTerm: labelSelector: matchExpressions: {{- range $index, $item := $labelSelectorItem.labelSelector }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} topologyKey: {{ $labelSelectorItem.topologyKey }} weight: {{ $labelSelectorItem.weight }} {{- end }} {{- range $labelSelectorIndex, $labelSelectorItem := .Values.global.podAntiAffinityTermLabelSelector }} - podAffinityTerm: labelSelector: matchExpressions: {{- range $index, $item := $labelSelectorItem.labelSelector }} - key: {{ $item.key }} operator: {{ $item.operator }} {{- if $item.values }} values: {{- $vals := split "," $item.values }} {{- range $i, $v := $vals }} - {{ $v | quote }} {{- end }} {{- end }} {{- end }} topologyKey: {{ $labelSelectorItem.topologyKey }} weight: {{ $labelSelectorItem.weight }} {{- end }} {{- end }}