Skip to content

Commit

Permalink
Remove old api version from the SSP CRD on upgrade
Browse files Browse the repository at this point in the history
Since version 1.10, SSP moved to a new api version - v1beta2.
In latest release, SSP completely removed the old API v1beta1 from their CRD.
This might result in an upgrade issue with OLM, if the cluster has initially started with version 1.9 or below.
This PR removes the old SSP api version v1beta1 from the storedVersions list in the SSP CRD status, to allow a smooth upgrade to 1.14.0.

Signed-off-by: Oren Cohen <[email protected]>
  • Loading branch information
orenc1 committed Mar 6, 2025
1 parent 8ff9035 commit 2551548
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions controllers/hyperconverged/hyperconverged_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"cmp"
"context"
"fmt"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"os"
"reflect"
"slices"
Expand Down Expand Up @@ -399,6 +400,12 @@ func (r *ReconcileHyperConverged) handleUpgrade(req *common.HcoRequest) (*reconc
return &reconcile.Result{Requeue: true}, err
}

sspCrd := "ssps.ssp.kubevirt.io"
sspApiVersionToRemove := "v1beta1"
if err = r.removeOldSspApi(req, sspCrd, sspApiVersionToRemove); err != nil {
return &reconcile.Result{Requeue: false}, err
}

if modified {
r.updateConditions(req)
return &reconcile.Result{Requeue: true}, nil
Expand Down Expand Up @@ -1041,6 +1048,33 @@ func (r *ReconcileHyperConverged) migrateBeforeUpgrade(req *common.HcoRequest) (
return upgradePatched, nil
}

func (r *ReconcileHyperConverged) removeOldSspApi(req *common.HcoRequest, crdName, removedApiVersion string) error {
var crd apiextensionsv1.CustomResourceDefinition
if err := r.client.Get(req.Ctx, types.NamespacedName{Name: crdName}, &crd); err != nil {
req.Logger.Error(err, fmt.Sprintf("unable to get %s CRD", crdName))
return err
}

if !slices.Contains(crd.Status.StoredVersions, removedApiVersion) {
return nil
}
var newStoredVersions []string
for _, ver := range crd.Status.StoredVersions {
if ver == removedApiVersion {
continue
}
newStoredVersions = append(newStoredVersions, ver)
}

crd.Status.StoredVersions = newStoredVersions
if err := r.client.Status().Update(req.Ctx, &crd); err != nil {
req.Logger.Error(err, fmt.Sprintf("failed to remove %v from status of CRD %v", removedApiVersion, crdName))
return err
}
req.Logger.Info(fmt.Sprintf("%s has been removed from the CRD %v stored versions", removedApiVersion, crdName))
return nil
}

func (r *ReconcileHyperConverged) applyUpgradePatches(req *common.HcoRequest) (bool, error) {
modified := false

Expand Down

0 comments on commit 2551548

Please sign in to comment.