From 66615d6bc48dbdd172bfa07c1713e4d402b7b323 Mon Sep 17 00:00:00 2001 From: Miretpl Date: Sun, 18 Jan 2026 14:39:09 +0100 Subject: [PATCH] Finish workers.celery.kerberosInitContainer & add workers.kubernetes.kerberosInitContainer --- .../pod-template-file.kubernetes-helm-yaml | 12 +- chart/templates/NOTES.txt | 8 - .../templates/workers/worker-deployment.yaml | 6 +- chart/values.schema.json | 89 ++++++++- chart/values.yaml | 33 +++- .../airflow_aux/test_pod_template_file.py | 152 +++++++++++++-- .../helm_tests/airflow_core/test_worker.py | 178 ++++++++++++------ 7 files changed, 375 insertions(+), 103 deletions(-) diff --git a/chart/files/pod-template-file.kubernetes-helm-yaml b/chart/files/pod-template-file.kubernetes-helm-yaml index 59a08f73003ac..51d2c50e63c21 100644 --- a/chart/files/pod-template-file.kubernetes-helm-yaml +++ b/chart/files/pod-template-file.kubernetes-helm-yaml @@ -42,7 +42,7 @@ metadata: {{- end }} annotations: {{- toYaml $podAnnotations | nindent 4 }} - {{- if .Values.workers.kerberosInitContainer.enabled }} + {{- if or .Values.workers.kubernetes.kerberosInitContainer.enabled .Values.workers.kerberosInitContainer.enabled }} checksum/kerberos-keytab: {{ include (print $.Template.BasePath "/secrets/kerberos-keytab-secret.yaml") . | sha256sum }} {{- end }} spec: @@ -53,12 +53,12 @@ spec: {{- if .Values.workers.extraInitContainers }} {{- tpl (toYaml .Values.workers.extraInitContainers) . | nindent 4 }} {{- end }} - {{- if and (semverCompare ">=2.8.0" .Values.airflowVersion) .Values.workers.kerberosInitContainer.enabled }} + {{- if and (semverCompare ">=2.8.0" .Values.airflowVersion) (or .Values.workers.kubernetes.kerberosInitContainer.enabled .Values.workers.kerberosInitContainer.enabled) }} - name: kerberos-init image: {{ template "airflow_image" . }} imagePullPolicy: {{ .Values.images.airflow.pullPolicy }} args: ["kerberos", "-o"] - resources: {{- toYaml .Values.workers.kerberosInitContainer.resources | nindent 8 }} + resources: {{- toYaml (.Values.workers.kubernetes.kerberosInitContainer.resources | default .Values.workers.kerberosInitContainer.resources) | nindent 8 }} volumeMounts: - name: logs mountPath: {{ template "airflow_logs" . }} @@ -106,7 +106,7 @@ spec: env: - name: AIRFLOW__CORE__EXECUTOR value: {{ .Values.executor | quote }} - {{- if or .Values.workers.kerberosSidecar.enabled .Values.workers.kerberosInitContainer.enabled}} + {{- if or .Values.workers.kerberosSidecar.enabled .Values.workers.kubernetes.kerberosInitContainer.enabled .Values.workers.kerberosInitContainer.enabled }} - name: KRB5_CONFIG value: {{ .Values.kerberos.configPath | quote }} - name: KRB5CCNAME @@ -255,13 +255,13 @@ spec: name: {{ include "airflow_config" . }} name: config {{- if semverCompare ">=3.0.0" .Values.airflowVersion }} - {{- if and (or .Values.apiServer.apiServerConfig .Values.apiServer.apiServerConfigConfigMapName) (or .Values.workers.kerberosInitContainer.enabled .Values.workers.kerberosSidecar.enabled)}} + {{- if and (or .Values.apiServer.apiServerConfig .Values.apiServer.apiServerConfigConfigMapName) (or .Values.workers.kubernetes.kerberosInitContainer.enabled .Values.workers.kerberosInitContainer.enabled .Values.workers.kerberosSidecar.enabled) }} - name: api-server-config configMap: name: {{ template "airflow_api_server_config_configmap_name" . }} {{- end }} {{- else }} - {{- if and (or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName) (or .Values.workers.kerberosInitContainer.enabled .Values.workers.kerberosSidecar.enabled)}} + {{- if and (or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName) (or .Values.workers.kubernetes.kerberosInitContainer.enabled .Values.workers.kerberosInitContainer.enabled .Values.workers.kerberosSidecar.enabled) }} - name: webserver-config configMap: name: {{ template "airflow_webserver_config_configmap_name" . }} diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt index 7ac3cdd624cd1..4cf3844a49965 100644 --- a/chart/templates/NOTES.txt +++ b/chart/templates/NOTES.txt @@ -204,14 +204,6 @@ DEPRECATION WARNING: {{- end }} -{{- if not (empty .Values.workers.kerberosInitContainer) }} - - DEPRECATION WARNING: - `workers.kerberosInitContainer` has been renamed to `workers.celery.kerberosInitContainer`. - Please change your values as support for the old name will be dropped in a future release. - -{{- end }} - {{- if ne (.Values.workers.args | toJson) (list "bash" "-c" "exec \\\nairflow {{ semverCompare \">=2.0.0\" .Values.airflowVersion | ternary \"celery worker\" \"worker\" }}" | toJson) }} DEPRECATION WARNING: diff --git a/chart/templates/workers/worker-deployment.yaml b/chart/templates/workers/worker-deployment.yaml index a349ff24eba4a..e5b3740f7bbf3 100644 --- a/chart/templates/workers/worker-deployment.yaml +++ b/chart/templates/workers/worker-deployment.yaml @@ -187,14 +187,12 @@ spec: subPath: {{ .Values.logs.persistence.subPath }} {{- end }} {{- end }} - {{- $kerberosInitContainerEnabled := or (.Values.workers.celery.kerberosInitContainer).enabled (.Values.workers.kerberosInitContainer).enabled }} - {{- $kerberosInitContainerResources := (.Values.workers.celery.kerberosInitContainer).resources | default (.Values.workers.kerberosInitContainer).resources | default dict }} - {{- if and (semverCompare ">=2.8.0" .Values.airflowVersion) $kerberosInitContainerEnabled }} + {{- if and (semverCompare ">=2.8.0" .Values.airflowVersion) (or .Values.workers.celery.kerberosInitContainer.enabled .Values.workers.kerberosInitContainer.enabled) }} - name: kerberos-init image: {{ template "airflow_image" . }} imagePullPolicy: {{ .Values.images.airflow.pullPolicy }} args: ["kerberos", "-o"] - resources: {{- toYaml $kerberosInitContainerResources | nindent 12 }} + resources: {{- toYaml (.Values.workers.kerberosInitContainer.resources | default .Values.workers.celery.kerberosInitContainer.resources) | nindent 12 }} volumeMounts: - name: logs mountPath: {{ template "airflow_logs" . }} diff --git a/chart/values.schema.json b/chart/values.schema.json index fc3c644af0bca..d09e10a4c07a9 100644 --- a/chart/values.schema.json +++ b/chart/values.schema.json @@ -2171,7 +2171,7 @@ } }, "kerberosInitContainer": { - "description": "Kerberos init container for Airflow Celery workers and pods created with pod-template-file (deprecated, use `workers.celery.kerberosInitContainer` instead).", + "description": "Kerberos init container for Airflow Celery workers and pods created with pod-template-file.", "type": "object", "additionalProperties": false, "properties": { @@ -2951,7 +2951,7 @@ "$ref": "#/definitions/io.k8s.api.core.v1.ResourceRequirements" }, "containerLifecycleHooks": { - "description": "Container Lifecycle Hooks definition for the kerberos init container. If not set, the values from global `containerLifecycleHooks` will be used.", + "description": "Container Lifecycle Hooks definition for the kerberos init container. If not set, the values from `workers.kerberosInitContainer.containerLifecycleHooks` will be used.", "type": "object", "$ref": "#/definitions/io.k8s.api.core.v1.Lifecycle", "default": {}, @@ -2980,7 +2980,7 @@ ] }, "securityContexts": { - "description": "Security context definition for the kerberos init container. If not set, the values from global `securityContexts` will be used.", + "description": "Security context definition for the kerberos init container. If not set, the values from `workers.kerberosInitContainer.securityContexts` will be used.", "type": "object", "x-docsSection": "Kubernetes", "properties": { @@ -3058,6 +3058,89 @@ ] } } + }, + "kerberosInitContainer": { + "description": "Kerberos init container for pods created with pod-template-file.", + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "description": "Enable kerberos init container.", + "type": "boolean", + "default": false + }, + "resources": { + "description": "Resources on kerberos init container.", + "type": "object", + "default": {}, + "examples": [ + { + "limits": { + "cpu": "100m", + "memory": "128Mi" + }, + "requests": { + "cpu": "100m", + "memory": "128Mi" + } + } + ], + "$ref": "#/definitions/io.k8s.api.core.v1.ResourceRequirements" + }, + "containerLifecycleHooks": { + "description": "Container Lifecycle Hooks definition for the kerberos init container. If not set, the values from `workers.kerberosInitContainer.containerLifecycleHooks` will be used.", + "type": "object", + "$ref": "#/definitions/io.k8s.api.core.v1.Lifecycle", + "default": {}, + "x-docsSection": "Kubernetes", + "examples": [ + { + "postStart": { + "exec": { + "command": [ + "/bin/sh", + "-c", + "echo postStart handler > /usr/share/message" + ] + } + }, + "preStop": { + "exec": { + "command": [ + "/bin/sh", + "-c", + "echo preStop handler > /usr/share/message" + ] + } + } + } + ] + }, + "securityContexts": { + "description": "Security context definition for the kerberos init container. If not set, the values from `workers.kerberosInitContainer.securityContexts` will be used.", + "type": "object", + "x-docsSection": "Kubernetes", + "properties": { + "container": { + "description": "Container security context definition for the kerberos init container.", + "type": "object", + "$ref": "#/definitions/io.k8s.api.core.v1.SecurityContext", + "default": {}, + "x-docsSection": "Kubernetes", + "examples": [ + { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + } + } + ] + } + } + } + } } } } diff --git a/chart/values.yaml b/chart/values.yaml index 27c05066a8e1a..add1703308c8c 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -873,10 +873,12 @@ workers: containerLifecycleHooks: {} # Kerberos init container configuration for Airflow Celery workers and pods created with pod-template-file - # (deprecated, use `workers.celery.kerberosInitContainer` instead) + # Use workers.celery.kerberosInitContainer and/or workers.kubernetes.kerberosInitContainer to separate + # value between Celery workers and pod-template-file kerberosInitContainer: # Enable kerberos init container enabled: false + resources: {} # limits: # cpu: 100m @@ -885,7 +887,7 @@ workers: # cpu: 100m # memory: 128Mi - # Detailed default security context for kerberos init container on container level + # Detailed default security context for kerberos init container securityContexts: container: {} @@ -1146,9 +1148,12 @@ workers: container: {} # Kerberos init container configuration for Airflow Celery workers + # If not set, the values from `workers.kubernetesInitContainer` section will be used. kerberosInitContainer: # Enable kerberos init container + # If workers.kerberosInitContainer.enabled is set to True, this flag has no effect enabled: false + resources: {} # limits: # cpu: 100m @@ -1157,7 +1162,7 @@ workers: # cpu: 100m # memory: 128Mi - # Detailed default security context for kerberos init container on container level + # Detailed default security context for kerberos init container securityContexts: container: {} @@ -1174,6 +1179,28 @@ workers: pod: {} container: {} + # Kerberos init container configuration for pods created with pod-template-file + # If not set, the values from `workers.kubernetesInitContainer` section will be used. + kerberosInitContainer: + # Enable kerberos init container + # If workers.kerberosInitContainer.enabled is set to True, this flag has no effect + enabled: false + + resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + + # Detailed default security context for kerberos init container + securityContexts: + container: {} + + # Container level lifecycle hooks + containerLifecycleHooks: {} + # Airflow scheduler settings scheduler: enabled: true diff --git a/helm-tests/tests/helm_tests/airflow_aux/test_pod_template_file.py b/helm-tests/tests/helm_tests/airflow_aux/test_pod_template_file.py index a6af8f2138b44..cc703391040cf 100644 --- a/helm-tests/tests/helm_tests/airflow_aux/test_pod_template_file.py +++ b/helm-tests/tests/helm_tests/airflow_aux/test_pod_template_file.py @@ -1141,40 +1141,79 @@ def test_airflow_local_settings_kerberos_sidecar(self): "readOnly": True, } in jmespath.search("spec.containers[1].volumeMounts", docs[0]) + def test_kerberos_init_container_default(self): + docs = render_chart( + show_only=["templates/pod-template-file.yaml"], + chart_dir=self.temp_chart_dir, + ) + + assert jmespath.search("spec.initContainers[?name=='kerberos-init']", docs[0]) is None + + @pytest.mark.parametrize("airflow_version", ["1.10.14", "2.0.2", "2.1.0", "2.8.0", "3.0.0"]) + def test_kerberos_init_container_default_different_versions(self, airflow_version): + docs = render_chart( + values={"airflowVersion": airflow_version}, + show_only=["templates/pod-template-file.yaml"], + chart_dir=self.temp_chart_dir, + ) + + assert jmespath.search("spec.initContainers[?name=='kerberos-init']", docs[0]) is None + + @pytest.mark.parametrize("airflow_version", ["1.10.14", "2.0.2", "2.1.0", "2.7.3"]) @pytest.mark.parametrize( - ("airflow_version", "init_container_enabled", "expected_init_containers"), + "workers_values", [ - ("1.10.14", True, 0), - ("1.10.14", False, 0), - ("2.0.2", True, 0), - ("2.0.2", False, 0), - ("2.1.0", True, 0), - ("2.1.0", False, 0), - ("2.8.0", True, 1), - ("2.8.0", False, 0), + {"kerberosInitContainer": {"enabled": True}}, + {"kubernetes": {"kerberosInitContainer": {"enabled": True}}}, ], ) - def test_airflow_kerberos_init_container( - self, airflow_version, init_container_enabled, expected_init_containers - ): + def test_kerberos_init_container_enable_unsupported(self, airflow_version, workers_values): docs = render_chart( values={ "airflowVersion": airflow_version, + "workers": workers_values, + }, + show_only=["templates/pod-template-file.yaml"], + chart_dir=self.temp_chart_dir, + ) + + assert jmespath.search("spec.initContainers[?name=='kerberos-init']", docs[0]) is None + + @pytest.mark.parametrize("airflow_version", ["2.8.0", "3.0.0"]) + @pytest.mark.parametrize( + "workers_values", + [ + {"kerberosInitContainer": {"enabled": True}}, + {"kubernetes": {"kerberosInitContainer": {"enabled": True}}}, + ], + ) + def test_kerberos_init_container_enable_supported(self, airflow_version, workers_values): + docs = render_chart( + values={ + "airflowVersion": airflow_version, + "workers": workers_values, + }, + show_only=["templates/pod-template-file.yaml"], + chart_dir=self.temp_chart_dir, + ) + + assert jmespath.search("spec.initContainers[?name=='kerberos-init']", docs[0]) is not None + + def test_kerberos_init_container_name_and_args_default(self): + docs = render_chart( + values={ "workers": { - "kerberosInitContainer": {"enabled": init_container_enabled}, + "kubernetes": {"kerberosInitContainer": {"enabled": True}}, }, }, show_only=["templates/pod-template-file.yaml"], chart_dir=self.temp_chart_dir, ) - initContainers = jmespath.search("spec.initContainers", docs[0]) - if expected_init_containers == 0: - assert initContainers is None + initContainers = jmespath.search("spec.initContainers[0]", docs[0]) - if expected_init_containers == 1: - assert initContainers[0]["name"] == "kerberos-init" - assert initContainers[0]["args"] == ["kerberos", "-o"] + assert initContainers["name"] == "kerberos-init" + assert initContainers["args"] == ["kerberos", "-o"] @pytest.mark.parametrize( ("workers_values", "expected"), @@ -1232,8 +1271,15 @@ def test_should_not_add_command_by_default(self): ("airflow_version", "workers_values", "kerberos_init_container", "expected_config_name"), [ (None, {"kerberosSidecar": {"enabled": True}}, False, "api-server-config"), + (None, {"kubernetes": {"kerberosInitContainer": {"enabled": True}}}, True, "api-server-config"), (None, {"kerberosInitContainer": {"enabled": True}}, True, "api-server-config"), ("2.10.5", {"kerberosSidecar": {"enabled": True}}, False, "webserver-config"), + ( + "2.10.5", + {"kubernetes": {"kerberosInitContainer": {"enabled": True}}}, + True, + "webserver-config", + ), ("2.10.5", {"kerberosInitContainer": {"enabled": True}}, True, "webserver-config"), ], ) @@ -1265,7 +1311,11 @@ def test_webserver_config_for_kerberos( @pytest.mark.parametrize( "workers_values", - [{"kerberosSidecar": {"enabled": True}}, {"kerberosInitContainer": {"enabled": True}}], + [ + {"kerberosSidecar": {"enabled": True}}, + {"kerberosInitContainer": {"enabled": True}}, + {"kubernetes": {"kerberosInitContainer": {"enabled": True}}}, + ], ) def test_base_contains_kerberos_env(self, workers_values): docs = render_chart( @@ -1278,3 +1328,65 @@ def test_base_contains_kerberos_env(self, workers_values): scheduler_env = jmespath.search("spec.containers[0].env[*].name", docs[0]) assert set(["KRB5_CONFIG", "KRB5CCNAME"]).issubset(scheduler_env) + + @pytest.mark.parametrize( + "workers_values", + [ + { + "kerberosInitContainer": { + "resources": { + "requests": {"cpu": "1m", "memory": "2Mi"}, + "limits": {"cpu": "3m", "memory": "4Mi"}, + } + }, + "kubernetes": {"kerberosInitContainer": {"enabled": True}}, + }, + { + "kubernetes": { + "kerberosInitContainer": { + "enabled": True, + "resources": { + "requests": {"cpu": "1m", "memory": "2Mi"}, + "limits": {"cpu": "3m", "memory": "4Mi"}, + }, + } + } + }, + { + "kerberosInitContainer": { + "resources": { + "requests": {"cpu": "10m", "memory": "20Mi"}, + "limits": {"cpu": "30m", "memory": "40Mi"}, + } + }, + "kubernetes": { + "kerberosInitContainer": { + "enabled": True, + "resources": { + "requests": {"cpu": "1m", "memory": "2Mi"}, + "limits": {"cpu": "3m", "memory": "4Mi"}, + }, + } + }, + }, + ], + ) + def test_kerberos_init_container_resources(self, workers_values): + docs = render_chart( + values={ + "workers": workers_values, + }, + show_only=["templates/pod-template-file.yaml"], + chart_dir=self.temp_chart_dir, + ) + + assert jmespath.search("spec.initContainers[?name=='kerberos-init'] | [0].resources", docs[0]) == { + "requests": { + "cpu": "1m", + "memory": "2Mi", + }, + "limits": { + "cpu": "3m", + "memory": "4Mi", + }, + } diff --git a/helm-tests/tests/helm_tests/airflow_core/test_worker.py b/helm-tests/tests/helm_tests/airflow_core/test_worker.py index 2760cb1cfc4f3..423f08fa7d7bf 100644 --- a/helm-tests/tests/helm_tests/airflow_core/test_worker.py +++ b/helm-tests/tests/helm_tests/airflow_core/test_worker.py @@ -238,6 +238,18 @@ def test_disable_wait_for_migration(self): ) assert actual is None + def test_wait_for_migration_default(self): + docs = render_chart( + show_only=["templates/workers/worker-deployment.yaml"], + ) + + assert ( + jmespath.search( + "spec.template.spec.initContainers[?name=='wait-for-airflow-migrations']", docs[0] + ) + is not None + ) + @pytest.mark.parametrize( ("logs_values", "expect_sub_path"), [ @@ -934,100 +946,148 @@ def test_airflow_local_settings_kerberos_sidecar(self): "readOnly": True, } in jmespath.search("spec.template.spec.containers[2].volumeMounts", docs[0]) + def test_kerberos_init_container_default(self): + docs = render_chart(show_only=["templates/workers/worker-deployment.yaml"]) + assert ( + jmespath.search("spec.template.spec.initContainers[?name=='kerberos-init'] | [0]", docs[0]) + is None + ) + + @pytest.mark.parametrize("airflow_version", ["1.10.14", "2.0.2", "2.1.0", "2.8.0", "3.0.0"]) + def test_kerberos_init_container_default_different_versions(self, airflow_version): + docs = render_chart( + values={"airflowVersion": airflow_version}, + show_only=["templates/workers/worker-deployment.yaml"], + ) + + assert ( + jmespath.search("spec.template.spec.initContainers[?name=='kerberos-init'] | [0]", docs[0]) + is None + ) + + @pytest.mark.parametrize("airflow_version", ["1.10.14", "2.0.2", "2.1.0", "2.7.3"]) @pytest.mark.parametrize( - ("airflow_version", "init_container_enabled", "expected_init_containers"), + "workers_values", [ - ("1.10.14", True, 2), - ("1.10.14", False, 2), - ("2.0.2", True, 2), - ("2.0.2", False, 2), - ("2.1.0", True, 2), - ("2.1.0", False, 2), - ("2.8.0", True, 3), - ("2.8.0", False, 2), + {"kerberosInitContainer": {"enabled": True}}, + {"celery": {"kerberosInitContainer": {"enabled": True}}}, ], ) - def test_airflow_kerberos_init_container( - self, airflow_version, init_container_enabled, expected_init_containers - ): + def test_kerberos_init_container_enable_unsupported(self, airflow_version, workers_values): docs = render_chart( values={ "airflowVersion": airflow_version, - "workers": { - "kerberosInitContainer": {"enabled": init_container_enabled}, - "celery": {"persistence": {"fixPermissions": True}}, - }, + "workers": workers_values, }, show_only=["templates/workers/worker-deployment.yaml"], ) - initContainers = jmespath.search("spec.template.spec.initContainers", docs[0]) - assert len(initContainers) == expected_init_containers - - if expected_init_containers == 3: - assert initContainers[1]["name"] == "kerberos-init" - assert initContainers[1]["args"] == ["kerberos", "-o"] + assert ( + jmespath.search("spec.template.spec.initContainers[?name=='kerberos-init'] | [0]", docs[0]) + is None + ) + @pytest.mark.parametrize("airflow_version", ["2.8.0", "3.0.0"]) @pytest.mark.parametrize( "workers_values", [ {"kerberosInitContainer": {"enabled": True}}, {"celery": {"kerberosInitContainer": {"enabled": True}}}, - { - "kerberosInitContainer": {"enabled": False}, - "celery": {"kerberosInitContainer": {"enabled": True}}, - }, ], ) - def test_airflow_kerberos_init_container_celery_values(self, workers_values): - """Test that workers.celery.kerberosInitContainer configuration works and takes precedence.""" + def test_kerberos_init_container_enable_supported(self, airflow_version, workers_values): docs = render_chart( values={ - "airflowVersion": "2.8.0", - "workers": { - **workers_values, - "celery": { - **workers_values.get("celery", {}), - "persistence": {"fixPermissions": True}, - }, - }, + "airflowVersion": airflow_version, + "workers": workers_values, }, show_only=["templates/workers/worker-deployment.yaml"], ) - initContainers = jmespath.search("spec.template.spec.initContainers", docs[0]) - # Should have 3 init containers: wait-for-migrations, kerberos-init, volume-permissions - assert len(initContainers) == 3 - assert initContainers[1]["name"] == "kerberos-init" - assert initContainers[1]["args"] == ["kerberos", "-o"] + assert ( + jmespath.search("spec.template.spec.initContainers[?name=='kerberos-init'] | [0]", docs[0]) + is not None + ) - def test_airflow_kerberos_init_container_resources(self): - """Test that kerberos init container resources can be configured via workers.celery.kerberosInitContainer.""" + def test_kerberos_init_container_name_and_args_default(self): docs = render_chart( values={ - "airflowVersion": "2.8.0", "workers": { - "celery": { - "kerberosInitContainer": { - "enabled": True, - "resources": { - "limits": {"cpu": "100m", "memory": "128Mi"}, - "requests": {"cpu": "50m", "memory": "64Mi"}, - }, + "celery": {"kerberosInitContainer": {"enabled": True}}, + }, + }, + show_only=["templates/workers/worker-deployment.yaml"], + ) + + initContainers = jmespath.search( + "spec.template.spec.initContainers[?name=='kerberos-init'] | [0]", docs[0] + ) + + assert initContainers["name"] == "kerberos-init" + assert initContainers["args"] == ["kerberos", "-o"] + + @pytest.mark.parametrize( + "workers_values", + [ + { + "kerberosInitContainer": { + "resources": { + "requests": {"cpu": "1m", "memory": "2Mi"}, + "limits": {"cpu": "3m", "memory": "4Mi"}, + } + }, + "celery": {"kerberosInitContainer": {"enabled": True}}, + }, + { + "celery": { + "kerberosInitContainer": { + "enabled": True, + "resources": { + "requests": {"cpu": "1m", "memory": "2Mi"}, + "limits": {"cpu": "3m", "memory": "4Mi"}, }, - }, + } + } + }, + { + "kerberosInitContainer": { + "resources": { + "requests": {"cpu": "10m", "memory": "20Mi"}, + "limits": {"cpu": "30m", "memory": "40Mi"}, + } + }, + "celery": { + "kerberosInitContainer": { + "enabled": True, + "resources": { + "requests": {"cpu": "1m", "memory": "2Mi"}, + "limits": {"cpu": "3m", "memory": "4Mi"}, + }, + } }, }, + ], + ) + def test_kerberos_init_container_resources(self, workers_values): + docs = render_chart( + values={ + "workers": workers_values, + }, show_only=["templates/workers/worker-deployment.yaml"], ) - initContainers = jmespath.search("spec.template.spec.initContainers", docs[0]) - kerberos_init = next((c for c in initContainers if c["name"] == "kerberos-init"), None) - assert kerberos_init is not None - assert kerberos_init["resources"]["limits"]["cpu"] == "100m" - assert kerberos_init["resources"]["limits"]["memory"] == "128Mi" - assert kerberos_init["resources"]["requests"]["cpu"] == "50m" - assert kerberos_init["resources"]["requests"]["memory"] == "64Mi" + assert jmespath.search( + "spec.template.spec.initContainers[?name=='kerberos-init'] | [0].resources", docs[0] + ) == { + "requests": { + "cpu": "1m", + "memory": "2Mi", + }, + "limits": { + "cpu": "3m", + "memory": "4Mi", + }, + } @pytest.mark.parametrize( ("airflow_version", "expected_arg"),