--- # yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json suite: pod affinity templates: - common.yaml values: - ../_values/controllers_main_default_container.yaml tests: - it: affinity is not present by default documentSelector: &DeploymentSelector path: $[?(@.kind == "Deployment")].metadata.name value: RELEASE-NAME asserts: - notExists: path: spec.template.spec.affinity - it: affinity can be set with defaultPodOption set: defaultPodOptions: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - antarctica-east1 - antarctica-west1 documentSelector: *DeploymentSelector asserts: - equal: path: spec.template.spec.affinity value: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - antarctica-east1 - antarctica-west1 - it: affinity can be set with defaultPodOption and overridden on pod level set: defaultPodOptions: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - antarctica-east1 - antarctica-west1 controllers: main: pod: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - asia-east1 - asia-west1 documentSelector: *DeploymentSelector asserts: - equal: path: spec.template.spec.affinity value: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - asia-east1 - asia-west1 - it: affinity can be configured with templated valued set: controllers: main: pod: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - "{{ .Release.Name }}" topologyKey: kubernetes.io/hostname documentSelector: *DeploymentSelector asserts: - equal: path: spec.template.spec.affinity value: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - RELEASE-NAME topologyKey: kubernetes.io/hostname