This is an automated email from the ASF dual-hosted git repository.
jedcunningham 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 3f06efa5ca Add webserverConfigConfigMapName (#27419)
3f06efa5ca is described below
commit 3f06efa5ca2d061c5a2df7b08d53e09a552bdd72
Author: JulesTriomphe <[email protected]>
AuthorDate: Thu Dec 8 20:37:15 2022 +0100
Add webserverConfigConfigMapName (#27419)
---
chart/templates/_helpers.yaml | 11 +++++++
.../templates/configmaps/webserver-configmap.yaml | 4 +--
.../templates/scheduler/scheduler-deployment.yaml | 14 +++++++++
.../templates/triggerer/triggerer-deployment.yaml | 11 +++++++
.../templates/webserver/webserver-deployment.yaml | 14 ++++-----
chart/templates/workers/worker-deployment.yaml | 17 ++++++++++
chart/values.schema.json | 14 ++++++++-
chart/values.yaml | 7 +++--
tests/charts/test_airflow_common.py | 36 ++++++++++++++++++++++
tests/charts/test_webserver.py | 12 ++++++++
10 files changed, 128 insertions(+), 12 deletions(-)
diff --git a/chart/templates/_helpers.yaml b/chart/templates/_helpers.yaml
index f3cafc0373..074ecc7d49 100644
--- a/chart/templates/_helpers.yaml
+++ b/chart/templates/_helpers.yaml
@@ -443,6 +443,17 @@ server_tls_key_file = /etc/pgbouncer/server.key
{{ (printf "%s/webserver_config.py" .Values.airflowHome) | quote }}
{{- end }}
+{{ define "airflow_webserver_config_configmap_name" -}}
+{{ default (printf "%s-webserver-config" .Release.Name)
.Values.webserver.webserverConfigConfigMapName }}
+{{- end }}
+
+{{ define "airflow_webserver_config_mount" -}}
+- name: webserver-config
+ mountPath: {{ template "airflow_webserver_config_path" . }}
+ subPath: webserver_config.py
+ readOnly: True
+{{- end -}}
+
{{ define "airflow_local_setting_path" -}}
{{ (printf "%s/config/airflow_local_settings.py" .Values.airflowHome) | quote
}}
{{- end }}
diff --git a/chart/templates/configmaps/webserver-configmap.yaml
b/chart/templates/configmaps/webserver-configmap.yaml
index e8d5ca016e..26fb5094d9 100644
--- a/chart/templates/configmaps/webserver-configmap.yaml
+++ b/chart/templates/configmaps/webserver-configmap.yaml
@@ -18,11 +18,11 @@
################################
## Airflow ConfigMap
#################################
-{{- if .Values.webserver.webserverConfig }}
+{{- if and .Values.webserver.webserverConfig (not
.Values.webserver.webserverConfigConfigMapName) }}
apiVersion: v1
kind: ConfigMap
metadata:
- name: {{ .Release.Name }}-webserver-config
+ name: {{ template "airflow_webserver_config_configmap_name" . }}
labels:
tier: airflow
component: config
diff --git a/chart/templates/scheduler/scheduler-deployment.yaml
b/chart/templates/scheduler/scheduler-deployment.yaml
index 89e5ab3d8c..9f8411c716 100644
--- a/chart/templates/scheduler/scheduler-deployment.yaml
+++ b/chart/templates/scheduler/scheduler-deployment.yaml
@@ -139,6 +139,9 @@ spec:
{{- include "airflow_config_mount" . | nindent 12 }}
{{- if .Values.scheduler.extraVolumeMounts }}
{{ toYaml .Values.scheduler.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
{{- end }}
args:
{{- include "wait-for-migrations-command" . | indent 10 }}
@@ -204,6 +207,9 @@ spec:
- name: logs
mountPath: {{ template "airflow_logs" . }}
{{- include "airflow_config_mount" . | nindent 12 }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
{{- if and $localOrDagProcessorDisabled (or .Values.dags.persistence.enabled
.Values.dags.gitSync.enabled) }}
{{- include "airflow_dags_mount" . | nindent 12 }}
{{- end }}
@@ -235,6 +241,9 @@ spec:
mountPath: {{ template "airflow_logs" . }}
{{- if .Values.scheduler.extraVolumeMounts }}
{{ toYaml .Values.scheduler.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
{{- end }}
{{- end }}
{{- if .Values.scheduler.extraContainers }}
@@ -244,6 +253,11 @@ spec:
- name: config
configMap:
name: {{ template "airflow_config" . }}
+ {{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+ - name: webserver-config
+ configMap:
+ name: {{ template "airflow_webserver_config_configmap_name" . }}
+ {{- end }}
{{- if $localOrDagProcessorDisabled }}
{{- if .Values.dags.persistence.enabled }}
- name: dags
diff --git a/chart/templates/triggerer/triggerer-deployment.yaml
b/chart/templates/triggerer/triggerer-deployment.yaml
index d79bc5ccc4..33f478caed 100644
--- a/chart/templates/triggerer/triggerer-deployment.yaml
+++ b/chart/templates/triggerer/triggerer-deployment.yaml
@@ -120,6 +120,9 @@ spec:
{{- if .Values.triggerer.extraVolumeMounts }}
{{ toYaml .Values.triggerer.extraVolumeMounts | nindent 12 }}
{{- end }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
args:
{{- include "wait-for-migrations-command" . | nindent 10 }}
envFrom:
@@ -156,6 +159,9 @@ spec:
- name: logs
mountPath: {{ template "airflow_logs" . }}
{{- include "airflow_config_mount" . | nindent 12 }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
{{- if or .Values.dags.persistence.enabled
.Values.dags.gitSync.enabled }}
{{- include "airflow_dags_mount" . | nindent 12 }}
{{- end }}
@@ -187,6 +193,11 @@ spec:
- name: config
configMap:
name: {{ template "airflow_config" . }}
+ {{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+ - name: webserver-config
+ configMap:
+ name: {{ template "airflow_webserver_config_configmap_name" . }}
+ {{- end }}
{{- if .Values.dags.persistence.enabled }}
- name: dags
persistentVolumeClaim:
diff --git a/chart/templates/webserver/webserver-deployment.yaml
b/chart/templates/webserver/webserver-deployment.yaml
index e745eed6a8..81d97ab83d 100644
--- a/chart/templates/webserver/webserver-deployment.yaml
+++ b/chart/templates/webserver/webserver-deployment.yaml
@@ -131,6 +131,9 @@ spec:
{{- include "airflow_config_mount" . | nindent 12 }}
{{- if .Values.webserver.extraVolumeMounts }}
{{ toYaml .Values.webserver.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
{{- end }}
args:
{{- include "wait-for-migrations-command" . | indent 10 }}
@@ -169,11 +172,8 @@ spec:
readOnly: true
{{- end }}
{{- include "airflow_config_mount" . | nindent 12 }}
-{{- if .Values.webserver.webserverConfig }}
- - name: webserver-config
- mountPath: {{ template "airflow_webserver_config_path" . }}
- subPath: webserver_config.py
- readOnly: true
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
{{- end }}
{{- if and (semverCompare "<2.0.0" .Values.airflowVersion) (or
.Values.dags.gitSync.enabled .Values.dags.persistence.enabled) }}
{{- include "airflow_dags_mount" . | nindent 12 }}
@@ -232,10 +232,10 @@ spec:
- name: config
configMap:
name: {{ template "airflow_config" . }}
- {{- if .Values.webserver.webserverConfig }}
+ {{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
- name: webserver-config
configMap:
- name: {{ .Release.Name }}-webserver-config
+ name: {{ template "airflow_webserver_config_configmap_name" . }}
{{- end }}
{{- if (semverCompare "<2.0.0" .Values.airflowVersion) }}
{{- if .Values.dags.persistence.enabled }}
diff --git a/chart/templates/workers/worker-deployment.yaml
b/chart/templates/workers/worker-deployment.yaml
index c60b09ce3e..5e8969b669 100644
--- a/chart/templates/workers/worker-deployment.yaml
+++ b/chart/templates/workers/worker-deployment.yaml
@@ -149,6 +149,9 @@ spec:
{{- include "airflow_config_mount" . | nindent 12 }}
{{- if .Values.workers.extraVolumeMounts }}
{{ toYaml .Values.workers.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
{{- end }}
args:
{{- include "wait-for-migrations-command" . | indent 10 }}
@@ -216,6 +219,9 @@ spec:
{{- if or .Values.dags.persistence.enabled
.Values.dags.gitSync.enabled }}
{{- include "airflow_dags_mount" . | nindent 12 }}
{{- end }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
envFrom:
{{- include "custom_airflow_environment_from" . | default "\n []" |
indent 10 }}
env:
@@ -257,6 +263,9 @@ spec:
{{- if .Values.workers.extraVolumeMounts }}
{{ toYaml .Values.workers.extraVolumeMounts | indent 12 }}
{{- end }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
{{- end }}
{{- if .Values.workers.kerberosSidecar.enabled }}
- name: worker-kerberos
@@ -282,6 +291,9 @@ spec:
readOnly: false
{{- if .Values.workers.extraVolumeMounts }}
{{ toYaml .Values.workers.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
{{- end }}
envFrom:
{{- include "custom_airflow_environment_from" . | default "\n []" |
indent 10 }}
@@ -303,6 +315,11 @@ spec:
- name: config
configMap:
name: {{ template "airflow_config" . }}
+ {{- if or .Values.webserver.webserverConfig
.Values.webserver.webserverConfigConfigMapName }}
+ - name: webserver-config
+ configMap:
+ name: {{ template "airflow_webserver_config_configmap_name" . }}
+ {{- end }}
{{- if .Values.kerberos.enabled }}
- name: kerberos-keytab
secret:
diff --git a/chart/values.schema.json b/chart/values.schema.json
index b9cb8fd1a5..96506e24c4 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -3429,7 +3429,7 @@
}
},
"webserverConfig": {
- "description": "This string (can be templated) will be
mounted into the Airflow webserver as a custom `webserver_config.py`. You can
bake a `webserver_config.py` in to your image instead.",
+ "description": "This string (can be templated) will be
mounted into the Airflow webserver as a custom `webserver_config.py`. You can
bake a `webserver_config.py` in to your image instead or specify a configmap
containing the webserver_config.py.",
"type": [
"string",
"null"
@@ -3440,6 +3440,18 @@
"from airflow import configuration as conf\n\n# The
SQLAlchemy connection string.\nSQLALCHEMY_DATABASE_URI = conf.get('database',
'SQL_ALCHEMY_CONN')\n\n# Flask-WTF flag for CSRF\nCSRF_ENABLED = True"
]
},
+ "webserverConfigConfigMapName": {
+ "description": "The configmap name containing the
webserver_config.py.",
+ "type": [
+ "string",
+ "null"
+ ],
+ "x-docsSection": "Common",
+ "default": null,
+ "examples": [
+ "my-webserver-configmap"
+ ]
+ },
"service": {
"description": "Webserver Service configuration.",
"type": "object",
diff --git a/chart/values.yaml b/chart/values.yaml
index b05ddf4d58..22bba7da14 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -970,8 +970,10 @@ webserver:
extraVolumes: []
extraVolumeMounts: []
- # This string (can be templated) will be mounted into the Airflow Webserver
as a custom
- # webserver_config.py. You can bake a webserver_config.py in to your image
instead.
+ # This string (can be templated) will be mounted into the Airflow Webserver
+ # as a custom webserver_config.py. You can bake a webserver_config.py in to
+ # your image instead or specify a configmap containing the
+ # webserver_config.py.
webserverConfig: ~
# webserverConfig: |
# from airflow import configuration as conf
@@ -981,6 +983,7 @@ webserver:
# # Flask-WTF flag for CSRF
# CSRF_ENABLED = True
+ webserverConfigConfigMapName: ~
service:
type: ClusterIP
diff --git a/tests/charts/test_airflow_common.py
b/tests/charts/test_airflow_common.py
index 2a983c194e..bb1389334d 100644
--- a/tests/charts/test_airflow_common.py
+++ b/tests/charts/test_airflow_common.py
@@ -89,6 +89,42 @@ class TestAirflowCommon:
for doc in docs:
assert expected_mount in
jmespath.search("spec.template.spec.containers[0].volumeMounts", doc)
+ def test_webserver_config_configmap_name_volume_mounts(self):
+ configmap_name = "my-configmap"
+ docs = render_chart(
+ values={
+ "webserver": {
+ "webserverConfig": "CSRF_ENABLED = True # {{
.Release.Name }}",
+ "webserverConfigConfigMapName": configmap_name,
+ },
+ "workers": {"kerberosSidecar": {"enabled": True}},
+ },
+ show_only=[
+ "templates/scheduler/scheduler-deployment.yaml",
+ "templates/triggerer/triggerer-deployment.yaml",
+ "templates/webserver/webserver-deployment.yaml",
+ "templates/workers/worker-deployment.yaml",
+ ],
+ )
+ for index in range(len(docs)):
+ print(docs[index])
+ assert "webserver-config" in [
+ c["name"]
+ for r in jmespath.search(
+
"spec.template.spec.initContainers[?name=='wait-for-airflow-migrations'].volumeMounts",
+ docs[index],
+ )
+ for c in r
+ ]
+ for container in jmespath.search("spec.template.spec.containers",
docs[index]):
+ assert "webserver-config" in [c["name"] for c in
jmespath.search("volumeMounts", container)]
+ assert "webserver-config" in [
+ c["name"] for c in
jmespath.search("spec.template.spec.volumes", docs[index])
+ ]
+ assert configmap_name == jmespath.search(
+
"spec.template.spec.volumes[?name=='webserver-config'].configMap.name | [0]",
docs[index]
+ )
+
def test_annotations(self):
"""
Test Annotations are correctly applied on all pods created Scheduler,
Webserver & Worker
diff --git a/tests/charts/test_webserver.py b/tests/charts/test_webserver.py
index dbe8a80dd9..c5551e730b 100644
--- a/tests/charts/test_webserver.py
+++ b/tests/charts/test_webserver.py
@@ -758,6 +758,18 @@ class TestWebserverConfigmap:
docs =
render_chart(show_only=["templates/configmaps/webserver-configmap.yaml"])
assert 0 == len(docs)
+ def test_no_webserver_config_configmap_with_configmap_name(self):
+ docs = render_chart(
+ values={
+ "webserver": {
+ "webserverConfig": "CSRF_ENABLED = True # {{
.Release.Name }}",
+ "webserverConfigConfigMapName": "my-configmap",
+ }
+ },
+ show_only=["templates/configmaps/webserver-configmap.yaml"],
+ )
+ assert 0 == len(docs)
+
def test_webserver_config_configmap(self):
docs = render_chart(
values={"webserver": {"webserverConfig": "CSRF_ENABLED = True #
{{ .Release.Name }}"}},