You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/07/17 21:44:31 UTC

(superset) branch master updated: feat(helm): support additive extra init containers (#42114)

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

rusackas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new c84a154b524 feat(helm): support additive extra init containers (#42114)
c84a154b524 is described below

commit c84a154b524839fa1d216a2c563d0889d1e40a4e
Author: Philip Leong <20...@gmail.com>
AuthorDate: Sat Jul 18 05:44:24 2026 +0800

    feat(helm): support additive extra init containers (#42114)
---
 helm/superset/Chart.yaml                       |   2 +-
 helm/superset/README.md                        |   7 +-
 helm/superset/templates/deployment-beat.yaml   |   8 +-
 helm/superset/templates/deployment-flower.yaml |   8 +-
 helm/superset/templates/deployment-worker.yaml |   8 +-
 helm/superset/templates/deployment.yaml        |   8 +-
 helm/superset/templates/init-job.yaml          |   8 +-
 helm/superset/tests/init_containers_test.yaml  | 168 +++++++++++++++++++++++++
 helm/superset/values.yaml                      |  10 ++
 9 files changed, 220 insertions(+), 7 deletions(-)

diff --git a/helm/superset/Chart.yaml b/helm/superset/Chart.yaml
index cc4ecb5ef97..8e22f068333 100644
--- a/helm/superset/Chart.yaml
+++ b/helm/superset/Chart.yaml
@@ -29,7 +29,7 @@ maintainers:
   - name: craig-rueda
     email: craig@craigrueda.com
     url: https://github.com/craig-rueda
-version: 0.20.0 # See [README](https://github.com/apache/superset/blob/master/helm/superset/README.md#versioning) for version details.
+version: 0.21.0 # See [README](https://github.com/apache/superset/blob/master/helm/superset/README.md#versioning) for version details.
 dependencies:
   - name: postgresql
     version: 16.7.27
diff --git a/helm/superset/README.md b/helm/superset/README.md
index bad5501ec32..aca9c10073d 100644
--- a/helm/superset/README.md
+++ b/helm/superset/README.md
@@ -23,7 +23,7 @@ NOTE: This file is generated by helm-docs: https://github.com/norwoodj/helm-docs
 
 # superset
 
-![Version: 0.20.0](https://img.shields.io/badge/Version-0.20.0-informational?style=flat-square)
+![Version: 0.21.0](https://img.shields.io/badge/Version-0.21.0-informational?style=flat-square)
 
 Apache Superset is a modern, enterprise-ready business intelligence web application
 
@@ -149,6 +149,7 @@ Alternatively, perform a fresh install. This is a one-time migration; subsequent
 | init.createAdmin | bool | `true` |  |
 | init.enabled | bool | `true` |  |
 | init.extraContainers | list | `[]` | Launch additional containers into init job pod |
+| init.extraInitContainers | list | `[]` | Extra init containers appended after init job initContainers |
 | init.initContainers | list | a container waiting for postgres | List of initContainers |
 | init.initscript | string | unused; kept for backwards-compatibility only | DEPRECATED: this field is no longer used by the chart. The init script is rendered entirely from the internal `superset.initScript` template (which runs `superset db upgrade`, `superset init`, admin creation, and examples). Any customization placed here is silently ignored. See UPGRADING.md. |
 | init.jobAnnotations."helm.sh/hook" | string | `"post-install,post-upgrade"` |  |
@@ -186,6 +187,7 @@ Alternatively, perform a fresh install. This is a one-time migration; subsequent
 | supersetCeleryBeat.deploymentAnnotations | object | `{}` | Annotations to be added to supersetCeleryBeat deployment |
 | supersetCeleryBeat.enabled | bool | `false` | This is only required if you intend to use alerts and reports |
 | supersetCeleryBeat.extraContainers | list | `[]` | Launch additional containers into supersetCeleryBeat pods |
+| supersetCeleryBeat.extraInitContainers | list | `[]` | Extra init containers appended after supersetCeleryBeat initContainers |
 | supersetCeleryBeat.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade |
 | supersetCeleryBeat.initContainers | list | a container waiting for postgres | List of init containers |
 | supersetCeleryBeat.podAnnotations | object | `{}` | Annotations to be added to supersetCeleryBeat pods |
@@ -205,6 +207,7 @@ Alternatively, perform a fresh install. This is a one-time migration; subsequent
 | supersetCeleryFlower.deploymentAnnotations | object | `{}` | Annotations to be added to supersetCeleryFlower deployment |
 | supersetCeleryFlower.enabled | bool | `false` | Enables a Celery flower deployment (management UI to monitor celery jobs) WARNING: on superset 1.x, this requires a Superset image that has `flower<1.0.0` installed (which is NOT the case of the default images) flower>=1.0.0 requires Celery 5+ which Superset 1.5 does not support |
 | supersetCeleryFlower.extraContainers | list | `[]` | Launch additional containers into supersetCeleryFlower pods |
+| supersetCeleryFlower.extraInitContainers | list | `[]` | Extra init containers appended after supersetCeleryFlower initContainers |
 | supersetCeleryFlower.initContainers | list | a container waiting for postgres and redis | List of init containers |
 | supersetCeleryFlower.livenessProbe.failureThreshold | int | `3` |  |
 | supersetCeleryFlower.livenessProbe.httpGet.path | string | `"/api/workers"` |  |
@@ -256,6 +259,7 @@ Alternatively, perform a fresh install. This is a one-time migration; subsequent
 | supersetNode.deploymentLabels | object | `{}` | Labels to be added to supersetNode deployment |
 | supersetNode.env | object | `{}` |  |
 | supersetNode.extraContainers | list | `[]` | Launch additional containers into supersetNode pod |
+| supersetNode.extraInitContainers | list | `[]` | Extra init containers appended after supersetNode initContainers |
 | supersetNode.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade |
 | supersetNode.initContainers | list | a container waiting for postgres | Init containers |
 | supersetNode.lifecycle | object | `{}` | Container lifecycle hooks, e.g. a preStop sleep so the Service/Ingress stops routing to the pod before gunicorn receives SIGTERM |
@@ -355,6 +359,7 @@ Alternatively, perform a fresh install. This is a one-time migration; subsequent
 | supersetWorker.deploymentAnnotations | object | `{}` | Annotations to be added to supersetWorker deployment |
 | supersetWorker.deploymentLabels | object | `{}` | Labels to be added to supersetWorker deployment |
 | supersetWorker.extraContainers | list | `[]` | Launch additional containers into supersetWorker pod |
+| supersetWorker.extraInitContainers | list | `[]` | Extra init containers appended after supersetWorker initContainers |
 | supersetWorker.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade |
 | supersetWorker.healthCheck | object | `{"enabled":false,"livenessFile":"/tmp/celery_worker_alive","livenessHeartbeatInterval":10,"readinessFile":"/tmp/celery_worker_ready"}` | Celery worker file-based health check (worker writes readiness/liveness files via signals;    point supersetWorker.readinessProbe/livenessProbe at these files to use them) |
 | supersetWorker.healthCheck.enabled | bool | `false` | Enable the file-based Celery worker health check |
diff --git a/helm/superset/templates/deployment-beat.yaml b/helm/superset/templates/deployment-beat.yaml
index 53f6a5fb61e..054b0646498 100644
--- a/helm/superset/templates/deployment-beat.yaml
+++ b/helm/superset/templates/deployment-beat.yaml
@@ -75,8 +75,14 @@ spec:
         {{- if .Values.supersetCeleryBeat.podSecurityContext }}
           {{- toYaml .Values.supersetCeleryBeat.podSecurityContext | nindent 8 }}
         {{- end }}
+      {{- if or .Values.supersetCeleryBeat.initContainers .Values.supersetCeleryBeat.extraInitContainers }}
+      initContainers:
       {{- if .Values.supersetCeleryBeat.initContainers }}
-      initContainers: {{-  tpl (toYaml .Values.supersetCeleryBeat.initContainers) . | nindent 6 }}
+      {{-  tpl (toYaml .Values.supersetCeleryBeat.initContainers) . | nindent 6 }}
+      {{- end }}
+      {{- if .Values.supersetCeleryBeat.extraInitContainers }}
+      {{-  tpl (toYaml .Values.supersetCeleryBeat.extraInitContainers) . | nindent 6 }}
+      {{- end }}
       {{- end }}
       {{- with .Values.hostAliases }}
       hostAliases: {{- toYaml . | nindent 6 }}
diff --git a/helm/superset/templates/deployment-flower.yaml b/helm/superset/templates/deployment-flower.yaml
index 07bb5d7cbe4..9c705078ccd 100644
--- a/helm/superset/templates/deployment-flower.yaml
+++ b/helm/superset/templates/deployment-flower.yaml
@@ -61,8 +61,14 @@ spec:
         {{- if .Values.supersetCeleryFlower.podSecurityContext }}
           {{- toYaml .Values.supersetCeleryFlower.podSecurityContext | nindent 8 }}
         {{- end }}
+      {{- if or .Values.supersetCeleryFlower.initContainers .Values.supersetCeleryFlower.extraInitContainers }}
+      initContainers:
       {{- if .Values.supersetCeleryFlower.initContainers }}
-      initContainers: {{-  tpl (toYaml .Values.supersetCeleryFlower.initContainers) . | nindent 6 }}
+      {{-  tpl (toYaml .Values.supersetCeleryFlower.initContainers) . | nindent 6 }}
+      {{- end }}
+      {{- if .Values.supersetCeleryFlower.extraInitContainers }}
+      {{-  tpl (toYaml .Values.supersetCeleryFlower.extraInitContainers) . | nindent 6 }}
+      {{- end }}
       {{- end }}
       {{- with .Values.hostAliases }}
       hostAliases: {{- toYaml . | nindent 6 }}
diff --git a/helm/superset/templates/deployment-worker.yaml b/helm/superset/templates/deployment-worker.yaml
index 6c37d3e4e46..a2dd1a22176 100644
--- a/helm/superset/templates/deployment-worker.yaml
+++ b/helm/superset/templates/deployment-worker.yaml
@@ -81,8 +81,14 @@ spec:
         {{- if .Values.supersetWorker.podSecurityContext }}
           {{- toYaml .Values.supersetWorker.podSecurityContext | nindent 8 }}
         {{- end }}
+      {{- if or .Values.supersetWorker.initContainers .Values.supersetWorker.extraInitContainers }}
+      initContainers:
       {{- if .Values.supersetWorker.initContainers }}
-      initContainers: {{- tpl (toYaml .Values.supersetWorker.initContainers) . | nindent 6 }}
+      {{- tpl (toYaml .Values.supersetWorker.initContainers) . | nindent 6 }}
+      {{- end }}
+      {{- if .Values.supersetWorker.extraInitContainers }}
+      {{- tpl (toYaml .Values.supersetWorker.extraInitContainers) . | nindent 6 }}
+      {{- end }}
       {{- end }}
       {{- with .Values.hostAliases }}
       hostAliases: {{- toYaml . | nindent 6 }}
diff --git a/helm/superset/templates/deployment.yaml b/helm/superset/templates/deployment.yaml
index 229ed8a36f4..390e12a8b7e 100644
--- a/helm/superset/templates/deployment.yaml
+++ b/helm/superset/templates/deployment.yaml
@@ -83,8 +83,14 @@ spec:
         {{- if .Values.supersetNode.podSecurityContext }}
           {{- toYaml .Values.supersetNode.podSecurityContext | nindent 8 }}
         {{- end }}
+      {{- if or .Values.supersetNode.initContainers .Values.supersetNode.extraInitContainers }}
+      initContainers:
       {{- if .Values.supersetNode.initContainers }}
-      initContainers: {{- tpl (toYaml .Values.supersetNode.initContainers) . | nindent 6 }}
+      {{- tpl (toYaml .Values.supersetNode.initContainers) . | nindent 6 }}
+      {{- end }}
+      {{- if .Values.supersetNode.extraInitContainers }}
+      {{- tpl (toYaml .Values.supersetNode.extraInitContainers) . | nindent 6 }}
+      {{- end }}
       {{- end }}
       {{- with .Values.hostAliases }}
       hostAliases: {{- toYaml . | nindent 6 }}
diff --git a/helm/superset/templates/init-job.yaml b/helm/superset/templates/init-job.yaml
index 24b119f434f..72aab88c7a0 100644
--- a/helm/superset/templates/init-job.yaml
+++ b/helm/superset/templates/init-job.yaml
@@ -56,8 +56,14 @@ spec:
         {{- if .Values.init.podSecurityContext }}
           {{- toYaml .Values.init.podSecurityContext | nindent 8 }}
         {{- end }}
+      {{- if or .Values.init.initContainers .Values.init.extraInitContainers }}
+      initContainers:
       {{- if .Values.init.initContainers }}
-      initContainers: {{-  tpl (toYaml .Values.init.initContainers) . | nindent 6 }}
+      {{-  tpl (toYaml .Values.init.initContainers) . | nindent 6 }}
+      {{- end }}
+      {{- if .Values.init.extraInitContainers }}
+      {{-  tpl (toYaml .Values.init.extraInitContainers) . | nindent 6 }}
+      {{- end }}
       {{- end }}
       {{- with .Values.hostAliases }}
       hostAliases: {{- toYaml . | nindent 6 }}
diff --git a/helm/superset/tests/init_containers_test.yaml b/helm/superset/tests/init_containers_test.yaml
new file mode 100644
index 00000000000..58ec3535cf9
--- /dev/null
+++ b/helm/superset/tests/init_containers_test.yaml
@@ -0,0 +1,168 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+suite: init containers + extraInitContainers
+templates:
+  - deployment.yaml
+  - deployment-worker.yaml
+  - deployment-beat.yaml
+  - deployment-flower.yaml
+  - init-job.yaml
+tests:
+  - it: renders only the default wait-for container by default
+    template: deployment.yaml
+    asserts:
+      - lengthEqual:
+          path: spec.template.spec.initContainers
+          count: 1
+      - equal:
+          path: spec.template.spec.initContainers[0].name
+          value: wait-for-postgres
+
+  - it: appends extraInitContainers after the default initContainers
+    template: deployment.yaml
+    set:
+      supersetNode.extraInitContainers:
+        - name: prepare-assets
+          image: busybox
+          command: ["sh", "-c", "echo preparing"]
+    asserts:
+      - lengthEqual:
+          path: spec.template.spec.initContainers
+          count: 2
+      - equal:
+          path: spec.template.spec.initContainers[0].name
+          value: wait-for-postgres
+      - equal:
+          path: spec.template.spec.initContainers[1].name
+          value: prepare-assets
+
+  - it: templates values inside extraInitContainers
+    template: deployment.yaml
+    set:
+      image.repository: example/superset
+      supersetNode.extraInitContainers:
+        - name: prepare-assets
+          image: "{{ .Values.image.repository }}:test"
+    asserts:
+      - equal:
+          path: spec.template.spec.initContainers[1].image
+          value: example/superset:test
+
+  - it: keeps replace semantics for initContainers while appending extras
+    template: deployment.yaml
+    set:
+      supersetNode.initContainers:
+        - name: custom-wait
+          image: busybox
+      supersetNode.extraInitContainers:
+        - name: prepare-assets
+          image: busybox
+    asserts:
+      - lengthEqual:
+          path: spec.template.spec.initContainers
+          count: 2
+      - equal:
+          path: spec.template.spec.initContainers[0].name
+          value: custom-wait
+      - equal:
+          path: spec.template.spec.initContainers[1].name
+          value: prepare-assets
+
+  - it: renders only extras when initContainers is cleared
+    template: deployment.yaml
+    set:
+      supersetNode.initContainers: []
+      supersetNode.extraInitContainers:
+        - name: prepare-assets
+          image: busybox
+    asserts:
+      - lengthEqual:
+          path: spec.template.spec.initContainers
+          count: 1
+      - equal:
+          path: spec.template.spec.initContainers[0].name
+          value: prepare-assets
+
+  - it: appends worker extraInitContainers after wait-for-postgres-redis
+    template: deployment-worker.yaml
+    set:
+      supersetWorker.extraInitContainers:
+        - name: prepare-assets
+          image: busybox
+    asserts:
+      - lengthEqual:
+          path: spec.template.spec.initContainers
+          count: 2
+      - equal:
+          path: spec.template.spec.initContainers[0].name
+          value: wait-for-postgres-redis
+      - equal:
+          path: spec.template.spec.initContainers[1].name
+          value: prepare-assets
+
+  - it: appends beat extraInitContainers after wait-for-postgres-redis
+    template: deployment-beat.yaml
+    set:
+      supersetCeleryBeat.enabled: true
+      supersetCeleryBeat.extraInitContainers:
+        - name: prepare-assets
+          image: busybox
+    asserts:
+      - lengthEqual:
+          path: spec.template.spec.initContainers
+          count: 2
+      - equal:
+          path: spec.template.spec.initContainers[0].name
+          value: wait-for-postgres-redis
+      - equal:
+          path: spec.template.spec.initContainers[1].name
+          value: prepare-assets
+
+  - it: appends flower extraInitContainers after wait-for-postgres-redis
+    template: deployment-flower.yaml
+    set:
+      supersetCeleryFlower.enabled: true
+      supersetCeleryFlower.extraInitContainers:
+        - name: prepare-assets
+          image: busybox
+    asserts:
+      - lengthEqual:
+          path: spec.template.spec.initContainers
+          count: 2
+      - equal:
+          path: spec.template.spec.initContainers[0].name
+          value: wait-for-postgres-redis
+      - equal:
+          path: spec.template.spec.initContainers[1].name
+          value: prepare-assets
+
+  - it: appends init job extraInitContainers after wait-for-postgres
+    template: init-job.yaml
+    set:
+      init.extraInitContainers:
+        - name: prepare-assets
+          image: busybox
+    asserts:
+      - lengthEqual:
+          path: spec.template.spec.initContainers
+          count: 2
+      - equal:
+          path: spec.template.spec.initContainers[0].name
+          value: wait-for-postgres
+      - equal:
+          path: spec.template.spec.initContainers[1].name
+          value: prepare-assets
diff --git a/helm/superset/values.yaml b/helm/superset/values.yaml
index 82763486751..785a71e85b4 100644
--- a/helm/superset/values.yaml
+++ b/helm/superset/values.yaml
@@ -415,6 +415,8 @@ supersetNode:
           cpu: "250m"
           memory: "128Mi"
 
+  # -- Extra init containers appended after supersetNode initContainers
+  extraInitContainers: []
   # -- Launch additional containers into supersetNode pod
   extraContainers: []
   # -- Annotations to be added to supersetNode deployment
@@ -542,6 +544,8 @@ supersetWorker:
         requests:
           cpu: "250m"
           memory: "128Mi"
+  # -- Extra init containers appended after supersetWorker initContainers
+  extraInitContainers: []
   # -- Launch additional containers into supersetWorker pod
   extraContainers: []
   # -- Annotations to be added to supersetWorker deployment
@@ -663,6 +667,8 @@ supersetCeleryBeat:
         requests:
           cpu: "250m"
           memory: "128Mi"
+  # -- Extra init containers appended after supersetCeleryBeat initContainers
+  extraInitContainers: []
   # -- Launch additional containers into supersetCeleryBeat pods
   extraContainers: []
   # -- Annotations to be added to supersetCeleryBeat deployment
@@ -780,6 +786,8 @@ supersetCeleryFlower:
         requests:
           cpu: "250m"
           memory: "128Mi"
+  # -- Extra init containers appended after supersetCeleryFlower initContainers
+  extraInitContainers: []
   # -- Launch additional containers into supersetCeleryFlower pods
   extraContainers: []
   # -- Annotations to be added to supersetCeleryFlower deployment
@@ -967,6 +975,8 @@ init:
         requests:
           cpu: "250m"
           memory: "128Mi"
+  # -- Extra init containers appended after init job initContainers
+  extraInitContainers: []
   # -- DEPRECATED: this field is no longer used by the chart.
   # The init script is rendered entirely from the internal `superset.initScript` template
   # (which runs `superset db upgrade`, `superset init`, admin creation, and examples).