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 1a828f393b Support naming customization on helm chart resources 
(#31066)
1a828f393b is described below

commit 1a828f393b220abbcd3a751bf98a6ec003776c1e
Author: Felipe Galindo Sanchez <[email protected]>
AuthorDate: Tue Aug 15 17:06:39 2023 -0700

    Support naming customization on helm chart resources (#31066)
---
 .github/workflows/ci.yml                           | 10 ++-
 chart/newsfragments/31066.significant.rst          | 23 +++++++
 chart/templates/NOTES.txt                          |  4 +-
 chart/templates/_helpers.yaml                      | 63 ++++++++++-------
 chart/templates/cleanup/cleanup-cronjob.yaml       |  2 +-
 chart/templates/configmaps/statsd-configmap.yaml   |  2 +-
 .../dag-processor/dag-processor-deployment.yaml    |  2 +-
 chart/templates/flower/flower-deployment.yaml      |  2 +-
 chart/templates/flower/flower-ingress.yaml         |  2 +-
 chart/templates/flower/flower-networkpolicy.yaml   |  2 +-
 chart/templates/flower/flower-service.yaml         |  2 +-
 chart/templates/jobs/create-user-job.yaml          |  2 +-
 chart/templates/jobs/migrate-database-job.yaml     |  2 +-
 .../templates/pgbouncer/pgbouncer-deployment.yaml  |  2 +-
 .../pgbouncer/pgbouncer-networkpolicy.yaml         |  2 +-
 .../pgbouncer/pgbouncer-poddisruptionbudget.yaml   |  2 +-
 chart/templates/pgbouncer/pgbouncer-service.yaml   |  2 +-
 chart/templates/rbac/pod-cleanup-role.yaml         |  2 +-
 chart/templates/rbac/pod-cleanup-rolebinding.yaml  |  4 +-
 chart/templates/rbac/pod-launcher-role.yaml        |  2 +-
 chart/templates/rbac/pod-launcher-rolebinding.yaml |  4 +-
 chart/templates/rbac/pod-log-reader-role.yaml      |  2 +-
 .../templates/rbac/pod-log-reader-rolebinding.yaml |  4 +-
 .../security-context-constraint-rolebinding.yaml   |  2 +-
 chart/templates/redis/redis-networkpolicy.yaml     |  2 +-
 chart/templates/redis/redis-service.yaml           |  2 +-
 chart/templates/redis/redis-statefulset.yaml       |  4 +-
 .../templates/scheduler/scheduler-deployment.yaml  |  4 +-
 .../scheduler/scheduler-networkpolicy.yaml         |  2 +-
 .../scheduler/scheduler-poddisruptionbudget.yaml   |  2 +-
 chart/templates/scheduler/scheduler-service.yaml   |  2 +-
 chart/templates/secrets/elasticsearch-secret.yaml  |  2 +-
 chart/templates/secrets/flower-secret.yaml         |  2 +-
 .../secrets/metadata-connection-secret.yaml        |  2 +-
 chart/templates/secrets/registry-secret.yaml       |  2 +-
 .../secrets/result-backend-connection-secret.yaml  |  2 +-
 .../secrets/webserver-secret-key-secret.yaml       |  2 +-
 chart/templates/statsd/statsd-deployment.yaml      |  4 +-
 chart/templates/statsd/statsd-networkpolicy.yaml   |  2 +-
 chart/templates/statsd/statsd-service.yaml         |  2 +-
 .../templates/triggerer/triggerer-deployment.yaml  |  2 +-
 .../triggerer/triggerer-networkpolicy.yaml         |  2 +-
 chart/templates/triggerer/triggerer-service.yaml   |  2 +-
 .../templates/webserver/webserver-deployment.yaml  |  2 +-
 chart/templates/webserver/webserver-ingress.yaml   |  5 +-
 .../webserver/webserver-networkpolicy.yaml         |  2 +-
 .../webserver/webserver-poddisruptionbudget.yaml   |  2 +-
 chart/templates/webserver/webserver-service.yaml   |  2 +-
 chart/templates/workers/worker-deployment.yaml     |  4 +-
 chart/templates/workers/worker-kedaautoscaler.yaml |  4 +-
 chart/templates/workers/worker-networkpolicy.yaml  |  2 +-
 chart/templates/workers/worker-service.yaml        |  2 +-
 chart/values.schema.json                           |  6 ++
 chart/values.yaml                                  | 14 ++++
 .../airflow_breeze/commands/kubernetes_commands.py | 23 +++++++
 .../commands/kubernetes_commands_config.py         |  2 +
 docs/helm-chart/index.rst                          | 28 ++++++++
 helm_tests/airflow_aux/test_basic_helm_chart.py    | 68 +++++++++++++++---
 helm_tests/airflow_aux/test_cleanup_pods.py        |  2 +-
 helm_tests/airflow_aux/test_pod_template_file.py   |  2 +-
 helm_tests/security/test_kerberos.py               |  2 +-
 helm_tests/security/test_rbac.py                   |  6 +-
 images/breeze/output-commands-hash.txt             |  6 +-
 images/breeze/output_k8s_deploy-airflow.svg        | 50 +++++++-------
 images/breeze/output_k8s_run-complete-tests.svg    | 80 ++++++++++++----------
 65 files changed, 338 insertions(+), 166 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e36724d581..b2c022c308 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1513,12 +1513,15 @@ jobs:
 
   tests-kubernetes:
     timeout-minutes: 240
-    name: "Helm: ${{matrix.executor}} - 
${{needs.build-info.outputs.kubernetes-versions-list-as-string}}"
+    name: "\
+      Helm: ${{matrix.executor}} - ${{matrix.use-standard-naming}} - \
+      ${{needs.build-info.outputs.kubernetes-versions-list-as-string}}"
     runs-on: "${{needs.build-info.outputs.runs-on}}"
     needs: [build-info, wait-for-prod-images]
     strategy:
       matrix:
         executor: [KubernetesExecutor, CeleryExecutor, LocalExecutor]
+        use-standard-naming: [true, false]
       fail-fast: false
     env:
       RUNS_ON: "${{needs.build-info.outputs.runs-on}}"
@@ -1555,12 +1558,13 @@ jobs:
           PYTHON_VERSIONS: ${{ 
needs.build-info.outputs.python-versions-list-as-string }}
           KUBERNETES_VERSIONS: 
${{needs.build-info.outputs.kubernetes-versions-list-as-string}}
           EXECUTOR: ${{matrix.executor}}
+          USE_STANDARD_NAMING: ${{matrix.use-standard-naming}}
           VERBOSE: false
       - name: Upload KinD logs on failure 
${{needs.build-info.outputs.kubernetes-combos-list-as-string}}
         uses: actions/upload-artifact@v3
         if: failure() || cancelled()
         with:
-          name: kind-logs-${{matrix.executor}}
+          name: kind-logs-${{matrix.executor}}-${{matrix.use-standard-naming}}
           path: /tmp/kind_logs_*
           retention-days: 7
       - name: >
@@ -1568,7 +1572,7 @@ jobs:
         uses: actions/upload-artifact@v3
         if: failure() || cancelled()
         with:
-          name: k8s-test-resources-${{matrix.executor}}
+          name: 
k8s-test-resources-${{matrix.executor}}-${{matrix.use-standard-naming}}
           path: /tmp/k8s_test_resources_*
           retention-days: 7
       - name: "Delete clusters just in case they are left"
diff --git a/chart/newsfragments/31066.significant.rst 
b/chart/newsfragments/31066.significant.rst
new file mode 100644
index 0000000000..c2fca5fbec
--- /dev/null
+++ b/chart/newsfragments/31066.significant.rst
@@ -0,0 +1,23 @@
+Support naming customization on helm chart resources, some resources may be 
renamed during upgrade
+
+This is a new opt-in switch ``useStandardNaming``, for backwards 
compatibility, to leverage the standard naming convention, which allows full 
use of fullnameOverride and nameOverride in all resources.
+
+Only the following resources will be renamed using default of 
``useStandardNaming=false``:
+- ConfigMap {release}-airflow-config to {release}-config
+- Secret {release}-airflow-metadata to {release}-metadata
+- Secret {release}-airflow-result-backend to {release}-result-backend
+
+For existing installations, all your resources will be recreated with a new 
name and helm will delete previous resources.
+
+This won't delete existing PVCs for logs used by statefulset/deployments, but 
it will recreate them with brand new PVCs.
+If you do want to preserve logs history you'll need to manually copy the data 
of these volumes into the new volumes after
+deployment. Depending on what storage backend/class you're using this 
procedure may vary. If you don't mind starting
+with fresh logs/redis volumes, you can just delete the old pvcs that will be 
names, for example:
+
+.. code-block:: bash
+
+    kubectl delete pvc -n airflow logs-gta-triggerer-0
+    kubectl delete pvc -n airflow logs-gta-worker-0
+    kubectl delete pvc -n airflow redis-db-gta-redis-0
+
+If you do not change ``useStandardNaming`` or ``fullnameOverride`` after 
upgrade, you can proceed as usual and no unexpected behaviours will be 
presented.
diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt
index 57e8c9da52..2e96cfa80c 100644
--- a/chart/templates/NOTES.txt
+++ b/chart/templates/NOTES.txt
@@ -98,11 +98,11 @@ Flower dashboard:
 {{- else }}
 You can now access your dashboard(s) by executing the following command(s) and 
visiting the corresponding port at localhost in your browser:
 
-Airflow Webserver:     kubectl port-forward svc/{{ .Release.Name }}-webserver 
{{ .Values.ports.airflowUI }}:{{ .Values.ports.airflowUI }} --namespace {{ 
.Release.Namespace }}
+Airflow Webserver:     kubectl port-forward svc/{{ include "airflow.fullname" 
. }}-webserver {{ .Values.ports.airflowUI }}:{{ .Values.ports.airflowUI }} 
--namespace {{ .Release.Namespace }}
 
 {{- if .Values.flower.enabled }}
 {{- if or (eq .Values.executor "CeleryExecutor") (eq .Values.executor 
"CeleryKubernetesExecutor")}}
-Flower dashboard:      kubectl port-forward svc/{{ .Release.Name }}-flower {{ 
.Values.ports.flowerUI }}:{{ .Values.ports.flowerUI }} --namespace {{ 
.Release.Namespace }}
+Flower dashboard:      kubectl port-forward svc/{{ include "airflow.fullname" 
. }}-flower {{ .Values.ports.flowerUI }}:{{ .Values.ports.flowerUI }} 
--namespace {{ .Release.Namespace }}
 
 {{- end }}
 {{- end }}
diff --git a/chart/templates/_helpers.yaml b/chart/templates/_helpers.yaml
index e210222846..0269f03aa1 100644
--- a/chart/templates/_helpers.yaml
+++ b/chart/templates/_helpers.yaml
@@ -23,7 +23,22 @@ We truncate at 63 chars because some Kubernetes name fields 
are limited to this
 If release name contains chart name it will be used as a full name.
 */}}
 {{- define "airflow.fullname" -}}
-  {{- if .Values.fullnameOverride }}
+  {{- if not .Values.useStandardNaming }}
+    {{- .Release.Name }}
+  {{- else if .Values.fullnameOverride }}
+    {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+  {{- else }}
+    {{- $name := default .Chart.Name .Values.nameOverride }}
+    {{- if contains $name .Release.Name }}
+      {{- .Release.Name | trunc 63 | trimSuffix "-" }}
+    {{- else }}
+      {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+    {{- end }}
+  {{- end }}
+{{- end }}
+
+{{- define "airflow.serviceAccountName" -}}
+  {{ if .Values.fullnameOverride }}
     {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
   {{- else }}
     {{- $name := default .Chart.Name .Values.nameOverride }}
@@ -320,7 +335,7 @@ If release name contains chart name it will be used as a 
full name.
 {{- end }}
 
 {{- define "webserver_secret_key_secret" -}}
-  {{- default (printf "%s-webserver-secret-key" .Release.Name) 
.Values.webserverSecretKeySecretName }}
+  {{- default (printf "%s-webserver-secret-key" (include "airflow.fullname" 
.)) .Values.webserverSecretKeySecretName }}
 {{- end }}
 
 {{- define "redis_password_secret" -}}
@@ -328,11 +343,11 @@ If release name contains chart name it will be used as a 
full name.
 {{- end }}
 
 {{- define "airflow_metadata_secret" -}}
-  {{- default (printf "%s-airflow-metadata" .Release.Name) 
.Values.data.metadataSecretName }}
+  {{- default (printf "%s-metadata" (include "airflow.fullname" .)) 
.Values.data.metadataSecretName }}
 {{- end }}
 
 {{- define "airflow_result_backend_secret" -}}
-  {{- default (printf "%s-airflow-result-backend" .Release.Name) 
.Values.data.resultBackendSecretName }}
+  {{- default (printf "%s-result-backend" (include "airflow.fullname" .)) 
.Values.data.resultBackendSecretName }}
 {{- end }}
 
 {{- define "airflow_pod_template_file" -}}
@@ -340,31 +355,31 @@ If release name contains chart name it will be used as a 
full name.
 {{- end }}
 
 {{- define "pgbouncer_config_secret" -}}
-  {{- default (printf "%s-pgbouncer-config" .Release.Name) 
.Values.pgbouncer.configSecretName }}
+  {{- default (printf "%s-pgbouncer-config" (include "airflow.fullname" .)) 
.Values.pgbouncer.configSecretName }}
 {{- end }}
 
 {{- define "pgbouncer_certificates_secret" -}}
-  {{- printf "%s-pgbouncer-certificates" .Release.Name }}
+  {{- printf "%s-pgbouncer-certificates" (include "airflow.fullname" .) }}
 {{- end }}
 
 {{- define "pgbouncer_stats_secret" -}}
-  {{- printf "%s-pgbouncer-stats" .Release.Name }}
+  {{- printf "%s-pgbouncer-stats" (include "airflow.fullname" .) }}
 {{- end }}
 
 {{- define "registry_secret" -}}
-  {{- default (printf "%s-registry" .Release.Name) .Values.registry.secretName 
}}
+  {{- default (printf "%s-registry" (include "airflow.fullname" .)) 
.Values.registry.secretName }}
 {{- end }}
 
 {{- define "elasticsearch_secret" -}}
-  {{- default (printf "%s-elasticsearch" .Release.Name) 
.Values.elasticsearch.secretName }}
+  {{- default (printf "%s-elasticsearch" (include "airflow.fullname" .)) 
.Values.elasticsearch.secretName }}
 {{- end }}
 
 {{- define "flower_secret" -}}
-  {{- default (printf "%s-flower" .Release.Name) .Values.flower.secretName }}
+  {{- default (printf "%s-flower" (include "airflow.fullname" .)) 
.Values.flower.secretName }}
 {{- end }}
 
 {{- define "kerberos_keytab_secret" -}}
-  {{- printf "%s-kerberos-keytab" .Release.Name }}
+  {{- printf "%s-kerberos-keytab" (include "airflow.fullname" .) }}
 {{- end }}
 
 {{- define "kerberos_ccache_path" -}}
@@ -489,7 +504,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{- end }}
 
 {{- define "airflow_config" -}}
-  {{- printf "%s-airflow-config" .Release.Name }}
+  {{- printf "%s-config" (include "airflow.fullname" .) }}
 {{- end }}
 
 {{- define "airflow_config_mount" -}}
@@ -508,7 +523,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the webserver service account to use */}}
 {{- define "webserver.serviceAccountName" -}}
   {{- if .Values.webserver.serviceAccount.create }}
-    {{- default (printf "%s-webserver" (include "airflow.fullname" .)) 
.Values.webserver.serviceAccount.name }}
+    {{- default (printf "%s-webserver" (include "airflow.serviceAccountName" 
.)) .Values.webserver.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.webserver.serviceAccount.name }}
   {{- end }}
@@ -517,7 +532,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the redis service account to use */}}
 {{- define "redis.serviceAccountName" -}}
   {{- if .Values.redis.serviceAccount.create }}
-    {{- default (printf "%s-redis" (include "airflow.fullname" .)) 
.Values.redis.serviceAccount.name }}
+    {{- default (printf "%s-redis" (include "airflow.serviceAccountName" .)) 
.Values.redis.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.redis.serviceAccount.name }}
   {{- end }}
@@ -526,7 +541,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the flower service account to use */}}
 {{- define "flower.serviceAccountName" -}}
   {{- if .Values.flower.serviceAccount.create }}
-    {{- default (printf "%s-flower" (include "airflow.fullname" .)) 
.Values.flower.serviceAccount.name }}
+    {{- default (printf "%s-flower" (include "airflow.serviceAccountName" .)) 
.Values.flower.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.flower.serviceAccount.name }}
   {{- end }}
@@ -535,7 +550,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the scheduler service account to use */}}
 {{- define "scheduler.serviceAccountName" -}}
   {{- if .Values.scheduler.serviceAccount.create }}
-    {{- default (printf "%s-scheduler" (include "airflow.fullname" .)) 
.Values.scheduler.serviceAccount.name }}
+    {{- default (printf "%s-scheduler" (include "airflow.serviceAccountName" 
.)) .Values.scheduler.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.scheduler.serviceAccount.name }}
   {{- end }}
@@ -544,7 +559,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the StatsD service account to use */}}
 {{- define "statsd.serviceAccountName" -}}
   {{- if .Values.statsd.serviceAccount.create }}
-    {{- default (printf "%s-statsd" (include "airflow.fullname" .)) 
.Values.statsd.serviceAccount.name }}
+    {{- default (printf "%s-statsd" (include "airflow.serviceAccountName" .)) 
.Values.statsd.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.statsd.serviceAccount.name }}
   {{- end }}
@@ -553,7 +568,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the create user job service account to use */}}
 {{- define "createUserJob.serviceAccountName" -}}
   {{- if .Values.createUserJob.serviceAccount.create }}
-    {{- default (printf "%s-create-user-job" (include "airflow.fullname" .)) 
.Values.createUserJob.serviceAccount.name }}
+    {{- default (printf "%s-create-user-job" (include 
"airflow.serviceAccountName" .)) .Values.createUserJob.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.createUserJob.serviceAccount.name }}
   {{- end }}
@@ -562,7 +577,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the migrate database job service account to use */}}
 {{- define "migrateDatabaseJob.serviceAccountName" -}}
   {{- if .Values.migrateDatabaseJob.serviceAccount.create }}
-    {{- default (printf "%s-migrate-database-job" (include "airflow.fullname" 
.)) .Values.migrateDatabaseJob.serviceAccount.name }}
+    {{- default (printf "%s-migrate-database-job" (include 
"airflow.serviceAccountName" .)) .Values.migrateDatabaseJob.serviceAccount.name 
}}
   {{- else }}
     {{- default "default" .Values.migrateDatabaseJob.serviceAccount.name }}
   {{- end }}
@@ -571,7 +586,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the worker service account to use */}}
 {{- define "worker.serviceAccountName" -}}
   {{- if .Values.workers.serviceAccount.create }}
-    {{- default (printf "%s-worker" (include "airflow.fullname" .)) 
.Values.workers.serviceAccount.name }}
+    {{- default (printf "%s-worker" (include "airflow.serviceAccountName" .)) 
.Values.workers.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.workers.serviceAccount.name }}
   {{- end }}
@@ -580,7 +595,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the triggerer service account to use */}}
 {{- define "triggerer.serviceAccountName" -}}
   {{- if .Values.triggerer.serviceAccount.create }}
-    {{- default (printf "%s-triggerer" (include "airflow.fullname" .)) 
.Values.triggerer.serviceAccount.name }}
+    {{- default (printf "%s-triggerer" (include "airflow.serviceAccountName" 
.)) .Values.triggerer.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.triggerer.serviceAccount.name }}
   {{- end }}
@@ -589,7 +604,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the dag processor service account to use */}}
 {{- define "dagProcessor.serviceAccountName" -}}
   {{- if .Values.dagProcessor.serviceAccount.create }}
-    {{- default (printf "%s-dag-processor" (include "airflow.fullname" .)) 
.Values.dagProcessor.serviceAccount.name }}
+    {{- default (printf "%s-dag-processor" (include 
"airflow.serviceAccountName" .)) .Values.dagProcessor.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.dagProcessor.serviceAccount.name }}
   {{- end }}
@@ -598,7 +613,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the pgbouncer service account to use */}}
 {{- define "pgbouncer.serviceAccountName" -}}
   {{- if .Values.pgbouncer.serviceAccount.create }}
-    {{- default (printf "%s-pgbouncer" (include "airflow.fullname" .)) 
.Values.pgbouncer.serviceAccount.name }}
+    {{- default (printf "%s-pgbouncer" (include "airflow.serviceAccountName" 
.)) .Values.pgbouncer.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.pgbouncer.serviceAccount.name }}
   {{- end }}
@@ -607,7 +622,7 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{/* Create the name of the cleanup service account to use */}}
 {{- define "cleanup.serviceAccountName" -}}
   {{- if .Values.cleanup.serviceAccount.create }}
-    {{- default (printf "%s-cleanup" (include "airflow.fullname" .)) 
.Values.cleanup.serviceAccount.name }}
+    {{- default (printf "%s-cleanup" (include "airflow.serviceAccountName" .)) 
.Values.cleanup.serviceAccount.name }}
   {{- else }}
     {{- default "default" .Values.cleanup.serviceAccount.name }}
   {{- end }}
diff --git a/chart/templates/cleanup/cleanup-cronjob.yaml 
b/chart/templates/cleanup/cleanup-cronjob.yaml
index 57cfdf7be4..9a70cc5e08 100644
--- a/chart/templates/cleanup/cleanup-cronjob.yaml
+++ b/chart/templates/cleanup/cleanup-cronjob.yaml
@@ -29,7 +29,7 @@
 apiVersion: batch/v1
 kind: CronJob
 metadata:
-  name: {{ .Release.Name }}-cleanup
+  name: {{ include "airflow.fullname" . }}-cleanup
   labels:
     tier: airflow
     component: airflow-cleanup-pods
diff --git a/chart/templates/configmaps/statsd-configmap.yaml 
b/chart/templates/configmaps/statsd-configmap.yaml
index 31a909192f..c195109673 100644
--- a/chart/templates/configmaps/statsd-configmap.yaml
+++ b/chart/templates/configmaps/statsd-configmap.yaml
@@ -24,7 +24,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: {{ .Release.Name }}-statsd
+  name: {{ include "airflow.fullname" . }}-statsd
   labels:
     tier: airflow
     component: config
diff --git a/chart/templates/dag-processor/dag-processor-deployment.yaml 
b/chart/templates/dag-processor/dag-processor-deployment.yaml
index e748e9dff4..efecfbca43 100644
--- a/chart/templates/dag-processor/dag-processor-deployment.yaml
+++ b/chart/templates/dag-processor/dag-processor-deployment.yaml
@@ -32,7 +32,7 @@
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: {{ .Release.Name }}-dag-processor
+  name: {{ include "airflow.fullname" . }}-dag-processor
   labels:
     tier: airflow
     component: dag-processor
diff --git a/chart/templates/flower/flower-deployment.yaml 
b/chart/templates/flower/flower-deployment.yaml
index 199d9010d3..7ccfade2c5 100644
--- a/chart/templates/flower/flower-deployment.yaml
+++ b/chart/templates/flower/flower-deployment.yaml
@@ -32,7 +32,7 @@
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: {{ .Release.Name }}-flower
+  name: {{ include "airflow.fullname" . }}-flower
   labels:
     tier: airflow
     component: flower
diff --git a/chart/templates/flower/flower-ingress.yaml 
b/chart/templates/flower/flower-ingress.yaml
index 3ced2025c9..7c798ad9fb 100644
--- a/chart/templates/flower/flower-ingress.yaml
+++ b/chart/templates/flower/flower-ingress.yaml
@@ -25,7 +25,7 @@
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
-  name: {{ .Release.Name }}-flower-ingress
+  name: {{ include "airflow.fullname" . }}-flower-ingress
   labels:
     tier: airflow
     component: flower-ingress
diff --git a/chart/templates/flower/flower-networkpolicy.yaml 
b/chart/templates/flower/flower-networkpolicy.yaml
index 1133e77fa2..b0f9db8b09 100644
--- a/chart/templates/flower/flower-networkpolicy.yaml
+++ b/chart/templates/flower/flower-networkpolicy.yaml
@@ -27,7 +27,7 @@
 apiVersion: networking.k8s.io/v1
 kind: NetworkPolicy
 metadata:
-  name: {{ .Release.Name }}-flower-policy
+  name: {{ include "airflow.fullname" . }}-flower-policy
   labels:
     tier: airflow
     component: airflow-flower-policy
diff --git a/chart/templates/flower/flower-service.yaml 
b/chart/templates/flower/flower-service.yaml
index 695779b896..0847ff6274 100644
--- a/chart/templates/flower/flower-service.yaml
+++ b/chart/templates/flower/flower-service.yaml
@@ -25,7 +25,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Release.Name }}-flower
+  name: {{ include "airflow.fullname" . }}-flower
   labels:
     tier: airflow
     component: flower
diff --git a/chart/templates/jobs/create-user-job.yaml 
b/chart/templates/jobs/create-user-job.yaml
index 94d0970ae4..737e7cce70 100644
--- a/chart/templates/jobs/create-user-job.yaml
+++ b/chart/templates/jobs/create-user-job.yaml
@@ -30,7 +30,7 @@
 apiVersion: batch/v1
 kind: Job
 metadata:
-  name: {{ .Release.Name }}-create-user
+  name: {{ include "airflow.fullname" . }}-create-user
   labels:
     tier: airflow
     component: create-user-job
diff --git a/chart/templates/jobs/migrate-database-job.yaml 
b/chart/templates/jobs/migrate-database-job.yaml
index 30dda11b5b..d76f6f2ea0 100644
--- a/chart/templates/jobs/migrate-database-job.yaml
+++ b/chart/templates/jobs/migrate-database-job.yaml
@@ -30,7 +30,7 @@
 apiVersion: batch/v1
 kind: Job
 metadata:
-  name: {{ .Release.Name }}-run-airflow-migrations
+  name: {{ include "airflow.fullname" . }}-run-airflow-migrations
   labels:
     tier: airflow
     component: run-airflow-migrations
diff --git a/chart/templates/pgbouncer/pgbouncer-deployment.yaml 
b/chart/templates/pgbouncer/pgbouncer-deployment.yaml
index 14665692fc..8b6ae051da 100644
--- a/chart/templates/pgbouncer/pgbouncer-deployment.yaml
+++ b/chart/templates/pgbouncer/pgbouncer-deployment.yaml
@@ -32,7 +32,7 @@
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: {{ .Release.Name }}-pgbouncer
+  name: {{ include "airflow.fullname" . }}-pgbouncer
   labels:
     tier: airflow
     component: pgbouncer
diff --git a/chart/templates/pgbouncer/pgbouncer-networkpolicy.yaml 
b/chart/templates/pgbouncer/pgbouncer-networkpolicy.yaml
index f61aa9ed37..f79c3bb423 100644
--- a/chart/templates/pgbouncer/pgbouncer-networkpolicy.yaml
+++ b/chart/templates/pgbouncer/pgbouncer-networkpolicy.yaml
@@ -24,7 +24,7 @@
 apiVersion: networking.k8s.io/v1
 kind: NetworkPolicy
 metadata:
-  name: {{ .Release.Name }}-pgbouncer-policy
+  name: {{ include "airflow.fullname" . }}-pgbouncer-policy
   labels:
     tier: airflow
     component: airflow-pgbouncer-policy
diff --git a/chart/templates/pgbouncer/pgbouncer-poddisruptionbudget.yaml 
b/chart/templates/pgbouncer/pgbouncer-poddisruptionbudget.yaml
index 73a9c7c6f9..964438cf2c 100644
--- a/chart/templates/pgbouncer/pgbouncer-poddisruptionbudget.yaml
+++ b/chart/templates/pgbouncer/pgbouncer-poddisruptionbudget.yaml
@@ -24,7 +24,7 @@
 apiVersion: policy/v1
 kind: PodDisruptionBudget
 metadata:
-  name: {{ .Release.Name }}-pgbouncer-pdb
+  name: {{ include "airflow.fullname" . }}-pgbouncer-pdb
   labels:
     tier: airflow
     component: pgbouncer
diff --git a/chart/templates/pgbouncer/pgbouncer-service.yaml 
b/chart/templates/pgbouncer/pgbouncer-service.yaml
index 7d98cf4fb9..c93dce8aee 100644
--- a/chart/templates/pgbouncer/pgbouncer-service.yaml
+++ b/chart/templates/pgbouncer/pgbouncer-service.yaml
@@ -24,7 +24,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Release.Name }}-pgbouncer
+  name: {{ include "airflow.fullname" . }}-pgbouncer
   labels:
     tier: airflow
     component: pgbouncer
diff --git a/chart/templates/rbac/pod-cleanup-role.yaml 
b/chart/templates/rbac/pod-cleanup-role.yaml
index 2fc3986383..af73df6f61 100644
--- a/chart/templates/rbac/pod-cleanup-role.yaml
+++ b/chart/templates/rbac/pod-cleanup-role.yaml
@@ -24,7 +24,7 @@
 apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
-  name: {{ .Release.Name }}-cleanup-role
+  name: {{ include "airflow.fullname" . }}-cleanup-role
   labels:
     tier: airflow
     release: {{ .Release.Name }}
diff --git a/chart/templates/rbac/pod-cleanup-rolebinding.yaml 
b/chart/templates/rbac/pod-cleanup-rolebinding.yaml
index 9a85750ad4..8d927fb5b8 100644
--- a/chart/templates/rbac/pod-cleanup-rolebinding.yaml
+++ b/chart/templates/rbac/pod-cleanup-rolebinding.yaml
@@ -24,7 +24,7 @@
 apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
-  name: {{ .Release.Name }}-cleanup-rolebinding
+  name: {{ include "airflow.fullname" . }}-cleanup-rolebinding
   labels:
     tier: airflow
     release: {{ .Release.Name }}
@@ -36,7 +36,7 @@ metadata:
 roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: Role
-  name: {{ .Release.Name }}-cleanup-role
+  name: {{ include "airflow.fullname" . }}-cleanup-role
 subjects:
   - kind: ServiceAccount
     name: {{ include "cleanup.serviceAccountName" . }}
diff --git a/chart/templates/rbac/pod-launcher-role.yaml 
b/chart/templates/rbac/pod-launcher-role.yaml
index 42b6013aff..271394db07 100644
--- a/chart/templates/rbac/pod-launcher-role.yaml
+++ b/chart/templates/rbac/pod-launcher-role.yaml
@@ -28,7 +28,7 @@ kind: ClusterRole
 kind: Role
 {{- end }}
 metadata:
-  name: {{ .Release.Name }}-pod-launcher-role
+  name: {{ include "airflow.fullname" . }}-pod-launcher-role
   {{- if not .Values.multiNamespaceMode }}
   namespace: "{{ .Release.Namespace }}"
   {{- end }}
diff --git a/chart/templates/rbac/pod-launcher-rolebinding.yaml 
b/chart/templates/rbac/pod-launcher-rolebinding.yaml
index fc269f78a5..60705c8993 100644
--- a/chart/templates/rbac/pod-launcher-rolebinding.yaml
+++ b/chart/templates/rbac/pod-launcher-rolebinding.yaml
@@ -33,7 +33,7 @@ metadata:
   {{- if not .Values.multiNamespaceMode }}
   namespace: "{{ .Release.Namespace }}"
   {{- end }}
-  name: {{ .Release.Name }}-pod-launcher-rolebinding
+  name: {{ include "airflow.fullname" . }}-pod-launcher-rolebinding
   labels:
     tier: airflow
     release: {{ .Release.Name }}
@@ -49,7 +49,7 @@ roleRef:
   {{- else }}
   kind: Role
   {{- end }}
-  name: {{ .Release.Name }}-pod-launcher-role
+  name: {{ include "airflow.fullname" . }}-pod-launcher-role
 subjects:
   {{- if has .Values.executor $schedulerLaunchExecutors }}
   - kind: ServiceAccount
diff --git a/chart/templates/rbac/pod-log-reader-role.yaml 
b/chart/templates/rbac/pod-log-reader-role.yaml
index 93fabc71a4..d048d36fa2 100644
--- a/chart/templates/rbac/pod-log-reader-role.yaml
+++ b/chart/templates/rbac/pod-log-reader-role.yaml
@@ -28,7 +28,7 @@ kind: ClusterRole
 kind: Role
 {{- end }}
 metadata:
-  name: {{ .Release.Name }}-pod-log-reader-role
+  name: {{ include "airflow.fullname" . }}-pod-log-reader-role
   {{- if not .Values.multiNamespaceMode }}
   namespace: "{{ .Release.Namespace }}"
   {{- end }}
diff --git a/chart/templates/rbac/pod-log-reader-rolebinding.yaml 
b/chart/templates/rbac/pod-log-reader-rolebinding.yaml
index 7811017421..e441f9af85 100644
--- a/chart/templates/rbac/pod-log-reader-rolebinding.yaml
+++ b/chart/templates/rbac/pod-log-reader-rolebinding.yaml
@@ -31,7 +31,7 @@ metadata:
   {{- if not .Values.multiNamespaceMode }}
   namespace: "{{ .Release.Namespace }}"
   {{- end }}
-  name: {{ .Release.Name }}-pod-log-reader-rolebinding
+  name: {{ include "airflow.fullname" . }}-pod-log-reader-rolebinding
   labels:
     tier: airflow
     release: {{ .Release.Name }}
@@ -47,7 +47,7 @@ roleRef:
   {{- else }}
   kind: Role
   {{- end }}
-  name: {{ .Release.Name }}-pod-log-reader-role
+  name: {{ include "airflow.fullname" . }}-pod-log-reader-role
 subjects:
   {{- if .Values.webserver.allowPodLogReading }}
   - kind: ServiceAccount
diff --git a/chart/templates/rbac/security-context-constraint-rolebinding.yaml 
b/chart/templates/rbac/security-context-constraint-rolebinding.yaml
index 9c6eff3c07..070a8e8169 100644
--- a/chart/templates/rbac/security-context-constraint-rolebinding.yaml
+++ b/chart/templates/rbac/security-context-constraint-rolebinding.yaml
@@ -32,7 +32,7 @@ metadata:
   {{- if not .Values.multiNamespaceMode }}
   namespace: "{{ .Release.Namespace }}"
   {{- end }}
-  name: {{ .Release.Name }}-scc-rolebinding
+  name: {{ include "airflow.fullname" . }}-scc-rolebinding
   labels:
     tier: airflow
     release: {{ .Release.Name }}
diff --git a/chart/templates/redis/redis-networkpolicy.yaml 
b/chart/templates/redis/redis-networkpolicy.yaml
index 9f6f1c1c26..457d183099 100644
--- a/chart/templates/redis/redis-networkpolicy.yaml
+++ b/chart/templates/redis/redis-networkpolicy.yaml
@@ -24,7 +24,7 @@
 apiVersion: networking.k8s.io/v1
 kind: NetworkPolicy
 metadata:
-  name: {{ .Release.Name }}-redis-policy
+  name: {{ include "airflow.fullname" . }}-redis-policy
   labels:
     tier: airflow
     component: redis-policy
diff --git a/chart/templates/redis/redis-service.yaml 
b/chart/templates/redis/redis-service.yaml
index af857a5186..17d4c8d5e4 100644
--- a/chart/templates/redis/redis-service.yaml
+++ b/chart/templates/redis/redis-service.yaml
@@ -24,7 +24,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Release.Name }}-redis
+  name: {{ include "airflow.fullname" . }}-redis
   labels:
     tier: airflow
     component: redis
diff --git a/chart/templates/redis/redis-statefulset.yaml 
b/chart/templates/redis/redis-statefulset.yaml
index ec544cc6f2..810196602f 100644
--- a/chart/templates/redis/redis-statefulset.yaml
+++ b/chart/templates/redis/redis-statefulset.yaml
@@ -30,7 +30,7 @@
 apiVersion: apps/v1
 kind: StatefulSet
 metadata:
-  name: {{ .Release.Name }}-redis
+  name: {{ include "airflow.fullname" . }}-redis
   labels:
     tier: airflow
     component: redis
@@ -41,7 +41,7 @@ metadata:
       {{- toYaml . | nindent 4 }}
     {{- end }}
 spec:
-  serviceName: {{ .Release.Name }}-redis
+  serviceName: {{ include "airflow.fullname" . }}-redis
   selector:
     matchLabels:
       tier: airflow
diff --git a/chart/templates/scheduler/scheduler-deployment.yaml 
b/chart/templates/scheduler/scheduler-deployment.yaml
index 60e4101618..88c0a842d6 100644
--- a/chart/templates/scheduler/scheduler-deployment.yaml
+++ b/chart/templates/scheduler/scheduler-deployment.yaml
@@ -44,7 +44,7 @@
 apiVersion: apps/v1
 kind: {{ if $stateful }}StatefulSet{{ else }}Deployment{{ end }}
 metadata:
-  name: {{ .Release.Name }}-scheduler
+  name: {{ include "airflow.fullname" . }}-scheduler
   labels:
     tier: airflow
     component: scheduler
@@ -60,7 +60,7 @@ metadata:
   {{- end }}
 spec:
   {{- if $stateful }}
-  serviceName: {{ .Release.Name }}-scheduler
+  serviceName: {{ include "airflow.fullname" . }}-scheduler
   {{- end }}
   replicas: {{ .Values.scheduler.replicas }}
   {{- if $revisionHistoryLimit }}
diff --git a/chart/templates/scheduler/scheduler-networkpolicy.yaml 
b/chart/templates/scheduler/scheduler-networkpolicy.yaml
index 3f33e443bf..bbd985371e 100644
--- a/chart/templates/scheduler/scheduler-networkpolicy.yaml
+++ b/chart/templates/scheduler/scheduler-networkpolicy.yaml
@@ -24,7 +24,7 @@
 apiVersion: networking.k8s.io/v1
 kind: NetworkPolicy
 metadata:
-  name: {{ .Release.Name }}-scheduler-policy
+  name: {{ include "airflow.fullname" . }}-scheduler-policy
   labels:
     tier: airflow
     component: airflow-scheduler-policy
diff --git a/chart/templates/scheduler/scheduler-poddisruptionbudget.yaml 
b/chart/templates/scheduler/scheduler-poddisruptionbudget.yaml
index b81ea19945..3c6d7983b1 100644
--- a/chart/templates/scheduler/scheduler-poddisruptionbudget.yaml
+++ b/chart/templates/scheduler/scheduler-poddisruptionbudget.yaml
@@ -24,7 +24,7 @@
 apiVersion: policy/v1
 kind: PodDisruptionBudget
 metadata:
-  name: {{ .Release.Name }}-scheduler-pdb
+  name: {{ include "airflow.fullname" . }}-scheduler-pdb
   labels:
     tier: airflow
     component: scheduler
diff --git a/chart/templates/scheduler/scheduler-service.yaml 
b/chart/templates/scheduler/scheduler-service.yaml
index 761dc931b0..b2bf2a87db 100644
--- a/chart/templates/scheduler/scheduler-service.yaml
+++ b/chart/templates/scheduler/scheduler-service.yaml
@@ -24,7 +24,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Release.Name }}-scheduler
+  name: {{ include "airflow.fullname" . }}-scheduler
   labels:
     tier: airflow
     component: scheduler
diff --git a/chart/templates/secrets/elasticsearch-secret.yaml 
b/chart/templates/secrets/elasticsearch-secret.yaml
index e8b1f79484..aea70f7af9 100644
--- a/chart/templates/secrets/elasticsearch-secret.yaml
+++ b/chart/templates/secrets/elasticsearch-secret.yaml
@@ -24,7 +24,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ .Release.Name }}-elasticsearch
+  name: {{ include "airflow.fullname" . }}-elasticsearch
   labels:
     release: {{ .Release.Name }}
     chart: {{ .Chart.Name }}
diff --git a/chart/templates/secrets/flower-secret.yaml 
b/chart/templates/secrets/flower-secret.yaml
index 8bcfb7631b..c28fa17a7d 100644
--- a/chart/templates/secrets/flower-secret.yaml
+++ b/chart/templates/secrets/flower-secret.yaml
@@ -24,7 +24,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ .Release.Name }}-flower
+  name: {{ include "airflow.fullname" . }}-flower
   labels:
     release: {{ .Release.Name }}
     chart: {{ .Chart.Name }}
diff --git a/chart/templates/secrets/metadata-connection-secret.yaml 
b/chart/templates/secrets/metadata-connection-secret.yaml
index c7597cd300..7f9840f9db 100644
--- a/chart/templates/secrets/metadata-connection-secret.yaml
+++ b/chart/templates/secrets/metadata-connection-secret.yaml
@@ -31,7 +31,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ .Release.Name }}-airflow-metadata
+  name: {{ include "airflow.fullname" . }}-metadata
   labels:
     tier: airflow
     release: {{ .Release.Name }}
diff --git a/chart/templates/secrets/registry-secret.yaml 
b/chart/templates/secrets/registry-secret.yaml
index a89ea5ec34..19add845ac 100644
--- a/chart/templates/secrets/registry-secret.yaml
+++ b/chart/templates/secrets/registry-secret.yaml
@@ -24,7 +24,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ .Release.Name }}-registry
+  name: {{ include "airflow.fullname" . }}-registry
   labels:
     release: {{ .Release.Name }}
     chart: {{ .Chart.Name }}
diff --git a/chart/templates/secrets/result-backend-connection-secret.yaml 
b/chart/templates/secrets/result-backend-connection-secret.yaml
index 33ecb18a4e..e89046d3dd 100644
--- a/chart/templates/secrets/result-backend-connection-secret.yaml
+++ b/chart/templates/secrets/result-backend-connection-secret.yaml
@@ -33,7 +33,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ .Release.Name }}-airflow-result-backend
+  name: {{ include "airflow.fullname" . }}-result-backend
   labels:
     tier: airflow
     release: {{ .Release.Name }}
diff --git a/chart/templates/secrets/webserver-secret-key-secret.yaml 
b/chart/templates/secrets/webserver-secret-key-secret.yaml
index c7f89cadf6..d7b1d5236f 100644
--- a/chart/templates/secrets/webserver-secret-key-secret.yaml
+++ b/chart/templates/secrets/webserver-secret-key-secret.yaml
@@ -25,7 +25,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ .Release.Name }}-webserver-secret-key
+  name: {{ include "airflow.fullname" . }}-webserver-secret-key
   labels:
     tier: airflow
     component: webserver
diff --git a/chart/templates/statsd/statsd-deployment.yaml 
b/chart/templates/statsd/statsd-deployment.yaml
index 583151331a..557bbc4f78 100644
--- a/chart/templates/statsd/statsd-deployment.yaml
+++ b/chart/templates/statsd/statsd-deployment.yaml
@@ -31,7 +31,7 @@
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: {{ .Release.Name }}-statsd
+  name: {{ include "airflow.fullname" . }}-statsd
   labels:
     tier: airflow
     component: statsd
@@ -131,5 +131,5 @@ spec:
       volumes:
         - name: config
           configMap:
-            name: {{ .Release.Name }}-statsd
+            name: {{ include "airflow.fullname" . }}-statsd
 {{- end }}
diff --git a/chart/templates/statsd/statsd-networkpolicy.yaml 
b/chart/templates/statsd/statsd-networkpolicy.yaml
index b80de4a90f..3690cda897 100644
--- a/chart/templates/statsd/statsd-networkpolicy.yaml
+++ b/chart/templates/statsd/statsd-networkpolicy.yaml
@@ -24,7 +24,7 @@
 apiVersion: networking.k8s.io/v1
 kind: NetworkPolicy
 metadata:
-  name: {{ .Release.Name }}-statsd-policy
+  name: {{ include "airflow.fullname" . }}-statsd-policy
   labels:
     tier: airflow
     component: statsd-policy
diff --git a/chart/templates/statsd/statsd-service.yaml 
b/chart/templates/statsd/statsd-service.yaml
index 412acd09c5..2486264c5c 100644
--- a/chart/templates/statsd/statsd-service.yaml
+++ b/chart/templates/statsd/statsd-service.yaml
@@ -24,7 +24,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Release.Name }}-statsd
+  name: {{ include "airflow.fullname" . }}-statsd
   labels:
     tier: airflow
     component: statsd
diff --git a/chart/templates/triggerer/triggerer-deployment.yaml 
b/chart/templates/triggerer/triggerer-deployment.yaml
index 3d327e944a..d30475fa2d 100644
--- a/chart/templates/triggerer/triggerer-deployment.yaml
+++ b/chart/templates/triggerer/triggerer-deployment.yaml
@@ -36,7 +36,7 @@
 apiVersion: apps/v1
 kind: {{ if $persistence }}StatefulSet{{ else }}Deployment{{ end }}
 metadata:
-  name: {{ .Release.Name }}-triggerer
+  name: {{ include "airflow.fullname" . }}-triggerer
   labels:
     tier: airflow
     component: triggerer
diff --git a/chart/templates/triggerer/triggerer-networkpolicy.yaml 
b/chart/templates/triggerer/triggerer-networkpolicy.yaml
index ef1fc3fb9c..408fb98a62 100644
--- a/chart/templates/triggerer/triggerer-networkpolicy.yaml
+++ b/chart/templates/triggerer/triggerer-networkpolicy.yaml
@@ -27,7 +27,7 @@
 apiVersion: networking.k8s.io/v1
 kind: NetworkPolicy
 metadata:
-  name: {{ .Release.Name }}-triggerer-policy
+  name: {{ include "airflow.fullname" . }}-triggerer-policy
   labels:
     tier: airflow
     component: airflow-triggerer-policy
diff --git a/chart/templates/triggerer/triggerer-service.yaml 
b/chart/templates/triggerer/triggerer-service.yaml
index eaf3a6f198..92aada711e 100644
--- a/chart/templates/triggerer/triggerer-service.yaml
+++ b/chart/templates/triggerer/triggerer-service.yaml
@@ -26,7 +26,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Release.Name }}-triggerer
+  name: {{ include "airflow.fullname" . }}-triggerer
   labels:
     tier: airflow
     component: triggerer
diff --git a/chart/templates/webserver/webserver-deployment.yaml 
b/chart/templates/webserver/webserver-deployment.yaml
index 7f326bab22..c7a82b1627 100644
--- a/chart/templates/webserver/webserver-deployment.yaml
+++ b/chart/templates/webserver/webserver-deployment.yaml
@@ -31,7 +31,7 @@
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: {{ .Release.Name }}-webserver
+  name: {{ include "airflow.fullname" . }}-webserver
   labels:
     tier: airflow
     component: webserver
diff --git a/chart/templates/webserver/webserver-ingress.yaml 
b/chart/templates/webserver/webserver-ingress.yaml
index 889a512d3f..451a57cbc0 100644
--- a/chart/templates/webserver/webserver-ingress.yaml
+++ b/chart/templates/webserver/webserver-ingress.yaml
@@ -21,10 +21,11 @@
 ## Airflow Webserver Ingress
 #################################
 {{- if or .Values.ingress.web.enabled .Values.ingress.enabled }}
+{{- $fullname := (include "airflow.fullname" .) }}
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
-  name: {{ .Release.Name }}-airflow-ingress
+  name: {{ $fullname }}-ingress
   labels:
     tier: airflow
     component: airflow-ingress
@@ -80,7 +81,7 @@ spec:
           {{- end }}
           - backend:
               service:
-                name: {{ $.Release.Name }}-webserver
+                name: {{ $fullname }}-webserver
                 port:
                   name: airflow-ui
             {{- if $.Values.ingress.web.path }}
diff --git a/chart/templates/webserver/webserver-networkpolicy.yaml 
b/chart/templates/webserver/webserver-networkpolicy.yaml
index 392be47c63..d0be9e3283 100644
--- a/chart/templates/webserver/webserver-networkpolicy.yaml
+++ b/chart/templates/webserver/webserver-networkpolicy.yaml
@@ -25,7 +25,7 @@
 apiVersion: networking.k8s.io/v1
 kind: NetworkPolicy
 metadata:
-  name: {{ .Release.Name }}-webserver-policy
+  name: {{ include "airflow.fullname" . }}-webserver-policy
   labels:
     tier: airflow
     component: airflow-webserver-policy
diff --git a/chart/templates/webserver/webserver-poddisruptionbudget.yaml 
b/chart/templates/webserver/webserver-poddisruptionbudget.yaml
index e3cd7c3043..840219a56e 100644
--- a/chart/templates/webserver/webserver-poddisruptionbudget.yaml
+++ b/chart/templates/webserver/webserver-poddisruptionbudget.yaml
@@ -24,7 +24,7 @@
 apiVersion: policy/v1
 kind: PodDisruptionBudget
 metadata:
-  name: {{ .Release.Name }}-webserver-pdb
+  name: {{ include "airflow.fullname" . }}-webserver-pdb
   labels:
     tier: airflow
     component: webserver
diff --git a/chart/templates/webserver/webserver-service.yaml 
b/chart/templates/webserver/webserver-service.yaml
index a8ecdc3bb8..a3c49d32a5 100644
--- a/chart/templates/webserver/webserver-service.yaml
+++ b/chart/templates/webserver/webserver-service.yaml
@@ -23,7 +23,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Release.Name }}-webserver
+  name: {{ include "airflow.fullname" . }}-webserver
   labels:
     tier: airflow
     component: webserver
diff --git a/chart/templates/workers/worker-deployment.yaml 
b/chart/templates/workers/worker-deployment.yaml
index 235f3f783f..65cb8c0fa4 100644
--- a/chart/templates/workers/worker-deployment.yaml
+++ b/chart/templates/workers/worker-deployment.yaml
@@ -37,7 +37,7 @@
 apiVersion: apps/v1
 kind: {{ if $persistence }}StatefulSet{{ else }}Deployment{{ end }}
 metadata:
-  name: {{ .Release.Name }}-worker
+  name: {{ include "airflow.fullname" . }}-worker
   labels:
     tier: airflow
     component: worker
@@ -52,7 +52,7 @@ metadata:
   {{- end }}
 spec:
   {{- if $persistence }}
-  serviceName: {{ .Release.Name }}-worker
+  serviceName: {{ include "airflow.fullname" . }}-worker
   {{- end }}
   {{- if not $keda }}
   replicas: {{ .Values.workers.replicas }}
diff --git a/chart/templates/workers/worker-kedaautoscaler.yaml 
b/chart/templates/workers/worker-kedaautoscaler.yaml
index 7ce3d519f7..f93484efd0 100644
--- a/chart/templates/workers/worker-kedaautoscaler.yaml
+++ b/chart/templates/workers/worker-kedaautoscaler.yaml
@@ -24,7 +24,7 @@
 apiVersion: keda.sh/v1alpha1
 kind: ScaledObject
 metadata:
-  name: {{ .Release.Name }}-worker
+  name: {{ include "airflow.fullname" . }}-worker
   labels:
     tier: airflow
     component: worker-horizontalpodautoscaler
@@ -38,7 +38,7 @@ metadata:
 spec:
   scaleTargetRef:
     kind: {{ ternary "StatefulSet" "Deployment" 
.Values.workers.persistence.enabled }}
-    name: {{ .Release.Name }}-worker
+    name: {{ include "airflow.fullname" . }}-worker
   pollingInterval:  {{ .Values.workers.keda.pollingInterval }}
   cooldownPeriod: {{ .Values.workers.keda.cooldownPeriod }}
   minReplicaCount: {{ .Values.workers.keda.minReplicaCount }}
diff --git a/chart/templates/workers/worker-networkpolicy.yaml 
b/chart/templates/workers/worker-networkpolicy.yaml
index f0cb2ddc40..05de793114 100644
--- a/chart/templates/workers/worker-networkpolicy.yaml
+++ b/chart/templates/workers/worker-networkpolicy.yaml
@@ -24,7 +24,7 @@
 apiVersion: networking.k8s.io/v1
 kind: NetworkPolicy
 metadata:
-  name: {{ .Release.Name }}-worker-policy
+  name: {{ include "airflow.fullname" . }}-worker-policy
   labels:
     tier: airflow
     component: airflow-worker-policy
diff --git a/chart/templates/workers/worker-service.yaml 
b/chart/templates/workers/worker-service.yaml
index 0344a6feb2..463f51c0bb 100644
--- a/chart/templates/workers/worker-service.yaml
+++ b/chart/templates/workers/worker-service.yaml
@@ -24,7 +24,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Release.Name }}-worker
+  name: {{ include "airflow.fullname" . }}-worker
   labels:
     tier: airflow
     component: worker
diff --git a/chart/values.schema.json b/chart/values.schema.json
index ecd8674ff4..4eaf404b38 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -44,6 +44,12 @@
             "default": "",
             "x-docsSection": null
         },
+        "useStandardNaming": {
+            "description": "Use standard naming for all resources using 
airflow.fullname template",
+            "type": "boolean",
+            "default": false,
+            "x-docsSection": null
+        },
         "uid": {
             "description": "User of airflow user.",
             "type": "integer",
diff --git a/chart/values.yaml b/chart/values.yaml
index 9728eb9525..228e308059 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -25,6 +25,20 @@ fullnameOverride: ""
 # Provide a name to substitute for the name of the chart
 nameOverride: ""
 
+# Use standard naming for all resources using airflow.fullname template
+# Consider removing this later and default it to true
+# to make this chart follow standard naming conventions using the fullname 
template.
+# For now this is an opt-in switch for backwards compatibility to leverage the 
standard naming convention
+# and being able to use fully fullnameOverride and nameOverride in all 
resources
+# For new installations - it is recommended to set it to True to follow 
standard naming conventions
+# For existing installations, this will rename and redeploy your resources 
with the new names. Be aware that
+# this will recreate your deployment/statefulsets along with their persistent 
volume claims and data storage
+# migration may be needed to keep your old data
+#
+# Note:fernet-key,redis-password and broker-url secrets don't use this logic 
yet,
+# as this may break existing installations due to how they get installed via 
pre-install hook.
+useStandardNaming: false
+
 # Max number of old replicasets to retain. Can be overridden by each 
deployment's revisionHistoryLimit
 revisionHistoryLimit: ~
 
diff --git a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py 
b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
index b96829539a..b1b0a6fa56 100644
--- a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
@@ -160,6 +160,13 @@ option_force_venv_setup = click.option(
     envvar="FORCE_VENV_SETUP",
 )
 
+option_use_standard_naming = click.option(
+    "--use-standard-naming",
+    help="Use standard naming.",
+    is_flag=True,
+    envvar="USE_STANDARD_NAMING",
+)
+
 option_rebuild_base_image = click.option(
     "--rebuild-base-image",
     help="Rebuilds base Airflow image before building K8S image.",
@@ -946,6 +953,7 @@ def _deploy_helm_chart(
     kubernetes_version: str,
     output: Output | None,
     executor: str,
+    use_standard_naming: bool,
     extra_options: tuple[str, ...] | None = None,
 ) -> RunCommandResult:
     cluster_name = get_kubectl_cluster_name(python=python, 
kubernetes_version=kubernetes_version)
@@ -991,6 +999,8 @@ def _deploy_helm_chart(
         if upgrade:
             # force upgrade
             helm_command.append("--force")
+        if use_standard_naming:
+            helm_command.extend(["--set", "useStandardNaming=true"])
         if extra_options:
             helm_command.extend(extra_options)
         get_console(output=output).print(f"[info]Deploying Airflow from 
{tmp_chart_path}")
@@ -1013,6 +1023,7 @@ def _deploy_airflow(
     executor: str,
     upgrade: bool,
     wait_time_in_seconds: int,
+    use_standard_naming: bool,
     extra_options: tuple[str, ...] | None = None,
 ) -> tuple[int, str]:
     action = "Deploying" if not upgrade else "Upgrading"
@@ -1024,6 +1035,7 @@ def _deploy_airflow(
         output=output,
         upgrade=upgrade,
         executor=executor,
+        use_standard_naming=use_standard_naming,
         extra_options=extra_options,
     )
     if result.returncode == 0:
@@ -1061,6 +1073,7 @@ def _deploy_airflow(
 @option_skip_cleanup
 @option_debug_resources
 @option_include_success_outputs
+@option_use_standard_naming
 @option_python_versions
 @option_kubernetes_versions
 @option_verbose
@@ -1077,6 +1090,7 @@ def deploy_airflow(
     skip_cleanup: bool,
     debug_resources: bool,
     include_success_outputs: bool,
+    use_standard_naming: bool,
     python_versions: str,
     kubernetes_versions: str,
     extra_options: tuple[str, ...],
@@ -1104,6 +1118,7 @@ def deploy_airflow(
                             "kubernetes_version": combo.kubernetes_version,
                             "executor": executor,
                             "upgrade": upgrade,
+                            "use_standard_naming": use_standard_naming,
                             "wait_time_in_seconds": wait_time_in_seconds,
                             "extra_options": extra_options,
                             "output": outputs[index],
@@ -1125,6 +1140,7 @@ def deploy_airflow(
             output=None,
             executor=executor,
             upgrade=upgrade,
+            use_standard_naming=use_standard_naming,
             wait_time_in_seconds=wait_time_in_seconds,
             extra_options=extra_options,
         )
@@ -1410,6 +1426,7 @@ def _run_complete_tests(
     upgrade: bool,
     wait_time_in_seconds: int,
     force_recreate_cluster: bool,
+    use_standard_naming: bool,
     num_tries: int,
     extra_options: tuple[str, ...] | None,
     test_args: tuple[str, ...],
@@ -1467,6 +1484,7 @@ def _run_complete_tests(
             output=output,
             executor=executor,
             upgrade=False,
+            use_standard_naming=use_standard_naming,
             wait_time_in_seconds=wait_time_in_seconds,
             extra_options=extra_options,
         )
@@ -1496,6 +1514,7 @@ def _run_complete_tests(
                 output=output,
                 executor=executor,
                 upgrade=True,
+                use_standard_naming=use_standard_naming,
                 wait_time_in_seconds=wait_time_in_seconds,
                 extra_options=extra_options,
             )
@@ -1543,6 +1562,7 @@ def _run_complete_tests(
 @option_skip_cleanup
 @option_debug_resources
 @option_include_success_outputs
+@option_use_standard_naming
 @option_python_versions
 @option_kubernetes_versions
 @option_verbose
@@ -1563,6 +1583,7 @@ def run_complete_tests(
     skip_cleanup: bool,
     debug_resources: bool,
     include_success_outputs: bool,
+    use_standard_naming: bool,
     python_versions: str,
     kubernetes_versions: str,
     test_args: tuple[str, ...],
@@ -1598,6 +1619,7 @@ def run_complete_tests(
                             "upgrade": upgrade,
                             "wait_time_in_seconds": wait_time_in_seconds,
                             "force_recreate_cluster": force_recreate_cluster,
+                            "use_standard_naming": use_standard_naming,
                             "num_tries": 3,  # when creating cluster in 
parallel, sometimes we need to retry
                             "extra_options": None,
                             "test_args": pytest_args,
@@ -1623,6 +1645,7 @@ def run_complete_tests(
             upgrade=upgrade,
             wait_time_in_seconds=wait_time_in_seconds,
             force_recreate_cluster=force_recreate_cluster,
+            use_standard_naming=use_standard_naming,
             num_tries=1,
             extra_options=None,
             test_args=test_args,
diff --git 
a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py 
b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py
index a5fb0039fe..5049100c59 100644
--- a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py
@@ -159,6 +159,7 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | 
list[str]]]] = {
                 "--executor",
                 "--upgrade",
                 "--wait-time-in-seconds",
+                "--use-standard-naming",
             ],
         },
         {
@@ -222,6 +223,7 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | 
list[str]]]] = {
             "options": [
                 "--upgrade",
                 "--wait-time-in-seconds",
+                "--use-standard-naming",
             ],
         },
         {
diff --git a/docs/helm-chart/index.rst b/docs/helm-chart/index.rst
index 616185aa1f..d1060139bd 100644
--- a/docs/helm-chart/index.rst
+++ b/docs/helm-chart/index.rst
@@ -155,3 +155,31 @@ To run database migrations with Argo CD automatically, you 
will need to add:
 This will run database migrations every time there is a ``Sync`` event in Argo 
CD. While it is not ideal to run the migrations on every sync, it is a 
trade-off that allows them to be run automatically.
 
 If you use the Celery(Kubernetes)Executor with the built-in Redis, it is 
recommended that you set up a static Redis password either by supplying 
``redis.passwordSecretName`` and ``redis.data.brokerUrlSecretName`` or 
``redis.password``.
+
+
+Naming Conventions
+------------------
+
+For new installations it is highly recommended to start using standard naming 
conventions.
+It is not enabled by default as this may cause unexpected behaviours on 
existing installations. However you can enable it using ``useStandardNaming``:
+
+.. code-block:: yaml
+
+    useStandardNaming: true
+
+For existing installations, all your resources will be recreated with a new 
name and helm will delete previous resources.
+
+This won't delete existing PVCs for logs used by StatefulSets/Deployments, but 
it will recreate them with brand new PVCs.
+If you do want to preserve logs history you'll need to manually copy the data 
of these volumes into the new volumes after
+deployment. Depending on what storage backend/class you're using this 
procedure may vary. If you don't mind starting
+with fresh logs/redis volumes, you can just delete the old persistent volume 
claims, for example:
+
+.. code-block:: bash
+
+    kubectl delete pvc -n airflow logs-gta-triggerer-0
+    kubectl delete pvc -n airflow logs-gta-worker-0
+    kubectl delete pvc -n airflow redis-db-gta-redis-0
+
+.. note::
+
+    If you do not change ``useStandardNaming`` or ``fullnameOverride`` after 
upgrade, you can proceed as usual and no unexpected behaviours will be 
presented.
diff --git a/helm_tests/airflow_aux/test_basic_helm_chart.py 
b/helm_tests/airflow_aux/test_basic_helm_chart.py
index 7aeea3eac0..7eb786d39b 100644
--- a/helm_tests/airflow_aux/test_basic_helm_chart.py
+++ b/helm_tests/airflow_aux/test_basic_helm_chart.py
@@ -71,13 +71,13 @@ class TestBaseChartTest:
             ("ServiceAccount", "test-basic-triggerer"),
             ("ServiceAccount", "test-basic-webserver"),
             ("ServiceAccount", "test-basic-worker"),
-            ("Secret", "test-basic-airflow-metadata"),
+            ("Secret", "test-basic-metadata"),
             ("Secret", "test-basic-broker-url"),
             ("Secret", "test-basic-fernet-key"),
             ("Secret", "test-basic-webserver-secret-key"),
             ("Secret", "test-basic-postgresql"),
             ("Secret", "test-basic-redis-password"),
-            ("ConfigMap", "test-basic-airflow-config"),
+            ("ConfigMap", "test-basic-config"),
             ("ConfigMap", "test-basic-statsd"),
             ("Role", "test-basic-pod-launcher-role"),
             ("Role", "test-basic-pod-log-reader-role"),
@@ -100,7 +100,7 @@ class TestBaseChartTest:
             ("Job", "test-basic-run-airflow-migrations"),
         }
         if version == "2.3.2":
-            expected.add(("Secret", "test-basic-airflow-result-backend"))
+            expected.add(("Secret", "test-basic-result-backend"))
         if version == "default":
             expected.add(("Service", "test-basic-triggerer"))
         assert list_of_kind_names_tuples == expected
@@ -118,6 +118,54 @@ class TestBaseChartTest:
                 "test-label"
             ), f"Missing label test-label on {k8s_name}. Current labels: 
{labels}"
 
+    def test_basic_deployments_with_standard_naming(self):
+        k8s_objects = render_chart(
+            "test-basic",
+            {"useStandardNaming": True},
+        )
+        list_of_kind_names_tuples = {
+            (k8s_object["kind"], k8s_object["metadata"]["name"]) for 
k8s_object in k8s_objects
+        }
+        expected = {
+            ("ServiceAccount", "test-basic-airflow-create-user-job"),
+            ("ServiceAccount", "test-basic-airflow-migrate-database-job"),
+            ("ServiceAccount", "test-basic-airflow-redis"),
+            ("ServiceAccount", "test-basic-airflow-scheduler"),
+            ("ServiceAccount", "test-basic-airflow-statsd"),
+            ("ServiceAccount", "test-basic-airflow-triggerer"),
+            ("ServiceAccount", "test-basic-airflow-webserver"),
+            ("ServiceAccount", "test-basic-airflow-worker"),
+            ("Secret", "test-basic-airflow-metadata"),
+            ("Secret", "test-basic-broker-url"),
+            ("Secret", "test-basic-fernet-key"),
+            ("Secret", "test-basic-airflow-webserver-secret-key"),
+            ("Secret", "test-basic-redis-password"),
+            ("Secret", "test-basic-postgresql"),
+            ("ConfigMap", "test-basic-airflow-config"),
+            ("ConfigMap", "test-basic-airflow-statsd"),
+            ("Role", "test-basic-airflow-pod-launcher-role"),
+            ("Role", "test-basic-airflow-pod-log-reader-role"),
+            ("RoleBinding", "test-basic-airflow-pod-launcher-rolebinding"),
+            ("RoleBinding", "test-basic-airflow-pod-log-reader-rolebinding"),
+            ("Service", "test-basic-airflow-redis"),
+            ("Service", "test-basic-airflow-statsd"),
+            ("Service", "test-basic-airflow-triggerer"),
+            ("Service", "test-basic-airflow-webserver"),
+            ("Service", "test-basic-airflow-worker"),
+            ("Service", "test-basic-postgresql"),
+            ("Service", "test-basic-postgresql-hl"),
+            ("Deployment", "test-basic-airflow-scheduler"),
+            ("Deployment", "test-basic-airflow-statsd"),
+            ("Deployment", "test-basic-airflow-webserver"),
+            ("StatefulSet", "test-basic-airflow-redis"),
+            ("StatefulSet", "test-basic-airflow-worker"),
+            ("StatefulSet", "test-basic-airflow-triggerer"),
+            ("StatefulSet", "test-basic-postgresql"),
+            ("Job", "test-basic-airflow-create-user"),
+            ("Job", "test-basic-airflow-run-airflow-migrations"),
+        }
+        assert list_of_kind_names_tuples == expected
+
     @pytest.mark.parametrize("version", ["2.3.2", "2.4.0", "default"])
     def test_basic_deployment_with_standalone_dag_processor(self, version):
         # Dag Processor creates two extra objects compared to the basic 
deployment
@@ -150,13 +198,13 @@ class TestBaseChartTest:
             ("ServiceAccount", "test-basic-dag-processor"),
             ("ServiceAccount", "test-basic-webserver"),
             ("ServiceAccount", "test-basic-worker"),
-            ("Secret", "test-basic-airflow-metadata"),
+            ("Secret", "test-basic-metadata"),
             ("Secret", "test-basic-broker-url"),
             ("Secret", "test-basic-fernet-key"),
             ("Secret", "test-basic-webserver-secret-key"),
             ("Secret", "test-basic-postgresql"),
             ("Secret", "test-basic-redis-password"),
-            ("ConfigMap", "test-basic-airflow-config"),
+            ("ConfigMap", "test-basic-config"),
             ("ConfigMap", "test-basic-statsd"),
             ("Role", "test-basic-pod-launcher-role"),
             ("Role", "test-basic-pod-log-reader-role"),
@@ -180,7 +228,7 @@ class TestBaseChartTest:
             ("Job", "test-basic-run-airflow-migrations"),
         }
         if version == "2.3.2":
-            expected.add(("Secret", "test-basic-airflow-result-backend"))
+            expected.add(("Secret", "test-basic-result-backend"))
         if version == "default":
             expected.add(("Service", "test-basic-triggerer"))
         assert list_of_kind_names_tuples == expected
@@ -294,13 +342,13 @@ class TestBaseChartTest:
 
         kind_names_tuples = [
             (f"{release_name}-airflow-cleanup", "ServiceAccount", None),
-            (f"{release_name}-airflow-config", "ConfigMap", "config"),
+            (f"{release_name}-config", "ConfigMap", "config"),
             (f"{release_name}-airflow-create-user-job", "ServiceAccount", 
"create-user-job"),
             (f"{release_name}-airflow-flower", "ServiceAccount", "flower"),
-            (f"{release_name}-airflow-metadata", "Secret", None),
+            (f"{release_name}-metadata", "Secret", None),
             (f"{release_name}-airflow-migrate-database-job", "ServiceAccount", 
"run-airflow-migrations"),
             (f"{release_name}-airflow-pgbouncer", "ServiceAccount", 
"pgbouncer"),
-            (f"{release_name}-airflow-result-backend", "Secret", None),
+            (f"{release_name}-result-backend", "Secret", None),
             (f"{release_name}-airflow-redis", "ServiceAccount", "redis"),
             (f"{release_name}-airflow-scheduler", "ServiceAccount", 
"scheduler"),
             (f"{release_name}-airflow-statsd", "ServiceAccount", "statsd"),
@@ -341,7 +389,7 @@ class TestBaseChartTest:
             (f"{release_name}-webserver-secret-key", "Secret", "webserver"),
             (f"{release_name}-webserver", "Service", "webserver"),
             (f"{release_name}-webserver-policy", "NetworkPolicy", 
"airflow-webserver-policy"),
-            (f"{release_name}-airflow-ingress", "Ingress", "airflow-ingress"),
+            (f"{release_name}-ingress", "Ingress", "airflow-ingress"),
             (f"{release_name}-worker", "Service", "worker"),
             (f"{release_name}-worker", "StatefulSet", "worker"),
             (f"{release_name}-worker-policy", "NetworkPolicy", 
"airflow-worker-policy"),
diff --git a/helm_tests/airflow_aux/test_cleanup_pods.py 
b/helm_tests/airflow_aux/test_cleanup_pods.py
index 33e475d59f..b4f67e2fd0 100644
--- a/helm_tests/airflow_aux/test_cleanup_pods.py
+++ b/helm_tests/airflow_aux/test_cleanup_pods.py
@@ -87,7 +87,7 @@ class TestCleanupPods:
         assert 
jmespath.search("spec.jobTemplate.spec.template.spec.containers[0].image", 
docs[0]).startswith(
             "apache/airflow"
         )
-        assert {"name": "config", "configMap": {"name": 
"release-name-airflow-config"}} in jmespath.search(
+        assert {"name": "config", "configMap": {"name": 
"release-name-config"}} in jmespath.search(
             "spec.jobTemplate.spec.template.spec.volumes", docs[0]
         )
         assert {
diff --git a/helm_tests/airflow_aux/test_pod_template_file.py 
b/helm_tests/airflow_aux/test_pod_template_file.py
index 4d67b91b19..b22ee8c849 100644
--- a/helm_tests/airflow_aux/test_pod_template_file.py
+++ b/helm_tests/airflow_aux/test_pod_template_file.py
@@ -319,7 +319,7 @@ class TestPodTemplateFile:
         )
 
         assert re.search("Pod", docs[0]["kind"])
-        assert {"configMap": {"name": "release-name-airflow-config"}, "name": 
"config"} in jmespath.search(
+        assert {"configMap": {"name": "release-name-config"}, "name": 
"config"} in jmespath.search(
             "spec.volumes", docs[0]
         )
         assert {
diff --git a/helm_tests/security/test_kerberos.py 
b/helm_tests/security/test_kerberos.py
index 278faa80c8..02c7d4e534 100644
--- a/helm_tests/security/test_kerberos.py
+++ b/helm_tests/security/test_kerberos.py
@@ -31,7 +31,7 @@ class TestKerberos:
         k8s_objects = render_chart(name="no-krbros", values={"kerberos": 
{"enabled": False}})
         # ignore airflow config map
         k8s_objects_to_consider = [
-            obj for obj in k8s_objects if obj["metadata"]["name"] != 
"no-krbros-airflow-config"
+            obj for obj in k8s_objects if obj["metadata"]["name"] != 
"no-krbros-config"
         ]
         k8s_objects_to_consider_str = json.dumps(k8s_objects_to_consider)
         assert k8s_objects_to_consider_str.count("kerberos") == 1
diff --git a/helm_tests/security/test_rbac.py b/helm_tests/security/test_rbac.py
index 12ffcb73e6..c305194c9e 100644
--- a/helm_tests/security/test_rbac.py
+++ b/helm_tests/security/test_rbac.py
@@ -25,10 +25,10 @@ from tests.charts.helm_template_generator import 
render_chart
 
 DEPLOYMENT_NO_RBAC_NO_SA_KIND_NAME_TUPLES = [
     ("Secret", "test-rbac-postgresql"),
-    ("Secret", "test-rbac-airflow-metadata"),
+    ("Secret", "test-rbac-metadata"),
     ("Secret", "test-rbac-pgbouncer-config"),
     ("Secret", "test-rbac-pgbouncer-stats"),
-    ("ConfigMap", "test-rbac-airflow-config"),
+    ("ConfigMap", "test-rbac-config"),
     ("ConfigMap", "test-rbac-statsd"),
     ("Service", "test-rbac-postgresql-hl"),
     ("Service", "test-rbac-postgresql"),
@@ -124,7 +124,7 @@ class TestRBAC:
         else:
             tuples.append(("Deployment", "test-rbac-triggerer"))
         if version == "2.3.2":
-            tuples.append(("Secret", "test-rbac-airflow-result-backend"))
+            tuples.append(("Secret", "test-rbac-result-backend"))
         return tuples
 
     @pytest.mark.parametrize("version", ["2.3.2", "2.4.0", "default"])
diff --git a/images/breeze/output-commands-hash.txt 
b/images/breeze/output-commands-hash.txt
index 0db1f5beab..09108fdc27 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -22,16 +22,16 @@ k8s:build-k8s-image:4c299179e91066626e5b4a61b06fd6c6
 k8s:configure-cluster:3bd5d4614ffcd02952fadd0f61bc0cdf
 k8s:create-cluster:cef6b3203035af1741d6acc87a26fe12
 k8s:delete-cluster:76a40b5a9001d8a933672ae3175ad59f
-k8s:deploy-airflow:bb5f9212ad00de2f4131df2bb2beebf3
+k8s:deploy-airflow:fef15f2f5d122a1d11bb602896ff36fa
 k8s:k9s:f25f0df6b0fdb2604822e0c8d5b64d06
 k8s:logs:547c07e859eafcf67591952b785d381d
-k8s:run-complete-tests:0cc62d0fbea8ae35849dc84fa786c960
+k8s:run-complete-tests:7c427590c9bfd15f238cc0a53742477f
 k8s:setup-env:a34e94744ca4e0592371fe55478c3d54
 k8s:shell:ced753917db3d1bd89e7ea3314ac0d69
 k8s:status:1529ccd444b41c4b0b5f943289957100
 k8s:tests:2a1e2928faea2eddafaff94176a46690
 k8s:upload-k8s-image:6b3a20cdeb692f3c3d727f6b9e68c901
-k8s:8c1e4287deb0533a74f3b302f9c574be
+k8s:c73e0ebdff75d89e35af6e324a3bc527
 prod-image:build:aba06a4d6543c41b5996de0d8738b6c7
 prod-image:pull:76f1f27e6119928412abecf153fce4bb
 prod-image:verify:bd2b78738a7c388dbad6076c41a9f906
diff --git a/images/breeze/output_k8s_deploy-airflow.svg 
b/images/breeze/output_k8s_deploy-airflow.svg
index 694ab621a7..320266faa5 100644
--- a/images/breeze/output_k8s_deploy-airflow.svg
+++ b/images/breeze/output_k8s_deploy-airflow.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 928.4" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 952.8" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-deploy-airflow-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="877.4" />
+      <rect x="0" y="0" width="1463.0" height="901.8" />
     </clipPath>
     <clipPath id="breeze-k8s-deploy-airflow-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -150,9 +150,12 @@
 <clipPath id="breeze-k8s-deploy-airflow-line-34">
     <rect x="0" y="831.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-deploy-airflow-line-35">
+    <rect x="0" y="855.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="926.4" rx="8"/><text 
class="breeze-k8s-deploy-airflow-title" fill="#c5c8c6" text-anchor="middle" 
x="740" y="27">Command:&#160;k8s&#160;deploy-airflow</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="950.8" rx="8"/><text 
class="breeze-k8s-deploy-airflow-title" fill="#c5c8c6" text-anchor="middle" 
x="740" y="27">Command:&#160;k8s&#160;deploy-airflow</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -178,26 +181,27 @@
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="337.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-13)">│</text><text 
class="breeze-k8s-deploy-airflow-r5" x="366" y="337.2" textLength="1000.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-13)">[default:&#160;KubernetesExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="361.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-14)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="361.6" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-14)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="361.6" textLength="97.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-14)">-upgrade</text><text 
class="breeze-k8s-deploy-airflow-r2" x="366" y="361.6"  [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="386" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-15)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="386" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-15)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="386" textLength="61" 
clip-path="url(#breeze-k8s-deploy-airflow-line-15)">-wait</text><text 
class="breeze-k8s-deploy-airflow-r4" x="97.6" y="386" textLength=" [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="410.4" 
textLength="1464" 
clip-path="url(#breeze-k8s-deploy-airflow-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-deploy-airflow-r2" x="1464" y="410.4" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-16)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="434.8" 
textLength="24.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-17)">╭─</text><text 
class="breeze-k8s-deploy-airflow-r5" x="24.4" y="434.8" textLength="219.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-17)">&#160;Parallel&#160;options&#160;</text><text
 class="breeze-k8s-deploy-airflow-r5" x="244" y="434.8" textLength="1195.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-17)">─────────────────────────────────────────
 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-18)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="459.2" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-18)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="459.2" textLength="48.8" 
clip-path="url(#breeze-k8s-deploy-airflow-line-18)">-run</text><text 
class="breeze-k8s-deploy-airflow-r4" x="85.4" y="459.2" tex [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-19)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="483.6" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-19)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="483.6" textLength="146.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-19)">-parallelism</text><text 
class="breeze-k8s-deploy-airflow-r2" x="378.2" y=" [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-20)">│</text><text 
class="breeze-k8s-deploy-airflow-r2" x="378.2" y="508" textLength="1061.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-20)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-21)">│</text><text 
class="breeze-k8s-deploy-airflow-r7" x="378.2" y="532.4" textLength="1061.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-21)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="556.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-22)">│</text><text 
class="breeze-k8s-deploy-airflow-r5" x="378.2" y="556.8" textLength="1061.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-22)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="581.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-23)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="581.2" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-23)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="581.2" textLength="85.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-23)">-python</text><text 
class="breeze-k8s-deploy-airflow-r4" x="122" y="581.2" t [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="605.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-24)">│</text><text 
class="breeze-k8s-deploy-airflow-r5" x="378.2" y="605.6" textLength="951.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-24)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-25)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="630" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-25)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="630" textLength="134.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-25)">-kubernetes</text><text 
class="breeze-k8s-deploy-airflow-r4" x="170.8" y="630" te [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-26)">│</text><text 
class="breeze-k8s-deploy-airflow-r5" x="378.2" y="654.4" textLength="756.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-26)">[default:&#160;v1.24.15&#160;v1.25.11&#160;v1.26.6&#160;v1.27.3]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-k8s-deploy-airf [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="678.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-27)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="678.8" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-27)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="678.8" textLength="61" 
clip-path="url(#breeze-k8s-deploy-airflow-line-27)">-skip</text><text 
class="breeze-k8s-deploy-airflow-r4" x="97.6" y="678.8" text [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="703.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-28)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="703.2" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-28)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="703.2" textLength="73.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-28)">-debug</text><text 
class="breeze-k8s-deploy-airflow-r4" x="109.8" y="703.2"  [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="727.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-29)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="727.6" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-29)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="727.6" textLength="97.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-29)">-include</text><text 
class="breeze-k8s-deploy-airflow-r4" x="134.2" y="727.6 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="752" 
textLength="1464" 
clip-path="url(#breeze-k8s-deploy-airflow-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-deploy-airflow-r2" x="1464" y="752" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-30)">
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="776.4" 
textLength="24.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-31)">╭─</text><text 
class="breeze-k8s-deploy-airflow-r5" x="24.4" y="776.4" textLength="195.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-31)">&#160;Common&#160;options&#160;</text><text
 class="breeze-k8s-deploy-airflow-r5" x="219.6" y="776.4" textLength="1220" 
clip-path="url(#breeze-k8s-deploy-airflow-line-31)">───────────────────────────────────────────
 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-32)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="800.8" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-32)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="800.8" textLength="97.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-32)">-verbose</text><text 
class="breeze-k8s-deploy-airflow-r6" x="158.6" y="800.8 [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-33)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="825.2" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-33)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="825.2" textLength="48.8" 
clip-path="url(#breeze-k8s-deploy-airflow-line-33)">-dry</text><text 
class="breeze-k8s-deploy-airflow-r4" x="85.4" y="825.2" tex [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="849.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-34)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="849.6" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-34)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="849.6" textLength="61" 
clip-path="url(#breeze-k8s-deploy-airflow-line-34)">-help</text><text 
class="breeze-k8s-deploy-airflow-r6" x="158.6" y="849.6" tex [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="874" 
textLength="1464" 
clip-path="url(#breeze-k8s-deploy-airflow-line-35)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-deploy-airflow-r2" x="1464" y="874" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-35)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="410.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-16)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="410.4" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-16)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="410.4" textLength="48.8" 
clip-path="url(#breeze-k8s-deploy-airflow-line-16)">-use</text><text 
class="breeze-k8s-deploy-airflow-r4" x="85.4" y="410.4" tex [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="434.8" 
textLength="1464" 
clip-path="url(#breeze-k8s-deploy-airflow-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-deploy-airflow-r2" x="1464" y="434.8" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-17)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="459.2" 
textLength="24.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-18)">╭─</text><text 
class="breeze-k8s-deploy-airflow-r5" x="24.4" y="459.2" textLength="219.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-18)">&#160;Parallel&#160;options&#160;</text><text
 class="breeze-k8s-deploy-airflow-r5" x="244" y="459.2" textLength="1195.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-18)">─────────────────────────────────────────
 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-19)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="483.6" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-19)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="483.6" textLength="48.8" 
clip-path="url(#breeze-k8s-deploy-airflow-line-19)">-run</text><text 
class="breeze-k8s-deploy-airflow-r4" x="85.4" y="483.6" tex [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-20)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="508" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-20)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="508" textLength="146.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-20)">-parallelism</text><text 
class="breeze-k8s-deploy-airflow-r2" x="378.2" y="508" t [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-21)">│</text><text 
class="breeze-k8s-deploy-airflow-r2" x="378.2" y="532.4" textLength="1061.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-21)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="556.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-22)">│</text><text 
class="breeze-k8s-deploy-airflow-r7" x="378.2" y="556.8" textLength="1061.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-22)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="581.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-23)">│</text><text 
class="breeze-k8s-deploy-airflow-r5" x="378.2" y="581.2" textLength="1061.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-23)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="605.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-24)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="605.6" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-24)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="605.6" textLength="85.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-24)">-python</text><text 
class="breeze-k8s-deploy-airflow-r4" x="122" y="605.6" t [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-25)">│</text><text 
class="breeze-k8s-deploy-airflow-r5" x="378.2" y="630" textLength="951.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-25)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-26)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="654.4" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-26)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="654.4" textLength="134.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-26)">-kubernetes</text><text 
class="breeze-k8s-deploy-airflow-r4" x="170.8" y="6 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="678.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-27)">│</text><text 
class="breeze-k8s-deploy-airflow-r5" x="378.2" y="678.8" textLength="756.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-27)">[default:&#160;v1.24.15&#160;v1.25.11&#160;v1.26.6&#160;v1.27.3]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-k8s-deploy-airf [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="703.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-28)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="703.2" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-28)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="703.2" textLength="61" 
clip-path="url(#breeze-k8s-deploy-airflow-line-28)">-skip</text><text 
class="breeze-k8s-deploy-airflow-r4" x="97.6" y="703.2" text [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="727.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-29)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="727.6" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-29)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="727.6" textLength="73.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-29)">-debug</text><text 
class="breeze-k8s-deploy-airflow-r4" x="109.8" y="727.6"  [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="752" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-30)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="752" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-30)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="752" textLength="97.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-30)">-include</text><text 
class="breeze-k8s-deploy-airflow-r4" x="134.2" y="752" textLe [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="776.4" 
textLength="1464" 
clip-path="url(#breeze-k8s-deploy-airflow-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-deploy-airflow-r2" x="1464" y="776.4" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-31)">
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="800.8" 
textLength="24.4" 
clip-path="url(#breeze-k8s-deploy-airflow-line-32)">╭─</text><text 
class="breeze-k8s-deploy-airflow-r5" x="24.4" y="800.8" textLength="195.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-32)">&#160;Common&#160;options&#160;</text><text
 class="breeze-k8s-deploy-airflow-r5" x="219.6" y="800.8" textLength="1220" 
clip-path="url(#breeze-k8s-deploy-airflow-line-32)">───────────────────────────────────────────
 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-33)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="825.2" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-33)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="825.2" textLength="97.6" 
clip-path="url(#breeze-k8s-deploy-airflow-line-33)">-verbose</text><text 
class="breeze-k8s-deploy-airflow-r6" x="158.6" y="825.2 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="849.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-34)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="849.6" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-34)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="849.6" textLength="48.8" 
clip-path="url(#breeze-k8s-deploy-airflow-line-34)">-dry</text><text 
class="breeze-k8s-deploy-airflow-r4" x="85.4" y="849.6" tex [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="874" 
textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-35)">│</text><text 
class="breeze-k8s-deploy-airflow-r4" x="24.4" y="874" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-35)">-</text><text 
class="breeze-k8s-deploy-airflow-r4" x="36.6" y="874" textLength="61" 
clip-path="url(#breeze-k8s-deploy-airflow-line-35)">-help</text><text 
class="breeze-k8s-deploy-airflow-r6" x="158.6" y="874" textLength= [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="898.4" 
textLength="1464" 
clip-path="url(#breeze-k8s-deploy-airflow-line-36)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-deploy-airflow-r2" x="1464" y="898.4" textLength="12.2" 
clip-path="url(#breeze-k8s-deploy-airflow-line-36)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output_k8s_run-complete-tests.svg 
b/images/breeze/output_k8s_run-complete-tests.svg
index 82db183c2b..d5fb6aab0a 100644
--- a/images/breeze/output_k8s_run-complete-tests.svg
+++ b/images/breeze/output_k8s_run-complete-tests.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1196.8" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 1221.1999999999998" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-run-complete-tests-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1145.8" />
+      <rect x="0" y="0" width="1463.0" height="1170.1999999999998" />
     </clipPath>
     <clipPath id="breeze-k8s-run-complete-tests-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -183,9 +183,12 @@
 <clipPath id="breeze-k8s-run-complete-tests-line-45">
     <rect x="0" y="1099.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-run-complete-tests-line-46">
+    <rect x="0" y="1123.9" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1194.8" rx="8"/><text 
class="breeze-k8s-run-complete-tests-title" fill="#c5c8c6" text-anchor="middle" 
x="740" y="27">Command:&#160;k8s&#160;run-complete-tests</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1219.2" rx="8"/><text 
class="breeze-k8s-run-complete-tests-title" fill="#c5c8c6" text-anchor="middle" 
x="740" y="27">Command:&#160;k8s&#160;run-complete-tests</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -207,41 +210,42 @@
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="239.6" 
textLength="24.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-9)">╭─</text><text 
class="breeze-k8s-run-complete-tests-r5" x="24.4" y="239.6" textLength="268.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-9)">&#160;Airflow&#160;deploy&#160;flags&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" x="292.8" y="239.6" 
textLength="1146.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-9)">───────── [...]
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="264" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-10)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="264" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-10)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="264" textLength="97.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-10)">-upgrade</text><text 
class="breeze-k8s-run-complete-tests- [...]
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="288.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-11)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="288.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-11)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="288.4" textLength="61" 
clip-path="url(#breeze-k8s-run-complete-tests-line-11)">-wait</text><text 
class="breeze-k8s-run-complete-tests [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="312.8" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="312.8" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-12)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="337.2" 
textLength="24.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-13)">╭─</text><text 
class="breeze-k8s-run-complete-tests-r5" x="24.4" y="337.2" textLength="231.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-13)">&#160;Build&#160;image&#160;flags&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" x="256.2" y="337.2" 
textLength="1183.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-13)">───────── [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="361.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-14)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="361.6" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-14)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="361.6" textLength="97.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-14)">-rebuild</text><text 
class="breeze-k8s-run-complete- [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="386" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-15)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="386" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-15)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="386" textLength="73.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-15)">-image</text><text 
class="breeze-k8s-run-complete-tests-r4 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="410.4" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="410.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-16)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="434.8" 
textLength="24.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-17)">╭─</text><text 
class="breeze-k8s-run-complete-tests-r5" x="24.4" y="434.8" textLength="207.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-17)">&#160;K8S&#160;tests&#160;flags&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" x="231.8" y="434.8" 
textLength="1207.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-17)">─────────── [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-18)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="459.2" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-18)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="459.2" textLength="85.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-18)">-python</text><text 
class="breeze-k8s-run-complete-t [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-19)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="341.6" y="483.6" textLength="732" 
clip-path="url(#breeze-k8s-run-complete-tests-line-19)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-20)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="508" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-20)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="508" textLength="134.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-20)">-kubernetes</text><text 
class="breeze-k8s-run-complete-te [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-21)">│</text><text 
class="breeze-k8s-run-complete-tests-r6" x="341.6" y="532.4" textLength="658.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-21)">(&gt;v1.24.15&lt;&#160;|&#160;v1.25.11&#160;|&#160;v1.26.6&#160;|&#160;v1.27.3)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="556.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-22)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="341.6" y="556.8" textLength="658.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-22)">[default:&#160;v1.24.15]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="581.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-23)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="581.2" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-23)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="581.2" textLength="109.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-23)">-executor</text><text 
class="breeze-k8s-run-complet [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="605.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-24)">│</text><text 
class="breeze-k8s-run-complete-tests-r6" x="341.6" y="605.6" 
textLength="1000.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-24)">(&gt;KubernetesExecutor&lt;&#160;|&#160;CeleryExecutor&#160;|&#160;LocalExecutor&#160;|&#160;CeleryKubernetesExecutor)</text><text
 class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="605.6" text [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-25)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="341.6" y="630" textLength="1000.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-25)">[default:&#160;KubernetesExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-26)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="654.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-26)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="654.4" textLength="73.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-26)">-force</text><text 
class="breeze-k8s-run-complete-te [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="678.8" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="678.8" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-27)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="703.2" 
textLength="24.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-28)">╭─</text><text 
class="breeze-k8s-run-complete-tests-r5" x="24.4" y="703.2" textLength="219.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-28)">&#160;Parallel&#160;options&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" x="244" y="703.2" textLength="1195.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-28)">───────────────── [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="727.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-29)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="727.6" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-29)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="727.6" textLength="48.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-29)">-run</text><text 
class="breeze-k8s-run-complete-test [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="752" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-30)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="752" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-30)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="752" textLength="146.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-30)">-parallelism</text><text
 class="breeze-k8s-run-complete-t [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="776.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-31)">│</text><text 
class="breeze-k8s-run-complete-tests-r2" x="378.2" y="776.4" 
textLength="1061.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-31)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-32)">│</text><text 
class="breeze-k8s-run-complete-tests-r6" x="378.2" y="800.8" 
textLength="1061.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-32)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-33)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="378.2" y="825.2" 
textLength="1061.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-33)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="849.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-34)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="849.6" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-34)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="849.6" textLength="85.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-34)">-python</text><text 
class="breeze-k8s-run-complete-t [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="874" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-35)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="378.2" y="874" textLength="951.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-35)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="898.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-36)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="898.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-36)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="898.4" textLength="134.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-36)">-kubernetes</text><text 
class="breeze-k8s-run-compl [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="922.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-37)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="378.2" y="922.8" textLength="756.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-37)">[default:&#160;v1.24.15&#160;v1.25.11&#160;v1.26.6&#160;v1.27.3]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="947.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-38)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="947.2" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-38)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="947.2" textLength="61" 
clip-path="url(#breeze-k8s-run-complete-tests-line-38)">-skip</text><text 
class="breeze-k8s-run-complete-tests [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="971.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="971.6" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-39)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="971.6" textLength="73.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-39)">-debug</text><text 
class="breeze-k8s-run-complete-te [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="996" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-40)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="996" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-40)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="996" textLength="97.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-40)">-include</text><text 
class="breeze-k8s-run-complete-tests- [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1020.4" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-41)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="1020.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-41)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1044.8" 
textLength="24.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-42)">╭─</text><text 
class="breeze-k8s-run-complete-tests-r5" x="24.4" y="1044.8" textLength="195.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-42)">&#160;Common&#160;options&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" x="219.6" y="1044.8" 
textLength="1220" 
clip-path="url(#breeze-k8s-run-complete-tests-line-42)">──────────────── [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1069.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-43)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1069.2" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-43)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="1069.2" textLength="97.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-43)">-verbose</text><text 
class="breeze-k8s-run-comple [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1093.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-44)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1093.6" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-44)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="1093.6" textLength="48.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-44)">-dry</text><text 
class="breeze-k8s-run-complete-t [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1118" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-45)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1118" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-45)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="1118" textLength="61" 
clip-path="url(#breeze-k8s-run-complete-tests-line-45)">-help</text><text 
class="breeze-k8s-run-complete-tests-r7 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1142.4" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="1142.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-46)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="312.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-12)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="312.8" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-12)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="312.8" textLength="48.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-12)">-use</text><text 
class="breeze-k8s-run-complete-test [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="337.2" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="337.2" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-13)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="361.6" 
textLength="24.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-14)">╭─</text><text 
class="breeze-k8s-run-complete-tests-r5" x="24.4" y="361.6" textLength="231.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-14)">&#160;Build&#160;image&#160;flags&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" x="256.2" y="361.6" 
textLength="1183.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-14)">───────── [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="386" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-15)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="386" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-15)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="386" textLength="97.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-15)">-rebuild</text><text 
class="breeze-k8s-run-complete-tests- [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="410.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-16)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="410.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-16)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="410.4" textLength="73.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-16)">-image</text><text 
class="breeze-k8s-run-complete-te [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="434.8" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="434.8" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-17)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="459.2" 
textLength="24.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-18)">╭─</text><text 
class="breeze-k8s-run-complete-tests-r5" x="24.4" y="459.2" textLength="207.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-18)">&#160;K8S&#160;tests&#160;flags&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" x="231.8" y="459.2" 
textLength="1207.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-18)">─────────── [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-19)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="483.6" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-19)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="483.6" textLength="85.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-19)">-python</text><text 
class="breeze-k8s-run-complete-t [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-20)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="341.6" y="508" textLength="732" 
clip-path="url(#breeze-k8s-run-complete-tests-line-20)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-21)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="532.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-21)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="532.4" textLength="134.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-21)">-kubernetes</text><text 
class="breeze-k8s-run-compl [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="556.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-22)">│</text><text 
class="breeze-k8s-run-complete-tests-r6" x="341.6" y="556.8" textLength="658.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-22)">(&gt;v1.24.15&lt;&#160;|&#160;v1.25.11&#160;|&#160;v1.26.6&#160;|&#160;v1.27.3)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="581.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-23)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="341.6" y="581.2" textLength="658.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-23)">[default:&#160;v1.24.15]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="605.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-24)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="605.6" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-24)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="605.6" textLength="109.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-24)">-executor</text><text 
class="breeze-k8s-run-complet [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-25)">│</text><text 
class="breeze-k8s-run-complete-tests-r6" x="341.6" y="630" textLength="1000.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-25)">(&gt;KubernetesExecutor&lt;&#160;|&#160;CeleryExecutor&#160;|&#160;LocalExecutor&#160;|&#160;CeleryKubernetesExecutor)</text><text
 class="breeze-k8s-run-complete-tests-r5" x="1451.8" y="630" textLength [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-26)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="341.6" y="654.4" 
textLength="1000.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-26)">[default:&#160;KubernetesExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="678.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-27)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="678.8" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-27)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="678.8" textLength="73.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-27)">-force</text><text 
class="breeze-k8s-run-complete-te [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="703.2" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="703.2" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-28)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="727.6" 
textLength="24.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-29)">╭─</text><text 
class="breeze-k8s-run-complete-tests-r5" x="24.4" y="727.6" textLength="219.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-29)">&#160;Parallel&#160;options&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" x="244" y="727.6" textLength="1195.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-29)">───────────────── [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="752" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-30)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="752" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-30)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="752" textLength="48.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-30)">-run</text><text 
class="breeze-k8s-run-complete-tests-r4"  [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="776.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-31)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="776.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-31)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="776.4" textLength="146.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-31)">-parallelism</text><text
 class="breeze-k8s-run-comp [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-32)">│</text><text 
class="breeze-k8s-run-complete-tests-r2" x="378.2" y="800.8" 
textLength="1061.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-32)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-33)">│</text><text 
class="breeze-k8s-run-complete-tests-r6" x="378.2" y="825.2" 
textLength="1061.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-33)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="849.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-34)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="378.2" y="849.6" 
textLength="1061.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-34)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="874" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-35)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="874" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-35)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="874" textLength="85.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-35)">-python</text><text 
class="breeze-k8s-run-complete-tests-r [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="898.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-36)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="378.2" y="898.4" textLength="951.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-36)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="922.8" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-37)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="922.8" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-37)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="922.8" textLength="134.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-37)">-kubernetes</text><text 
class="breeze-k8s-run-compl [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="947.2" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-38)">│</text><text 
class="breeze-k8s-run-complete-tests-r5" x="378.2" y="947.2" textLength="756.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-38)">[default:&#160;v1.24.15&#160;v1.25.11&#160;v1.26.6&#160;v1.27.3]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="971.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="971.6" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-39)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="971.6" textLength="61" 
clip-path="url(#breeze-k8s-run-complete-tests-line-39)">-skip</text><text 
class="breeze-k8s-run-complete-tests [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="996" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-40)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="996" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-40)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="996" textLength="73.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-40)">-debug</text><text 
class="breeze-k8s-run-complete-tests-r4 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1020.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-41)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1020.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-41)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="1020.4" textLength="97.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-41)">-include</text><text 
class="breeze-k8s-run-comple [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1044.8" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-42)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="1044.8" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-42)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1069.2" 
textLength="24.4" 
clip-path="url(#breeze-k8s-run-complete-tests-line-43)">╭─</text><text 
class="breeze-k8s-run-complete-tests-r5" x="24.4" y="1069.2" textLength="195.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-43)">&#160;Common&#160;options&#160;</text><text
 class="breeze-k8s-run-complete-tests-r5" x="219.6" y="1069.2" 
textLength="1220" 
clip-path="url(#breeze-k8s-run-complete-tests-line-43)">──────────────── [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1093.6" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-44)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1093.6" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-44)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="1093.6" textLength="97.6" 
clip-path="url(#breeze-k8s-run-complete-tests-line-44)">-verbose</text><text 
class="breeze-k8s-run-comple [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1118" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-45)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1118" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-45)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="1118" textLength="48.8" 
clip-path="url(#breeze-k8s-run-complete-tests-line-45)">-dry</text><text 
class="breeze-k8s-run-complete-tests-r [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1142.4" 
textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-46)">│</text><text 
class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1142.4" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-46)">-</text><text 
class="breeze-k8s-run-complete-tests-r4" x="36.6" y="1142.4" textLength="61" 
clip-path="url(#breeze-k8s-run-complete-tests-line-46)">-help</text><text 
class="breeze-k8s-run-complete-te [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1166.8" 
textLength="1464" 
clip-path="url(#breeze-k8s-run-complete-tests-line-47)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-k8s-run-complete-tests-r2" x="1464" y="1166.8" textLength="12.2" 
clip-path="url(#breeze-k8s-run-complete-tests-line-47)">
 </text>
     </g>
     </g>

Reply via email to