Skip to content

Commit

Permalink
Update default DSC name
Browse files Browse the repository at this point in the history
  • Loading branch information
VaishnaviHire committed Nov 8, 2023
1 parent 3e65a2d commit 8b53059
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ metadata:
"app.kubernetes.io/name": "datasciencecluster",
"app.kubernetes.io/part-of": "opendatahub-operator"
},
"name": "default"
"name": "default-dsc"
},
"spec": {
"components": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: datasciencecluster.opendatahub.io/v1
kind: DataScienceCluster
metadata:
name: default
name: default-dsc
labels:
app.kubernetes.io/name: datasciencecluster
app.kubernetes.io/instance: default
Expand Down
27 changes: 6 additions & 21 deletions controllers/dscinitialization/dscinitialization_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,33 +83,18 @@ func (r *DSCInitializationReconciler) Reconcile(ctx context.Context, req ctrl.Re
return ctrl.Result{}, err
}

if len(instances.Items) > 1 {
// check if multiple instances of DSCInitialization, exit with error
message := fmt.Sprintf("only one instance of DSCInitialization object is allowed. Update existing instance name %s", req.Name)

return ctrl.Result{}, errors.New(message)
}

if len(instances.Items) == 0 {
// DSCInitialization instance not found
var instance *dsciv1.DSCInitialization
switch {
case len(instances.Items) == 0:
return ctrl.Result{}, nil
}

instance := &instances.Items[0]
if instance.Name != "default" {
message := fmt.Sprintf("Should update existing instance name %s to 'default'", instance.Name)

return ctrl.Result{}, errors.New(message)
}

if len(instances.Items) > 1 {
case len(instances.Items) == 1:
instance = &instances.Items[0]
case len(instances.Items) > 1:
message := fmt.Sprintf("only one instance of DSCInitialization object is allowed. Update existing instance name %s", req.Name)

_, _ = r.updateStatus(ctx, instance, func(saved *dsciv1.DSCInitialization) {
status.SetErrorCondition(&saved.Status.Conditions, status.DuplicateDSCInitialization, message)
saved.Status.Phase = status.PhaseError
})

return ctrl.Result{}, errors.New(message)
}

Expand Down
57 changes: 9 additions & 48 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,11 @@ limitations under the License.
package main

import (
"context"
"encoding/json"
"flag"
"os"

addonv1alpha1 "github.com/openshift/addon-operator/apis/addons/v1alpha1"
ocv1 "github.com/openshift/api/oauth/v1"
operatorv1 "github.com/openshift/api/operator/v1"
routev1 "github.com/openshift/api/route/v1"
ocuserv1 "github.com/openshift/api/user/v1"
ofapiv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"
Expand All @@ -34,10 +31,7 @@ import (
netv1 "k8s.io/api/networking/v1"
authv1 "k8s.io/api/rbac/v1"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
ctrl "sigs.k8s.io/controller-runtime"
Expand Down Expand Up @@ -162,48 +156,6 @@ func main() { //nolint:funlen
os.Exit(1)
}

// Check if user opted for disabling DSC configuration
_, disableDSCConfig := os.LookupEnv("DISABLE_DSC_CONFIG")
if !disableDSCConfig {
// Create DSCInitialization CR if it's not present
c := mgr.GetClient()
releaseDscInitialization := &dsci.DSCInitialization{
TypeMeta: metav1.TypeMeta{
Kind: "DSCInitialization",
APIVersion: "dscinitialization.opendatahub.io/v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: "default",
},
Spec: dsci.DSCInitializationSpec{
ApplicationsNamespace: dscApplicationsNamespace,
Monitoring: dsci.Monitoring{
ManagementState: operatorv1.Managed,
Namespace: dscMonitoringNamespace,
},
},
}
err = c.Create(context.TODO(), releaseDscInitialization)
switch {
case err == nil:
setupLog.Info("created DscInitialization resource")
case errors.IsAlreadyExists(err):
// Update if already exists
setupLog.Info("DscInitialization resource already exists. Updating it.")
data, err := json.Marshal(releaseDscInitialization)
if err != nil {
setupLog.Error(err, "failed to get DscInitialization custom resource data")
}
err = c.Patch(context.TODO(), releaseDscInitialization, client.RawPatch(types.ApplyPatchType, data),
client.ForceOwnership, client.FieldOwner("opendatahub-operator"))
if err != nil {
setupLog.Error(err, "failed to update DscInitialization custom resource")
}
default:
setupLog.Error(err, "failed to create DscInitialization custom resource")
os.Exit(1)
}
}
// Create new uncached client to run initial setup
setupCfg, err := config.GetConfig()
if err != nil {
Expand All @@ -223,6 +175,15 @@ func main() { //nolint:funlen
os.Exit(1)
}

// Check if user opted for disabling DSC configuration
_, disableDSCConfig := os.LookupEnv("DISABLE_DSC_CONFIG")
if !disableDSCConfig {
if err = upgrade.CreateDefaultDSCI(setupClient, platform, dscApplicationsNamespace, dscMonitoringNamespace); err != nil {
setupLog.Error(err, "unable to create initial setup for the operator")
os.Exit(1)
}
}

// Apply update from legacy operator
if err = upgrade.UpdateFromLegacyVersion(setupClient, platform); err != nil {
setupLog.Error(err, "unable to update from legacy operator version")
Expand Down
63 changes: 55 additions & 8 deletions pkg/upgrade/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package upgrade

import (
"context"
"encoding/json"
"fmt"
"os"
"strings"
Expand All @@ -14,6 +15,7 @@ import (
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apierrs "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/rest"
"sigs.k8s.io/controller-runtime/pkg/client"

Expand Down Expand Up @@ -143,20 +145,13 @@ func HasDeleteConfigMap(c client.Client) bool {
// Note: When the platform is not Managed, and a DSC instance already exists, the function doesn't re-create/update the resource.
func CreateDefaultDSC(cli client.Client, platform deploy.Platform) error {
// Set the default DSC name depending on the platform
var DSCName string
if platform == deploy.ManagedRhods || platform == deploy.SelfManagedRhods {
DSCName = "rhods"
} else {
DSCName = "default"
}

releaseDataScienceCluster := &dsc.DataScienceCluster{
TypeMeta: metav1.TypeMeta{
Kind: "DataScienceCluster",
APIVersion: "datasciencecluster.opendatahub.io/v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: DSCName,
Name: "default-dsc",
},
Spec: dsc.DataScienceClusterSpec{
Components: dsc.Components{
Expand Down Expand Up @@ -202,6 +197,58 @@ func CreateDefaultDSC(cli client.Client, platform deploy.Platform) error {
return nil
}

// createDefaultDSCI creates a default instance of DSCI
func CreateDefaultDSCI(cli client.Client, platform deploy.Platform, appNamespace, monNamespace string) error {
defaultDsciSpec := &dsci.DSCInitializationSpec{
ApplicationsNamespace: appNamespace,
Monitoring: dsci.Monitoring{
ManagementState: operatorv1.Managed,
Namespace: monNamespace,
},
}

defaultDsci := &dsci.DSCInitialization{
TypeMeta: metav1.TypeMeta{
Kind: "DSCInitialization",
APIVersion: "dscinitialization.opendatahub.io/v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: "default-dsc",
},
Spec: *defaultDsciSpec,
}

instances := &dsci.DSCInitializationList{}
if err := cli.List(context.TODO(), instances); err != nil {
return err
}

switch {
case len(instances.Items) > 1:
return fmt.Errorf("only one instance of DSCInitialization object is allowed. Please delete other instances ")
case len(instances.Items) == 1:
if platform == deploy.ManagedRhods || platform == deploy.SelfManagedRhods {
data, err := json.Marshal(defaultDsciSpec)
if err != nil {
return err
}
err = cli.Patch(context.TODO(), defaultDsci, client.RawPatch(types.ApplyPatchType, data),
client.ForceOwnership, client.FieldOwner("opendatahub-operator"))
if err != nil {
return err
}
} else {
return nil
}
case len(instances.Items) == 0:
err := cli.Create(context.TODO(), defaultDsci)
if err != nil {
return err
}
}
return nil
}

func UpdateFromLegacyVersion(cli client.Client, platform deploy.Platform) error {
// If platform is Managed, remove Kfdefs and create default dsc
if platform == deploy.ManagedRhods {
Expand Down

0 comments on commit 8b53059

Please sign in to comment.