diff --git a/pkg/deploy/deploy.go b/pkg/deploy/deploy.go index 02ad79e76482..3892a79d2273 100644 --- a/pkg/deploy/deploy.go +++ b/pkg/deploy/deploy.go @@ -271,7 +271,8 @@ func manageResource(ctx context.Context, cli client.Client, obj *unstructured.Un if apierrs.IsNotFound(err) { // Set the owner reference for garbage collection // Skip set on CRD, e.g. we should not delete notebook CRD if we delete DSC instance - if found.GetKind() != "CustomResourceDefinition" { + // Skip on OdhDashboardConfig CR, because we want user to be able to update it + if found.GetKind() != "CustomResourceDefinition" || found.GetKind() != "OdhDashboardConfig" { if err = ctrl.SetControllerReference(owner, metav1.Object(obj), cli.Scheme()); err != nil { return err } diff --git a/pkg/upgrade/upgrade.go b/pkg/upgrade/upgrade.go index 2675fa29c375..c81888b4e7f1 100644 --- a/pkg/upgrade/upgrade.go +++ b/pkg/upgrade/upgrade.go @@ -293,6 +293,10 @@ func UpdateFromLegacyVersion(cli client.Client, platform deploy.Platform, appNS if err := deleteResource(cli, montNamespace, "statefulset"); err != nil { return err } + // only for downstream since ODH has a different way to create this CR by dashboard + if err := unsetOwnerReference(cli, "odh-dashboard-config", appNS); err != nil { + return err + } fmt.Println("creating default DSC CR") if err := CreateDefaultDSC(context.TODO(), cli); err != nil { return err @@ -331,6 +335,10 @@ func UpdateFromLegacyVersion(cli client.Client, platform deploy.Platform, appNS if err := deleteResource(cli, montNamespace, "statefulset"); err != nil { return err } + // only for downstream since ODH has a different way to create this CR by dashboard + if err := unsetOwnerReference(cli, "odh-dashboard-config", appNS); err != nil { + return err + } // create default DSC if err = CreateDefaultDSC(context.TODO(), cli); err != nil { return err @@ -561,6 +569,34 @@ func removOdhApplicationsCR(ctx context.Context, cli client.Client, gvk schema.G return nil } +func unsetOwnerReference(cli client.Client, instanceName string, applicationNS string) error { + OdhDashboardConfig := schema.GroupVersionKind{ + Group: "opendatahub.io", + Version: "v1alpha", + Kind: "OdhDashboardConfig", + } + crd := &apiextv1.CustomResourceDefinition{} + if err := cli.Get(context.TODO(), client.ObjectKey{Name: "odhdashboardconfigs.opendatahub.io"}, crd); err != nil { + return client.IgnoreNotFound(err) + } + odhObject := &unstructured.Unstructured{} + odhObject.SetGroupVersionKind(OdhDashboardConfig) + if err := cli.Get(context.TODO(), client.ObjectKey{ + Namespace: applicationNS, + Name: instanceName, + }, odhObject); err != nil { + return client.IgnoreNotFound(err) + } + if odhObject.GetOwnerReferences() != nil { + // set to nil as updates + odhObject.SetOwnerReferences(nil) + if err := cli.Update(context.TODO(), odhObject); err != nil { + return fmt.Errorf("error unset ownerreference for CR %s : %w", instanceName, err) + } + } + return nil +} + func deleteResource(cli client.Client, namespace string, resourceType string) error { // In v2, Deployment selectors use a label "app.opendatahub.io/" which is // not present in v1. Since label selectors are immutable, we need to delete the existing