This is an automated email from the ASF dual-hosted git repository.
villebro pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/superset-kubernetes-operator.git
The following commit(s) were added to refs/heads/main by this push:
new 18ad5c6 refactor(api)!: rename status version to tag
(version-agnostic) (#174)
18ad5c6 is described below
commit 18ad5c6abfdc236aa6ce900b5eac3101d1366327
Author: Ville Brofeldt <[email protected]>
AuthorDate: Mon Jul 6 16:01:05 2026 -0700
refactor(api)!: rename status version to tag (version-agnostic) (#174)
* refactor(api)!: rename status version to tag (version-agnostic)
* simplify changelog entry
* update docs
---
AGENTS.md | 2 +-
api/v1alpha1/superset_types.go | 13 ++++----
.../crds/superset.apache.org_supersets.yaml | 10 +++----
.../crd/bases/superset.apache.org_supersets.yaml | 10 +++----
docs/architecture/internals.md | 4 +--
docs/reference/api-reference.md | 8 ++---
docs/reference/releases.md | 16 ++++++----
docs/user-guide/lifecycle.md | 35 ++++++++++------------
docs/user-guide/migration.md | 8 +++++
internal/controller/lifecycle.go | 22 +++++++-------
internal/controller/lifecycle_pipeline_test.go | 6 ++--
internal/controller/lifecycle_settle_test.go | 6 ++--
internal/controller/status.go | 4 +--
test/e2e/superset_journey_test.go | 4 +--
14 files changed, 80 insertions(+), 68 deletions(-)
diff --git a/AGENTS.md b/AGENTS.md
index d3a26a0..79e18c7 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -115,7 +115,7 @@ The operator uses a **single public CRD architecture**
where the parent `Superse
- **HPA**: When `autoscaling` is set, Deployment replicas is nil (HPA
manages). Supports custom metrics via `autoscalingv2.MetricSpec`. Top-level
`autoscaling`/`podDisruptionBudget` provide defaults inherited by all scalable
components; per-component values override (not merge). CeleryBeat and lifecycle
tasks are excluded (singleton/one-off Jobs).
- **Beat singleton**: CeleryBeat always forces replicas=1 regardless of spec.
- **Gateway API**: Uses `sigs.k8s.io/gateway-api` types. Graceful handling of
missing CRDs via `meta.IsNoMatchError`.
-- **Lifecycle tasks**: `spec.lifecycle` on the parent CRD (type
`LifecycleSpec`) defines up to four sequential tasks: "seed" (database snapshot
from external source), "migrate" (`superset db upgrade`), "rotate" (`superset
re-encrypt-secrets` for secret key rotation), and "init" (`superset init`). The
parent controller sequences them (migrate waits for seed, rotate waits for
migrate, init waits for rotate), gates component deployment, and triggers
re-runs by deleting and recreating determ [...]
+- **Lifecycle tasks**: `spec.lifecycle` on the parent CRD (type
`LifecycleSpec`) defines up to four sequential tasks: "seed" (database snapshot
from external source), "migrate" (`superset db upgrade`), "rotate" (`superset
re-encrypt-secrets` for secret key rotation), and "init" (`superset init`). The
parent controller sequences them (migrate waits for seed, rotate waits for
migrate, init waits for rotate), gates component deployment, and triggers
re-runs by deleting and recreating determ [...]
- **CRD validation**: All validation uses CEL (`x-kubernetes-validations`) on
CRD types — no admission webhooks. Rules cover: environment mode restrictions,
secret mutual exclusivity, metastore/valkey validation, networking constraints,
monitoring constraints. Defaults (repository, pullPolicy, environment) use
kubebuilder default markers.
- **Metrics**: Operator exposes controller-runtime default metrics (reconcile
counts, durations, leader election) on HTTPS :8443 with Kubernetes auth/authz.
No custom metrics — controller-runtime defaults are sufficient. Superset
instance monitoring via optional `spec.monitoring.serviceMonitor` (creates a
Prometheus ServiceMonitor targeting the web-server component using unstructured
objects; gracefully skips if CRD is absent).
- **Config mount path**: `/app/pythonpath` for superset_config.py.
diff --git a/api/v1alpha1/superset_types.go b/api/v1alpha1/superset_types.go
index af71f83..6bff1fa 100644
--- a/api/v1alpha1/superset_types.go
+++ b/api/v1alpha1/superset_types.go
@@ -452,7 +452,7 @@ type LifecycleSpec struct {
}
// MigrateTaskSpec defines the database migration task.
-// Triggers on image (version) changes and upstream task re-execution.
+// Triggers on image tag changes and upstream task re-execution.
type MigrateTaskSpec struct {
BaseTaskSpec `json:",inline"`
}
@@ -780,8 +780,9 @@ type SupersetStatus struct {
// Used to detect image changes on subsequent reconciles.
// +optional
LastLifecycleImage string `json:"lastLifecycleImage,omitempty"`
+ // Tag is the resolved image tag currently reconciled.
// +optional
- Version string `json:"version,omitempty"`
+ Tag string `json:"tag,omitempty"`
// +optional
ConfigChecksum string `json:"configChecksum,omitempty"`
// High-level phase.
@@ -863,10 +864,12 @@ type TaskRefStatus struct {
// UpgradeContext tracks the current upgrade operation.
type UpgradeContext struct {
+ // FromTag is the image tag previously reconciled.
// +optional
- FromVersion string `json:"fromVersion,omitempty"`
+ FromTag string `json:"fromTag,omitempty"`
+ // ToTag is the image tag being reconciled.
// +optional
- ToVersion string `json:"toVersion,omitempty"`
+ ToTag string `json:"toTag,omitempty"`
// ApprovalToken is the annotation value required to approve this exact
upgrade transition.
// +optional
ApprovalToken string `json:"approvalToken,omitempty"`
@@ -942,7 +945,7 @@ type ComponentResourceStatus struct {
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
-//
+kubebuilder:printcolumn:name="Version",type=string,JSONPath=`.status.version`
+// +kubebuilder:printcolumn:name="Tag",type=string,JSONPath=`.status.tag`
// +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase`
//
+kubebuilder:printcolumn:name="Lifecycle",type=string,JSONPath=`.status.lifecycle.phase`
// +kubebuilder:printcolumn:name="Ready",type=string,JSONPath=`.status.ready`
diff --git a/charts/superset-operator/crds/superset.apache.org_supersets.yaml
b/charts/superset-operator/crds/superset.apache.org_supersets.yaml
index 78f67fc..3ddec9b 100644
--- a/charts/superset-operator/crds/superset.apache.org_supersets.yaml
+++ b/charts/superset-operator/crds/superset.apache.org_supersets.yaml
@@ -15,8 +15,8 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- - jsonPath: .status.version
- name: Version
+ - jsonPath: .status.tag
+ name: Tag
type: string
- jsonPath: .status.phase
name: Phase
@@ -40045,12 +40045,12 @@ spec:
properties:
approvalToken:
type: string
- fromVersion:
+ fromTag:
type: string
startedAt:
format: date-time
type: string
- toVersion:
+ toTag:
type: string
type: object
type: object
@@ -40069,7 +40069,7 @@ spec:
type: string
ready:
type: string
- version:
+ tag:
type: string
type: object
type: object
diff --git a/config/crd/bases/superset.apache.org_supersets.yaml
b/config/crd/bases/superset.apache.org_supersets.yaml
index 78f67fc..3ddec9b 100644
--- a/config/crd/bases/superset.apache.org_supersets.yaml
+++ b/config/crd/bases/superset.apache.org_supersets.yaml
@@ -15,8 +15,8 @@ spec:
scope: Namespaced
versions:
- additionalPrinterColumns:
- - jsonPath: .status.version
- name: Version
+ - jsonPath: .status.tag
+ name: Tag
type: string
- jsonPath: .status.phase
name: Phase
@@ -40045,12 +40045,12 @@ spec:
properties:
approvalToken:
type: string
- fromVersion:
+ fromTag:
type: string
startedAt:
format: date-time
type: string
- toVersion:
+ toTag:
type: string
type: object
type: object
@@ -40069,7 +40069,7 @@ spec:
type: string
ready:
type: string
- version:
+ tag:
type: string
type: object
type: object
diff --git a/docs/architecture/internals.md b/docs/architecture/internals.md
index 7ca6715..d5abe24 100644
--- a/docs/architecture/internals.md
+++ b/docs/architecture/internals.md
@@ -391,7 +391,7 @@ The parent `Superset` CR reports aggregate status:
status:
phase: Running
observedGeneration: 3
- version: "latest"
+ tag: "latest"
ready: "7/7"
components:
webServer:
@@ -442,7 +442,7 @@ The top-level `status.phase` reflects the overall instance
state:
| Phase | Meaning |
|---|---|
| `Initializing` | First deployment — lifecycle tasks running for the first
time |
-| `Upgrading` | Image change detected — lifecycle tasks running against new
version |
+| `Upgrading` | Image tag change detected — lifecycle tasks running against
the new image |
| `Running` | All enabled components are ready and lifecycle is complete |
| `Degraded` | One or more components are not fully ready |
| `Suspended` | `spec.suspend: true` — all reconciliation paused |
diff --git a/docs/reference/api-reference.md b/docs/reference/api-reference.md
index ed4379a..73914ab 100644
--- a/docs/reference/api-reference.md
+++ b/docs/reference/api-reference.md
@@ -682,7 +682,7 @@ _Appears in:_
MigrateTaskSpec defines the database migration task.
-Triggers on image (version) changes and upstream task re-execution.
+Triggers on image tag changes and upstream task re-execution.
@@ -1111,7 +1111,7 @@ _Appears in:_
| `components` _[ComponentStatusMap](#componentstatusmap)_ | | | Optional:
\{\} <br /> |
| `lifecycle` _[LifecycleStatus](#lifecyclestatus)_ | Lifecycle tracks the
current lifecycle state. | | Optional: \{\} <br /> |
| `lastLifecycleImage` _string_ | Last image (repository:tag) that
successfully completed the lifecycle.<br />Used to detect image changes on
subsequent reconciles. | | Optional: \{\} <br /> |
-| `version` _string_ | | | Optional: \{\} <br /> |
+| `tag` _string_ | Tag is the resolved image tag currently reconciled. | |
Optional: \{\} <br /> |
| `configChecksum` _string_ | | | Optional: \{\} <br /> |
| `phase` _string_ | High-level phase. | | Enum: [Initializing Upgrading
Running Degraded Suspended Blocked AwaitingApproval] <br />Optional: \{\} <br
/> |
@@ -1157,8 +1157,8 @@ _Appears in:_
| Field | Description | Default | Validation |
| --- | --- | --- | --- |
-| `fromVersion` _string_ | | | Optional: \{\} <br /> |
-| `toVersion` _string_ | | | Optional: \{\} <br /> |
+| `fromTag` _string_ | FromTag is the image tag previously reconciled. | |
Optional: \{\} <br /> |
+| `toTag` _string_ | ToTag is the image tag being reconciled. | | Optional:
\{\} <br /> |
| `approvalToken` _string_ | ApprovalToken is the annotation value required to
approve this exact upgrade transition. | | Optional: \{\} <br /> |
| `startedAt`
_[Time](https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Time)_ | | |
Optional: \{\} <br /> |
diff --git a/docs/reference/releases.md b/docs/reference/releases.md
index 894bfe3..be94100 100644
--- a/docs/reference/releases.md
+++ b/docs/reference/releases.md
@@ -26,15 +26,19 @@ releases.
### Changed
+- **Breaking:** renamed the "version" status fields to "tag". `status.version`
+ → `status.tag` (the `kubectl get` column is renamed **Version** → **Tag**),
+ and `status.lifecycle.upgrade.fromVersion`/`toVersion` → `fromTag`/`toTag`.
+ No behavior change.
- **Breaking:** downgrade blocking is removed. Any change to the lifecycle
image
tag now re-runs the migrate task (`superset db upgrade`) regardless of
direction — the operator no longer performs semver comparison or sets
- `status.phase: Blocked` on a version decrease, matching the official Superset
- Helm chart. The migrate task only runs `superset db upgrade` (Superset's down
- migrations are poorly tested and often break, so the operator never runs
- them), so take a database backup before an upgrade if you may need to revert.
- The `direction` field is removed from `status.lifecycle.upgrade`, and the
- `VersionComparisonSkipped` warning event no longer fires.
+ `status.phase: Blocked` on a version decrease. The migrate task only runs
+ `superset db upgrade` (Superset's down migrations are poorly tested and often
+ break, so the operator never runs them), so take a database backup before an
+ upgrade if you may need to revert. The `direction` field is removed from
+ `status.lifecycle.upgrade`, and the `VersionComparisonSkipped` warning event
+ no longer fires.
- **Breaking:** the lifecycle `clone` task is renamed to `seed`. Rename
`spec.lifecycle.clone` to `spec.lifecycle.seed` (and its `postCloneSQL` field
to `postSeedSQL`) in your Superset resources. The task Job name suffix
changes
diff --git a/docs/user-guide/lifecycle.md b/docs/user-guide/lifecycle.md
index 6c17187..b9cd069 100644
--- a/docs/user-guide/lifecycle.md
+++ b/docs/user-guide/lifecycle.md
@@ -52,7 +52,7 @@ Each task has hardcoded trigger inputs — what it watches for
changes:
| Task | Watches | Re-runs when... |
|------|---------|-----------------|
-| Seed | `trigger` field, `cronSchedule` tick, source config, excludes, target
Superset image | Trigger value changes, schedule tick boundary crossed, source
DB config changes, or target image changes (so a downgrade triggers a fresh
seed before migrate sees the older schema) |
+| Seed | `trigger` field, `cronSchedule` tick, source config, excludes, target
Superset image | Trigger value changes, schedule tick boundary crossed, source
DB config changes, or the target image changes (so the data set is re-seeded
before migrate runs against it) |
| Migrate | Image (resolved lifecycle image), `metastore.createDatabase` flag
| Image tag or repository changes, or `createDatabase` is toggled |
| Rotate | `trigger` field, `secretKeyFrom` ref, `previousSecretKeyFrom` ref |
Secret key references change or trigger value changes |
| Init | Config checksum (rendered Python config) | Any config-affecting field
changes |
@@ -174,23 +174,20 @@ You can monitor the upgrade status with:
kubectl get superset my-superset -o jsonpath='{.status.lifecycle}'
```
-### Version changes and downgrades
+### Changing the image tag
-Any change to the lifecycle image tag re-runs the migrate task
-(`superset db upgrade`), regardless of whether the new version is higher or
-lower than the previous one. The operator does not compare versions or block
-downgrades. This matches the behavior of the official Superset Helm chart,
which
-runs `superset db upgrade` on every upgrade.
+Any change to the resolved lifecycle image tag re-runs the migrate task
+(`superset db upgrade`), whether the new tag is a higher or lower version. The
+operator does not compare versions — it runs `superset db upgrade` on every
+image change.
-The migrate task only ever runs `superset db upgrade`. Superset does provide
-`superset db downgrade`, but its down migrations are poorly tested and often
-break, so the operator never runs them — pinning back to an older image re-runs
-the forward migration rather than reversing the schema. You are responsible for
-ensuring the database is compatible with the target version (for example, by
-restoring a backup taken before the upgrade). Allowing the change means a
-deployment that needs to revert after a failed upgrade is never stranded in a
-blocked state. Take a database backup before every migration so a known-good
-dump exists if you need to revert.
+Migrate only ever runs `superset db upgrade`; the operator never runs
+`superset db downgrade` (Superset's down migrations are poorly tested and often
+break). So pinning back to an older image re-runs the forward migration rather
+than reversing the schema — you are responsible for ensuring the database is
+compatible with the target image, for example by restoring a backup taken
+before the upgrade. Take a backup before every upgrade so you can revert if
+needed.
## Drain Behavior
@@ -694,8 +691,8 @@ Migrate is image/schema-version driven and intentionally
ignores feature/config
changes — a config tweak does not re-run migrations. Init is the
config-sensitive task: rendered `superset_config.py` changes propagate here.
Seed tracks both the source connection identity and the *target* Superset
-image, so a staging image change (including a downgrade) triggers a fresh seed
-before migrations re-run. Rotate fires on secret-key transitions.
+image, so a staging image change triggers a fresh seed before migrations
+re-run. Rotate fires on secret-key transitions.
**What checksums do NOT cover:** checksums hash *task-semantic* inputs only.
Pod-level fields like resource requests/limits, node selectors, tolerations,
@@ -773,7 +770,7 @@ Task Job names are deterministic: `{parentName}-{taskType}`
(e.g. `my-superset-m
| Phase | Meaning |
|---|---|
| `Initializing` | First deployment — lifecycle tasks running for the first
time |
-| `Upgrading` | Image change detected — lifecycle tasks running against new
version |
+| `Upgrading` | Image tag change detected — lifecycle tasks running against
the new image |
| `Blocked` | Configuration error (e.g. an invalid `seed.cronSchedule`) —
lifecycle tasks will not run until corrected |
| `AwaitingApproval` | Supervised upgrade mode — waiting for the target-bound
approval annotation before proceeding |
diff --git a/docs/user-guide/migration.md b/docs/user-guide/migration.md
index d2909fe..42d93d4 100644
--- a/docs/user-guide/migration.md
+++ b/docs/user-guide/migration.md
@@ -219,6 +219,14 @@ drain running components first (scale to zero), then
components are recreated
once the pipeline completes; enable `spec.lifecycle.maintenancePage` to serve a
holding page during the drain. See [Lifecycle](lifecycle.md) for the full
model.
+**Execution differs too.** The chart's init hook (`helm.sh/hook:
+post-install,post-upgrade`) re-runs `superset db upgrade` and `superset init`
on
+*every* `helm upgrade`, even a no-op re-apply. The operator instead runs each
+task only when its inputs change: migrate on an image tag change, init on a tag
+or rendered-config change, and the whole pipeline cascades when an upstream
task
+re-runs. A re-apply that changes nothing runs nothing — so it never
+unnecessarily drains components or re-runs migrations.
+
| Helm chart value | Operator equivalent | Notes |
|---|---|---|
| `init.enabled` | `spec.lifecycle.disabled`, or per-task `disabled` |
Lifecycle is enabled by default (even when `spec.lifecycle` is unset). Set
`lifecycle.disabled: true` to skip everything, or disable a single task with
`<task>.disabled: true`. |
diff --git a/internal/controller/lifecycle.go b/internal/controller/lifecycle.go
index 64a5bc3..a965d54 100644
--- a/internal/controller/lifecycle.go
+++ b/internal/controller/lifecycle.go
@@ -438,15 +438,15 @@ func (r *SupersetReconciler) checkUpgradeGates(
// migrations are poorly tested and frequently break, so the operator
does
// not attempt to run them — pinning back to an older image just
re-runs the
// forward migration. Blocking the change instead strands deployments
that
- // need to pin back after a failed upgrade. Matching the official
Superset
- // Helm chart, the operator runs the migration on every change and
relies on
- // the (optional) pre-upgrade backup as the safety net.
+ // need to pin back after a failed upgrade. The operator runs the
migration
+ // on every change and relies on the (optional) pre-upgrade backup as
the
+ // safety net.
contextMatches :=
upgradeContextMatches(superset.Status.Lifecycle.Upgrade, oldTag, newTag,
approvalToken)
if !contextMatches {
superset.Status.Lifecycle.Upgrade =
&supersetv1alpha1.UpgradeContext{
- FromVersion: oldTag,
- ToVersion: newTag,
+ FromTag: oldTag,
+ ToTag: newTag,
ApprovalToken: approvalToken,
StartedAt: nowPtr(),
}
@@ -460,8 +460,8 @@ func (r *SupersetReconciler) checkUpgradeGates(
setCondition(&superset.Status.Conditions,
supersetv1alpha1.ConditionTypeLifecycleComplete,
metav1.ConditionFalse, "AwaitingApproval",
fmt.Sprintf("Upgrade from %s to %s detected.
Approve with: kubectl annotate superset %s %s=%s",
-
superset.Status.Lifecycle.Upgrade.FromVersion,
-
superset.Status.Lifecycle.Upgrade.ToVersion,
+
superset.Status.Lifecycle.Upgrade.FromTag,
+ superset.Status.Lifecycle.Upgrade.ToTag,
superset.Name,
annotationApproveUpgrade, approvalToken),
superset.Generation)
superset.Status.Phase = phaseAwaitingApproval
@@ -475,13 +475,13 @@ func (r *SupersetReconciler) checkUpgradeGates(
func upgradeContextMatches(
upgrade *supersetv1alpha1.UpgradeContext,
- fromVersion string,
- toVersion string,
+ fromTag string,
+ toTag string,
approvalToken string,
) bool {
return upgrade != nil &&
- upgrade.FromVersion == fromVersion &&
- upgrade.ToVersion == toVersion &&
+ upgrade.FromTag == fromTag &&
+ upgrade.ToTag == toTag &&
upgrade.ApprovalToken == approvalToken
}
diff --git a/internal/controller/lifecycle_pipeline_test.go
b/internal/controller/lifecycle_pipeline_test.go
index 9cececa..df2520d 100644
--- a/internal/controller/lifecycle_pipeline_test.go
+++ b/internal/controller/lifecycle_pipeline_test.go
@@ -272,7 +272,7 @@ func TestFinalizeLifecycle(t *testing.T) {
superset := &supersetv1alpha1.Superset{
Spec: supersetv1alpha1.SupersetSpec{WebServer:
&supersetv1alpha1.WebServerComponentSpec{}},
Status: supersetv1alpha1.SupersetStatus{Lifecycle:
&supersetv1alpha1.LifecycleStatus{
- Upgrade:
&supersetv1alpha1.UpgradeContext{FromVersion: "1", ToVersion: "2"},
+ Upgrade:
&supersetv1alpha1.UpgradeContext{FromTag: "1", ToTag: "2"},
}},
}
r := &SupersetReconciler{Recorder: events.NewFakeRecorder(10)}
@@ -333,7 +333,7 @@ func TestCheckUpgradeGates(t *testing.T) {
assert.False(t, gated)
// Upgrade context recorded for the in-flight upgrade.
require.NotNil(t, s.Status.Lifecycle.Upgrade)
- assert.Equal(t, "2.0.0", s.Status.Lifecycle.Upgrade.FromVersion)
- assert.Equal(t, "3.0.0", s.Status.Lifecycle.Upgrade.ToVersion)
+ assert.Equal(t, "2.0.0", s.Status.Lifecycle.Upgrade.FromTag)
+ assert.Equal(t, "3.0.0", s.Status.Lifecycle.Upgrade.ToTag)
})
}
diff --git a/internal/controller/lifecycle_settle_test.go
b/internal/controller/lifecycle_settle_test.go
index 90be6e0..11babfd 100644
--- a/internal/controller/lifecycle_settle_test.go
+++ b/internal/controller/lifecycle_settle_test.go
@@ -154,8 +154,8 @@ func
TestCheckUpgradeGates_StaleApprovalDoesNotApproveChangedTarget(t *testing.T
Status: supersetv1alpha1.SupersetStatus{
Lifecycle: &supersetv1alpha1.LifecycleStatus{
Upgrade: &supersetv1alpha1.UpgradeContext{
- FromVersion: "1.0.0",
- ToVersion: "1.1.0",
+ FromTag: "1.0.0",
+ ToTag: "1.1.0",
ApprovalToken: oldToken,
},
},
@@ -167,7 +167,7 @@ func
TestCheckUpgradeGates_StaleApprovalDoesNotApproveChangedTarget(t *testing.T
if !gated {
t.Fatal("expected stale approval token to keep the changed
target gated")
}
- if got := superset.Status.Lifecycle.Upgrade.ToVersion; got != "1.2.0" {
+ if got := superset.Status.Lifecycle.Upgrade.ToTag; got != "1.2.0" {
t.Fatalf("expected upgrade context to move to 1.2.0, got %q",
got)
}
if got := superset.Status.Lifecycle.Upgrade.ApprovalToken; got !=
newToken {
diff --git a/internal/controller/status.go b/internal/controller/status.go
index 4022f9e..529bad7 100644
--- a/internal/controller/status.go
+++ b/internal/controller/status.go
@@ -109,7 +109,7 @@ func removeCondition(conditions *[]metav1.Condition,
conditionType string) {
func (r *SupersetReconciler) updateStatus(ctx context.Context, superset
*supersetv1alpha1.Superset, origSuperset *supersetv1alpha1.Superset) error {
superset.Status.ObservedGeneration = superset.Generation
- superset.Status.Version = superset.Spec.Image.Tag
+ superset.Status.Tag = superset.Spec.Image.Tag
if superset.Status.Components == nil {
superset.Status.Components =
&supersetv1alpha1.ComponentStatusMap{}
@@ -142,7 +142,7 @@ func (r *SupersetReconciler) updateStatus(ctx
context.Context, superset *superse
func (r *SupersetReconciler) updateLifecycleComponentStatus(ctx
context.Context, superset *supersetv1alpha1.Superset, configChecksum string) {
_ = ctx
superset.Status.ObservedGeneration = superset.Generation
- superset.Status.Version = superset.Spec.Image.Tag
+ superset.Status.Tag = superset.Spec.Image.Tag
superset.Status.ConfigChecksum = configChecksum
if superset.Status.Components == nil {
diff --git a/test/e2e/superset_journey_test.go
b/test/e2e/superset_journey_test.go
index 045e142..4cc4a7a 100644
--- a/test/e2e/superset_journey_test.go
+++ b/test/e2e/superset_journey_test.go
@@ -268,8 +268,8 @@ spec:
By("verifying the upgrade is awaiting approval")
expectJSONPath("superset", crName, "{.status.lifecycle.phase}",
"AwaitingApproval", time.Minute)
- expectJSONPath("superset", crName,
"{.status.lifecycle.upgrade.fromVersion}", "6.0.0", time.Minute)
- expectJSONPath("superset", crName,
"{.status.lifecycle.upgrade.toVersion}", "6.1.0", time.Minute)
+ expectJSONPath("superset", crName,
"{.status.lifecycle.upgrade.fromTag}", "6.0.0", time.Minute)
+ expectJSONPath("superset", crName,
"{.status.lifecycle.upgrade.toTag}", "6.1.0", time.Minute)
By("approving the supervised upgrade with the recorded token")
token, err := jsonPath("superset", crName,
"{.status.lifecycle.upgrade.approvalToken}")