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 97fa483fa29 Add ability to disable apiserver from the helm chart using 
apiServer.enabled (#56493)
97fa483fa29 is described below

commit 97fa483fa294a0801bb43dee9b6399459e500ad8
Author: Phil <[email protected]>
AuthorDate: Wed Nov 19 15:39:09 2025 -0600

    Add ability to disable apiserver from the helm chart using 
apiServer.enabled (#56493)
    
    Co-authored-by: Jens Scheffler <[email protected]>
---
 .../api-server/api-server-deployment.yaml          |  2 +-
 chart/templates/api-server/api-server-ingress.yaml |  2 +-
 .../api-server/api-server-networkpolicy.yaml       |  2 +-
 .../api-server/api-server-poddisruptionbudget.yaml |  2 +-
 chart/templates/api-server/api-server-service.yaml |  2 +-
 .../api-server/api-server-serviceaccount.yaml      |  2 +-
 chart/templates/secrets/api-secret-key-secret.yaml |  2 +-
 chart/templates/secrets/jwt-secret.yaml            |  2 +-
 chart/values.schema.json                           |  5 +++
 chart/values.yaml                                  |  2 +-
 .../helm_tests/airflow_core/test_api_server.py     | 44 ++++++++++++++++++++++
 11 files changed, 58 insertions(+), 9 deletions(-)

diff --git a/chart/templates/api-server/api-server-deployment.yaml 
b/chart/templates/api-server/api-server-deployment.yaml
index 06d86dd6843..48647e99900 100644
--- a/chart/templates/api-server/api-server-deployment.yaml
+++ b/chart/templates/api-server/api-server-deployment.yaml
@@ -20,7 +20,7 @@
 ################################
 ## Airflow API Server Deployment
 #################################
-{{- if semverCompare ">=3.0.0" .Values.airflowVersion }}
+{{- if and .Values.apiServer.enabled (semverCompare ">=3.0.0" 
.Values.airflowVersion) }}
 {{- $nodeSelector := or .Values.apiServer.nodeSelector .Values.nodeSelector }}
 {{- $affinity := or .Values.apiServer.affinity .Values.affinity }}
 {{- $tolerations := or .Values.apiServer.tolerations .Values.tolerations }}
diff --git a/chart/templates/api-server/api-server-ingress.yaml 
b/chart/templates/api-server/api-server-ingress.yaml
index c0d01a5b4a9..991e008ba00 100644
--- a/chart/templates/api-server/api-server-ingress.yaml
+++ b/chart/templates/api-server/api-server-ingress.yaml
@@ -20,7 +20,7 @@
 ################################
 ## Airflow API Server Ingress
 #################################
-{{- if semverCompare ">=3.0.0" .Values.airflowVersion }}
+{{- if and .Values.apiServer.enabled (semverCompare ">=3.0.0" 
.Values.airflowVersion) }}
 {{- if or .Values.ingress.apiServer.enabled .Values.ingress.enabled }}
 {{- $fullname := (include "airflow.fullname" .) }}
 apiVersion: networking.k8s.io/v1
diff --git a/chart/templates/api-server/api-server-networkpolicy.yaml 
b/chart/templates/api-server/api-server-networkpolicy.yaml
index 020827cb960..c3171049aa2 100644
--- a/chart/templates/api-server/api-server-networkpolicy.yaml
+++ b/chart/templates/api-server/api-server-networkpolicy.yaml
@@ -20,7 +20,7 @@
 ################################
 ## Airflow API Server NetworkPolicy
 #################################
-{{- if semverCompare ">=3.0.0" .Values.airflowVersion }}
+{{- if and .Values.apiServer.enabled (semverCompare ">=3.0.0" 
.Values.airflowVersion) }}
 {{- if .Values.networkPolicies.enabled }}
 apiVersion: networking.k8s.io/v1
 kind: NetworkPolicy
diff --git a/chart/templates/api-server/api-server-poddisruptionbudget.yaml 
b/chart/templates/api-server/api-server-poddisruptionbudget.yaml
index a006cca0c7d..4895b4ab5bb 100644
--- a/chart/templates/api-server/api-server-poddisruptionbudget.yaml
+++ b/chart/templates/api-server/api-server-poddisruptionbudget.yaml
@@ -20,7 +20,7 @@
 ################################
 ## Airflow API Server PodDisruptionBudget
 #################################
-{{- if semverCompare ">=3.0.0" .Values.airflowVersion }}
+{{- if and .Values.apiServer.enabled (semverCompare ">=3.0.0" 
.Values.airflowVersion) }}
 {{- if .Values.apiServer.podDisruptionBudget.enabled }}
 apiVersion: policy/v1
 kind: PodDisruptionBudget
diff --git a/chart/templates/api-server/api-server-service.yaml 
b/chart/templates/api-server/api-server-service.yaml
index 32ccced4909..6cf50a172c3 100644
--- a/chart/templates/api-server/api-server-service.yaml
+++ b/chart/templates/api-server/api-server-service.yaml
@@ -20,7 +20,7 @@
 ################################
 ## Airflow API Server Service
 #################################
-{{- if semverCompare ">=3.0.0" .Values.airflowVersion }}
+{{- if and .Values.apiServer.enabled (semverCompare ">=3.0.0" 
.Values.airflowVersion) }}
 apiVersion: v1
 kind: Service
 metadata:
diff --git a/chart/templates/api-server/api-server-serviceaccount.yaml 
b/chart/templates/api-server/api-server-serviceaccount.yaml
index d7c5d2ea6fd..0fc260ea64b 100644
--- a/chart/templates/api-server/api-server-serviceaccount.yaml
+++ b/chart/templates/api-server/api-server-serviceaccount.yaml
@@ -20,7 +20,7 @@
 ######################################
 ## Airflow API Server ServiceAccount
 ######################################
-{{- if and .Values.apiServer.serviceAccount.create (semverCompare ">=3.0.0" 
.Values.airflowVersion) }}
+{{- if and (semverCompare ">=3.0.0" .Values.airflowVersion) 
.Values.apiServer.enabled .Values.apiServer.serviceAccount.create }}
 apiVersion: v1
 kind: ServiceAccount
 automountServiceAccountToken: {{ 
.Values.apiServer.serviceAccount.automountServiceAccountToken }}
diff --git a/chart/templates/secrets/api-secret-key-secret.yaml 
b/chart/templates/secrets/api-secret-key-secret.yaml
index 52e0fff689f..d6da362b8ee 100644
--- a/chart/templates/secrets/api-secret-key-secret.yaml
+++ b/chart/templates/secrets/api-secret-key-secret.yaml
@@ -20,7 +20,7 @@
 ############################################
 ## Airflow Api Flask Secret Key Secret
 ############################################
-{{- if and (semverCompare ">=3.0.0" .Values.airflowVersion) (not 
.Values.apiSecretKeySecretName) }}
+{{- if and (semverCompare ">=3.0.0" .Values.airflowVersion) 
.Values.apiServer.enabled (not .Values.apiSecretKeySecretName) }}
 apiVersion: v1
 kind: Secret
 metadata:
diff --git a/chart/templates/secrets/jwt-secret.yaml 
b/chart/templates/secrets/jwt-secret.yaml
index d0448c58051..0eebbedd709 100644
--- a/chart/templates/secrets/jwt-secret.yaml
+++ b/chart/templates/secrets/jwt-secret.yaml
@@ -21,7 +21,7 @@
 ## Airflow JWT Secret
 ############################################
 {{- if semverCompare ">=3.0.0" .Values.airflowVersion }}
-{{- if not .Values.jwtSecretName }}
+{{- if and .Values.apiServer.enabled (not .Values.jwtSecretName) }}
 apiVersion: v1
 kind: Secret
 metadata:
diff --git a/chart/values.schema.json b/chart/values.schema.json
index e9d673a72f4..ee7183e2e72 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -4940,6 +4940,11 @@
             "x-docsSection": "API Server",
             "additionalProperties": false,
             "properties": {
+                "enabled": {
+                    "description": "Enable Airflow API server deployment.",
+                    "type": "boolean",
+                    "default": true
+                },
                 "configMapAnnotations": {
                     "description": "Extra annotations to apply to the API 
server configmap.",
                     "type": "object",
diff --git a/chart/values.yaml b/chart/values.yaml
index a5960971f7d..e66dfd0cb3a 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -1414,7 +1414,7 @@ migrateDatabaseJob:
   env: []
 
 apiServer:
-
+  enabled: true
   # Number of Airflow API servers in the deployment
   replicas: 1
   # Max number of old replicasets to retain
diff --git a/helm-tests/tests/helm_tests/airflow_core/test_api_server.py 
b/helm-tests/tests/helm_tests/airflow_core/test_api_server.py
index 9c007eb908f..45e2ec831d1 100644
--- a/helm-tests/tests/helm_tests/airflow_core/test_api_server.py
+++ b/helm-tests/tests/helm_tests/airflow_core/test_api_server.py
@@ -594,6 +594,17 @@ class TestAPIServerDeployment:
         assert jmespath.search("spec.template.spec.hostAliases[0].ip", 
docs[0]) == "127.0.0.1"
         assert 
jmespath.search("spec.template.spec.hostAliases[0].hostnames[0]", docs[0]) == 
"foo.local"
 
+    def test_can_be_disabled(self):
+        """
+        API server can be disabled by configuration.
+        """
+        docs = render_chart(
+            values={"apiServer": {"enabled": False}},
+            show_only=["templates/api-server/api-server-deployment.yaml"],
+        )
+
+        assert len(docs) == 0
+
 
 class TestAPIServerService:
     """Tests api-server service."""
@@ -700,6 +711,17 @@ class TestAPIServerService:
         assert jmespath.search("spec.type", docs[0]) == "NodePort"
         assert expected_ports == jmespath.search("spec.ports", docs[0])
 
+    def test_can_be_disabled(self):
+        """
+        API server service can be disabled by configuration.
+        """
+        docs = render_chart(
+            values={"apiServer": {"enabled": False}},
+            show_only=["templates/api-server/api-server-service.yaml"],
+        )
+
+        assert len(docs) == 0
+
 
 class TestAPIServerNetworkPolicy:
     """Tests api-server network policy."""
@@ -779,6 +801,17 @@ class TestAPIServerNetworkPolicy:
         assert "test_label" in jmespath.search("metadata.labels", docs[0])
         assert jmespath.search("metadata.labels", docs[0])["test_label"] == 
"test_label_value"
 
+    def test_can_be_disabled(self):
+        """
+        API server networkpolicy can be disabled by configuration.
+        """
+        docs = render_chart(
+            values={"apiServer": {"enabled": False}},
+            show_only=["templates/api-server/api-server-networkpolicy.yaml"],
+        )
+
+        assert len(docs) == 0
+
 
 class TestAPIServerServiceAccount:
     """Tests api-server service account."""
@@ -817,3 +850,14 @@ class TestAPIServerServiceAccount:
             show_only=["templates/api-server/api-server-serviceaccount.yaml"],
         )
         assert jmespath.search("automountServiceAccountToken", docs[0]) is 
False
+
+    def test_can_be_disabled(self):
+        """
+        API Server should be able to be disabled if the users desires.
+        """
+        docs = render_chart(
+            values={"apiServer": {"enabled": False}},
+            show_only=["templates/api-server/api-server-serviceaccount.yaml"],
+        )
+
+        assert len(docs) == 0

Reply via email to