Compare commits

..

1 Commits

Author SHA1 Message Date
Philip Leong
c84a154b52 feat(helm): support additive extra init containers (#42114) 2026-07-17 14:44:24 -07:00
10 changed files with 222 additions and 25 deletions

View File

@@ -81,6 +81,7 @@ jobs:
id: changed_files
env:
EVENT_NAME: ${{ github.event_name }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
BEFORE_SHA: ${{ github.event.before }}
run: |
set -euo pipefail
@@ -94,15 +95,7 @@ jobs:
# Resolve the commit to diff against.
base=""
if [ "${EVENT_NAME}" = "pull_request" ]; then
# HEAD is the PR merge commit, so its first parent is the current
# tip of the base branch. github.event.pull_request.base.sha is
# NOT that: GitHub freezes it at PR creation, so on a long-lived
# PR it points at the original branch point and the diff picks up
# all of the base branch's churn since then — thousands of paths,
# enough for the CHANGED_FILES env var below to exceed the
# kernel's per-variable size limit and kill the step with
# "Argument list too long" before bash even starts.
base="$(git rev-parse HEAD^1 2>/dev/null || true)"
base="${BASE_SHA}"
elif [ -n "${BEFORE_SHA:-}" ] && \
[ "${BEFORE_SHA}" != "0000000000000000000000000000000000000000" ]; then
base="${BEFORE_SHA}"
@@ -121,15 +114,6 @@ jobs:
# Files present in HEAD that changed since the base (drop deletions).
files="$(git diff --name-only --diff-filter=ACMRT "${base}...HEAD")"
# Env vars have a hard per-variable size limit (E2BIG at step
# start). A PR that legitimately touches thousands of files is
# better served by --all-files anyway.
if [ "$(printf '%s' "${files}" | wc -c)" -gt 100000 ]; then
echo "::notice::Changed-file list too large to pass via env; falling back to --all-files."
echo "mode=all" >> "$GITHUB_OUTPUT"
exit 0
fi
if [ -z "${files}" ]; then
echo "mode=none" >> "$GITHUB_OUTPUT"
else

View File

@@ -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

View File

@@ -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 |

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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 }}

View File

@@ -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

View File

@@ -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).