From 762a81aeec9bf1010e703aebcf4ff071ccb7ecb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Str=C3=BCbe?= Date: Fri, 12 Jun 2026 13:39:46 +0200 Subject: [PATCH 1/2] fix: collect pod logs after helm test (FB-1643) --- helm/AGENTS.md | 8 +++++--- helm/templates/tests/test-auth-configmap.yaml | 2 +- helm/templates/tests/test-engine-configmaps.yaml | 2 +- helm/templates/tests/test-engine-dns.yaml | 2 +- helm/templates/tests/test-engine-pods-reachable.yaml | 2 +- helm/templates/tests/test-engine-ready.yaml | 2 +- helm/templates/tests/test-gateway-ready.yaml | 2 +- helm/templates/tests/test-metadata-service.yaml | 2 +- helm/templates/tests/test-namespace-dns.yaml | 2 +- helm/templates/tests/test-postgres.yaml | 2 +- helm/templates/tests/test-smoke.yaml | 2 +- helm/templates/tests/test-sql-query.yaml | 2 +- 12 files changed, 16 insertions(+), 14 deletions(-) diff --git a/helm/AGENTS.md b/helm/AGENTS.md index 0e6ad7b..b560463 100644 --- a/helm/AGENTS.md +++ b/helm/AGENTS.md @@ -70,10 +70,12 @@ The Helm chart itself, packaged and published as `firebolt-instance` to `oci://g ## Adding a new helm test 1. Create `templates/tests/test-.yaml` as a `Pod` with `metadata.annotations."helm.sh/hook": test`. -2. Use `fbinstance.testShellHelpers` for the `log` / `pass` / `fail` shell helpers. -3. Use `fbinstance.fullname` and `fbinstance.selectorLabels` for any name or selector. -4. Verify with `make test` (which passes `--logs`, so any failure surfaces directly). +2. Set `metadata.annotations."helm.sh/hook-delete-policy": before-hook-creation` (and only that — see "Known issues" below for why `hook-succeeded` is forbidden on test pods). +3. Use `fbinstance.testShellHelpers` for the `log` / `pass` / `fail` shell helpers. +4. Use `fbinstance.fullname` and `fbinstance.selectorLabels` for any name or selector. +5. Verify with `make test` (which passes `--logs`, so any failure surfaces directly). ## Known issues - Symptom: engine pods can fail during startup if the chart moves `--data-dir` or the `data` volume away from `/firebolt-core/volume`. Cause: the engine treats `/firebolt-core/volume` as its writable runtime data directory. Resolution: keep the `data` mount, `--data-dir`, `config.yaml`, `auth.json`, and memlock PID files under `/firebolt-core/volume`. +- Symptom: `make test` (i.e. `helm test --logs`) prints `Phase: Succeeded` for every suite and then exits 1 with `unable to get pod logs ... pods "-test-" not found`. Cause: a `helm.sh/hook-delete-policy` of `before-hook-creation,hook-succeeded` on the test pod tells helm to delete the pod the moment the hook succeeds, so by the time `helm test --logs` iterates the pods to fetch their logs they are already gone (helm/helm#8949). Resolution: test pods MUST set `helm.sh/hook-delete-policy: before-hook-creation` only — never include `hook-succeeded`. Stale pods are still cleaned up on the next `helm test` run by `before-hook-creation`, and `make test-cleanup` deletes them on demand. diff --git a/helm/templates/tests/test-auth-configmap.yaml b/helm/templates/tests/test-auth-configmap.yaml index 2b11c58..ed9110c 100644 --- a/helm/templates/tests/test-auth-configmap.yaml +++ b/helm/templates/tests/test-auth-configmap.yaml @@ -5,7 +5,7 @@ metadata: namespace: {{ .Release.Namespace }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never volumes: diff --git a/helm/templates/tests/test-engine-configmaps.yaml b/helm/templates/tests/test-engine-configmaps.yaml index 3ac9667..b6d4df6 100644 --- a/helm/templates/tests/test-engine-configmaps.yaml +++ b/helm/templates/tests/test-engine-configmaps.yaml @@ -5,7 +5,7 @@ metadata: namespace: {{ .Release.Namespace }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never volumes: diff --git a/helm/templates/tests/test-engine-dns.yaml b/helm/templates/tests/test-engine-dns.yaml index 35b668a..9e66f51 100644 --- a/helm/templates/tests/test-engine-dns.yaml +++ b/helm/templates/tests/test-engine-dns.yaml @@ -5,7 +5,7 @@ metadata: namespace: {{ .Release.Namespace }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never containers: diff --git a/helm/templates/tests/test-engine-pods-reachable.yaml b/helm/templates/tests/test-engine-pods-reachable.yaml index 72d75f5..126207f 100644 --- a/helm/templates/tests/test-engine-pods-reachable.yaml +++ b/helm/templates/tests/test-engine-pods-reachable.yaml @@ -5,7 +5,7 @@ metadata: namespace: {{ .Release.Namespace }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never containers: diff --git a/helm/templates/tests/test-engine-ready.yaml b/helm/templates/tests/test-engine-ready.yaml index 9ddaed2..023225c 100644 --- a/helm/templates/tests/test-engine-ready.yaml +++ b/helm/templates/tests/test-engine-ready.yaml @@ -7,7 +7,7 @@ metadata: {{- include "fbinstance.labels" . | nindent 4 }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never containers: diff --git a/helm/templates/tests/test-gateway-ready.yaml b/helm/templates/tests/test-gateway-ready.yaml index b37ffb3..f9367df 100644 --- a/helm/templates/tests/test-gateway-ready.yaml +++ b/helm/templates/tests/test-gateway-ready.yaml @@ -6,7 +6,7 @@ metadata: namespace: {{ .Release.Namespace }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never containers: diff --git a/helm/templates/tests/test-metadata-service.yaml b/helm/templates/tests/test-metadata-service.yaml index 0027622..8682655 100644 --- a/helm/templates/tests/test-metadata-service.yaml +++ b/helm/templates/tests/test-metadata-service.yaml @@ -5,7 +5,7 @@ metadata: namespace: {{ .Release.Namespace }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never containers: diff --git a/helm/templates/tests/test-namespace-dns.yaml b/helm/templates/tests/test-namespace-dns.yaml index 5edf663..81637ab 100644 --- a/helm/templates/tests/test-namespace-dns.yaml +++ b/helm/templates/tests/test-namespace-dns.yaml @@ -5,7 +5,7 @@ metadata: namespace: {{ .Release.Namespace }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never containers: diff --git a/helm/templates/tests/test-postgres.yaml b/helm/templates/tests/test-postgres.yaml index f68432a..5da8048 100644 --- a/helm/templates/tests/test-postgres.yaml +++ b/helm/templates/tests/test-postgres.yaml @@ -6,7 +6,7 @@ metadata: namespace: {{ .Release.Namespace }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never containers: diff --git a/helm/templates/tests/test-smoke.yaml b/helm/templates/tests/test-smoke.yaml index 8802963..2fbba31 100644 --- a/helm/templates/tests/test-smoke.yaml +++ b/helm/templates/tests/test-smoke.yaml @@ -7,7 +7,7 @@ metadata: {{- include "fbinstance.labels" . | nindent 4 }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never containers: diff --git a/helm/templates/tests/test-sql-query.yaml b/helm/templates/tests/test-sql-query.yaml index eaeca38..8f15d53 100644 --- a/helm/templates/tests/test-sql-query.yaml +++ b/helm/templates/tests/test-sql-query.yaml @@ -11,7 +11,7 @@ metadata: firebolt/engine: {{ $engine.name }} annotations: helm.sh/hook: test - helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-delete-policy: before-hook-creation spec: restartPolicy: Never containers: From 1017585b9ee9b22fa0bbbaabaea298379fe4b089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Str=C3=BCbe?= Date: Fri, 12 Jun 2026 13:52:07 +0200 Subject: [PATCH 2/2] docs: minor README.md fixes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b95c0c4..a7fd764 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # firebolt-instance-helm -Helm chart for running a Firebolt instance on Kubernetes: Envoy gateway, Metadata Service, PostgreSQL, and one or more Firebolt query engine StatefulSets. +Helm chart for running a Firebolt instance on Kubernetes: Gateway (Envoy), Metadata Service, PostgreSQL and one or more Firebolt Engines. The chart is published as `firebolt-instance` to `oci://ghcr.io/firebolt-db/helm-charts` on every change to `helm/` merged to `main`. @@ -9,7 +9,7 @@ For more detailed information checkout our [official documentation](https://docs ## Scope -The chart deploys a complete Firebolt instance — gateway, metadata, PostgreSQL, engines — into any Kubernetes cluster. For day-2 operational capabilities (zero-downtime engine rollouts, autoscaling, drift correction, reusable per-engine templates), use the [Firebolt Kubernetes Operator](docs/operator-upgrade-path.mdx). See [`docs/`](docs/) for usage patterns. +The chart deploys a complete Firebolt Instance consistingo of a Gateway (Envoy), Metadata Service, PostgreSQL and Firebolt Engines into any Kubernetes cluster. For day-2 operational capabilities (zero-downtime engine rollouts, autoscaling, drift correction, reusable per-engine templates), take a look at the [Firebolt Kubernetes Operator](https://github.com/firebolt-db/firebolt-kubernetes-operator). ## Architecture