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