This is an automated email from the ASF dual-hosted git repository.

jscheffl pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new b299cf42010 Add workers.celery.podManagementPolicy field (#60359)
b299cf42010 is described below

commit b299cf42010702ac3f4bdd8804757b0b21363f2a
Author: Przemysław Mirowski <[email protected]>
AuthorDate: Sun Jan 11 09:49:55 2026 +0100

    Add workers.celery.podManagementPolicy field (#60359)
    
    * Add workers.celery.podManagementPolicy field
    
    * Misc
---
 chart/templates/NOTES.txt                          |  8 +++++
 chart/templates/workers/worker-deployment.yaml     |  4 +--
 chart/values.schema.json                           | 14 +++++++-
 chart/values.yaml                                  |  5 +++
 .../tests/helm_tests/airflow_core/test_worker.py   | 39 +++++++++++++++++++++-
 5 files changed, 66 insertions(+), 4 deletions(-)

diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt
index fc79327ddf1..4cf3844a499 100644
--- a/chart/templates/NOTES.txt
+++ b/chart/templates/NOTES.txt
@@ -332,6 +332,14 @@ DEPRECATION WARNING:
 
 {{- end }}
 
+{{- if not (empty .Values.workers.podManagementPolicy) }}
+
+ DEPRECATION WARNING:
+    `workers.podManagementPolicy` has been renamed to 
`workers.celery.podManagementPolicy`.
+    Please change your values as support for the old name will be dropped in a 
future release.
+
+{{- end }}
+
 {{ if (semverCompare ">=3.0.0" .Values.airflowVersion) }}
 #####################################################
 #  WARNING: You should set a static API secret key  #
diff --git a/chart/templates/workers/worker-deployment.yaml 
b/chart/templates/workers/worker-deployment.yaml
index be7eb614dcf..c0701a85a2f 100644
--- a/chart/templates/workers/worker-deployment.yaml
+++ b/chart/templates/workers/worker-deployment.yaml
@@ -76,8 +76,8 @@ spec:
       tier: airflow
       component: worker
       release: {{ .Release.Name }}
-  {{- if and $persistence .Values.workers.podManagementPolicy }}
-  podManagementPolicy: {{ .Values.workers.podManagementPolicy }}
+  {{- if and $persistence (or .Values.workers.celery.podManagementPolicy 
.Values.workers.podManagementPolicy) }}
+  podManagementPolicy: {{ .Values.workers.celery.podManagementPolicy | default 
.Values.workers.podManagementPolicy }}
   {{- end }}
   {{- if and $persistence (or .Values.workers.celery.updateStrategy 
.Values.workers.updateStrategy) }}
   updateStrategy: {{- toYaml (.Values.workers.celery.updateStrategy | default 
.Values.workers.updateStrategy) | nindent 4 }}
diff --git a/chart/values.schema.json b/chart/values.schema.json
index f3132d6a006..696a70d4de4 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -1725,7 +1725,7 @@
                     "default": null
                 },
                 "podManagementPolicy": {
-                    "description": "Specifies the policy for managing pods 
within the Airflow Celery worker. Only applicable to StatefulSet.",
+                    "description": "Specifies the policy for managing pods 
within the Airflow Celery worker (deprecated, use 
`workers.celery.podManagementPolicy` instead). Only applicable to StatefulSet.",
                     "type": [
                         "null",
                         "string"
@@ -2682,6 +2682,18 @@
                                 }
                             }
                         },
+                        "podManagementPolicy": {
+                            "description": "Specifies the policy for managing 
pods within the Airflow Celery worker. Only applicable to StatefulSet.",
+                            "type": [
+                                "null",
+                                "string"
+                            ],
+                            "default": null,
+                            "enum": [
+                                "OrderedReady",
+                                "Parallel"
+                            ]
+                        },
                         "serviceAccount": {
                             "description": "Create ServiceAccount.",
                             "type": "object",
diff --git a/chart/values.yaml b/chart/values.yaml
index be3bb953beb..d657485df47 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -687,6 +687,7 @@ workers:
       maxUnavailable: "50%"
 
   # Allow relaxing ordering guarantees for Airflow Celery worker while 
preserving its uniqueness and identity
+  # (deprecated, use `workers.celery.podManagementPolicy` instead)
   # podManagementPolicy: Parallel
 
   # When not set, the values defined in the global securityContext will
@@ -1065,6 +1066,10 @@ workers:
         maxSurge: "100%"
         maxUnavailable: "50%"
 
+    # Allow relaxing ordering guarantees for Airflow Celery worker
+    # while preserving its uniqueness and identity
+    # podManagementPolicy: Parallel
+
     # Create ServiceAccount for Airflow Celery workers
     serviceAccount:
       # default value is true
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 01d090dd16b..c00e2de0102 100644
--- a/helm-tests/tests/helm_tests/airflow_core/test_worker.py
+++ b/helm-tests/tests/helm_tests/airflow_core/test_worker.py
@@ -18,7 +18,7 @@ from __future__ import annotations
 
 import jmespath
 import pytest
-from chart_utils.helm_template_generator import render_chart
+from chart_utils.helm_template_generator import HelmFailedError, render_chart
 from chart_utils.log_groomer import LogGroomerTestBase
 
 
@@ -1593,6 +1593,43 @@ class TestWorker:
             == 0
         )
 
+    def test_pod_management_policy_default(self):
+        docs = 
render_chart(show_only=["templates/workers/worker-deployment.yaml"])
+        assert jmespath.search("spec.podManagementPolicy", docs[0]) is None
+
+    @pytest.mark.parametrize(
+        ("workers_values", "expected"),
+        [
+            ({"podManagementPolicy": "Parallel"}, "Parallel"),
+            ({"podManagementPolicy": "OrderedReady"}, "OrderedReady"),
+            ({"celery": {"podManagementPolicy": "Parallel"}}, "Parallel"),
+            ({"celery": {"podManagementPolicy": "OrderedReady"}}, 
"OrderedReady"),
+            (
+                {"podManagementPolicy": "OrderedReady", "celery": 
{"podManagementPolicy": "Parallel"}},
+                "Parallel",
+            ),
+            (
+                {"podManagementPolicy": "Parallel", "celery": 
{"podManagementPolicy": "OrderedReady"}},
+                "OrderedReady",
+            ),
+        ],
+    )
+    def test_pod_management_policy(self, workers_values, expected):
+        docs = render_chart(
+            values={"workers": workers_values}, 
show_only=["templates/workers/worker-deployment.yaml"]
+        )
+
+        assert jmespath.search("spec.podManagementPolicy", docs[0]) == expected
+
+    @pytest.mark.parametrize(
+        "workers_values", [{"podManagementPolicy": "Test"}, {"celery": 
{"podManagementPolicy": "Test"}}]
+    )
+    def test_pod_management_policy_not_valid_value(self, workers_values):
+        with pytest.raises(HelmFailedError):
+            render_chart(
+                values={"workers": workers_values}, 
show_only=["templates/workers/worker-deployment.yaml"]
+            )
+
 
 class TestWorkerLogGroomer(LogGroomerTestBase):
     """Worker groomer."""

Reply via email to