From b49a1bc61015903359690103d2dad3d5cd2c34e7 Mon Sep 17 00:00:00 2001 From: Edson Tirelli Date: Wed, 26 Jul 2023 20:52:10 -0400 Subject: [PATCH] Splitting distributed workflows component into codeflare and ray. Fixes #369 --- .../v1alpha1/datasciencecluster_types.go | 10 ++- .../v1alpha1/zz_generated.deepcopy.go | 3 +- ...er.opendatahub.io_datascienceclusters.yaml | 22 ++++-- ...atahub-operator.clusterserviceversion.yaml | 9 ++- components/codeflare/codeflare.go | 54 +++++++++++++++ .../distributedworkloads.go | 68 ------------------- components/ray/ray.go | 52 ++++++++++++++ ...er.opendatahub.io_datascienceclusters.yaml | 22 ++++-- .../datasciencecluster_controller.go | 66 +++++++++--------- .../dscinitialization_controller.go | 1 + pkg/deploy/deploy.go | 7 +- tests/e2e/dsc_creation_test.go | 11 +-- tests/e2e/dsc_deletion_test.go | 7 +- tests/e2e/helper_test.go | 7 +- 14 files changed, 207 insertions(+), 132 deletions(-) create mode 100644 components/codeflare/codeflare.go delete mode 100644 components/distributedworkloads/distributedworkloads.go create mode 100644 components/ray/ray.go diff --git a/apis/datasciencecluster/v1alpha1/datasciencecluster_types.go b/apis/datasciencecluster/v1alpha1/datasciencecluster_types.go index ffa75d8fc9b..3bfcdccfb85 100644 --- a/apis/datasciencecluster/v1alpha1/datasciencecluster_types.go +++ b/apis/datasciencecluster/v1alpha1/datasciencecluster_types.go @@ -17,8 +17,9 @@ limitations under the License. package v1alpha1 import ( - "github.com/opendatahub-io/opendatahub-operator/v2/components/distributedworkloads" + "github.com/opendatahub-io/opendatahub-operator/v2/components/codeflare" "github.com/opendatahub-io/opendatahub-operator/v2/components/kserve" + "github.com/opendatahub-io/opendatahub-operator/v2/components/ray" conditionsv1 "github.com/openshift/custom-resource-status/conditions/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -52,8 +53,11 @@ type Components struct { // Kserve component configuration Kserve kserve.Kserve `json:"kserve,omitempty"` - // DistributeWorkloads component configuration - DistributeWorkloads distributedworkloads.DistributedWorkloads `json:"distributedWorkloads,omitempty"` + // CodeFlare component configuration + CodeFlare codeflare.CodeFlare `json:"codeflare,omitempty"` + + // Ray component configuration + Ray ray.Ray `json:"ray,omitempty"` } // DataScienceClusterStatus defines the observed state of DataScienceCluster diff --git a/apis/datasciencecluster/v1alpha1/zz_generated.deepcopy.go b/apis/datasciencecluster/v1alpha1/zz_generated.deepcopy.go index 043df75ed7e..8c03c78c432 100644 --- a/apis/datasciencecluster/v1alpha1/zz_generated.deepcopy.go +++ b/apis/datasciencecluster/v1alpha1/zz_generated.deepcopy.go @@ -35,7 +35,8 @@ func (in *Components) DeepCopyInto(out *Components) { in.ModelMeshServing.DeepCopyInto(&out.ModelMeshServing) in.DataSciencePipelines.DeepCopyInto(&out.DataSciencePipelines) in.Kserve.DeepCopyInto(&out.Kserve) - in.DistributeWorkloads.DeepCopyInto(&out.DistributeWorkloads) + in.CodeFlare.DeepCopyInto(&out.CodeFlare) + in.Ray.DeepCopyInto(&out.Ray) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Components. diff --git a/bundle/manifests/datasciencecluster.opendatahub.io_datascienceclusters.yaml b/bundle/manifests/datasciencecluster.opendatahub.io_datascienceclusters.yaml index 1383ad74ff1..45fa2c2172d 100644 --- a/bundle/manifests/datasciencecluster.opendatahub.io_datascienceclusters.yaml +++ b/bundle/manifests/datasciencecluster.opendatahub.io_datascienceclusters.yaml @@ -38,8 +38,8 @@ spec: components: description: Override and fine tune specific component configurations. properties: - dashboard: - description: Dashboard component configuration + codeflare: + description: CodeFlare component configuration properties: enabled: description: Set to "true" to enable component, "false" to @@ -48,8 +48,8 @@ spec: required: - enabled type: object - datasciencepipelines: - description: DataServicePipeline component configuration + dashboard: + description: Dashboard component configuration properties: enabled: description: Set to "true" to enable component, "false" to @@ -58,8 +58,8 @@ spec: required: - enabled type: object - distributedWorkloads: - description: DistributeWorkloads component configuration + datasciencepipelines: + description: DataServicePipeline component configuration properties: enabled: description: Set to "true" to enable component, "false" to @@ -88,6 +88,16 @@ spec: required: - enabled type: object + ray: + description: Ray component configuration + properties: + enabled: + description: Set to "true" to enable component, "false" to + disable component. A disabled component will not be installed. + type: boolean + required: + - enabled + type: object workbenches: description: Workbenches component configuration properties: diff --git a/bundle/manifests/opendatahub-operator.clusterserviceversion.yaml b/bundle/manifests/opendatahub-operator.clusterserviceversion.yaml index a1a3dced63c..f01a56ff233 100644 --- a/bundle/manifests/opendatahub-operator.clusterserviceversion.yaml +++ b/bundle/manifests/opendatahub-operator.clusterserviceversion.yaml @@ -9,6 +9,9 @@ metadata: "kind": "OdhQuickStart", "metadata": { "annotations": { + "internal.config.kubernetes.io/previousKinds": "OdhQuickStart", + "internal.config.kubernetes.io/previousNames": "create-jupyter-notebook", + "internal.config.kubernetes.io/previousNamespaces": "default", "opendatahub.io/categories": "Getting started,Notebook environments" }, "labels": { @@ -167,7 +170,7 @@ metadata: operators.operatorframework.io/internal-objects: '[dscinitialization.opendatahub.io]' operators.operatorframework.io/project_layout: go.kubebuilder.io/v3 repository: https://github.com/opendatahub-io/opendatahub-operator - name: opendatahub-operator.v2.0.0 + name: opendatahub-operator.v0.0.6 namespace: placeholder spec: apiservicedefinitions: {} @@ -414,7 +417,7 @@ spec: - --leader-elect command: - /manager - image: REPLACE_IMAGE:latest + image: quay.io/etirelli/opendatahub-operator:dev-0.0.6 imagePullPolicy: Always livenessProbe: httpGet: @@ -506,4 +509,4 @@ spec: maturity: alpha provider: name: ODH - version: 2.0.0 + version: 0.0.6 diff --git a/components/codeflare/codeflare.go b/components/codeflare/codeflare.go new file mode 100644 index 00000000000..1f4a564f587 --- /dev/null +++ b/components/codeflare/codeflare.go @@ -0,0 +1,54 @@ +package codeflare + +import ( + "github.com/opendatahub-io/opendatahub-operator/v2/components" + "github.com/opendatahub-io/opendatahub-operator/v2/pkg/deploy" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +const ( + ComponentName = "codeflare" + CodeflarePath = deploy.DefaultManifestPath + "/" + "codeflare-stack" + "/base" +) + +var imageParamMap = map[string]string{} + +type CodeFlare struct { + components.Component `json:""` +} + +func (d *CodeFlare) SetImageParamsMap(imageMap map[string]string) map[string]string { + imageParamMap = imageMap + return imageParamMap +} + +func (d *CodeFlare) GetComponentName() string { + return ComponentName +} + +// Verifies that CodeFlare implements ComponentInterface +var _ components.ComponentInterface = (*CodeFlare)(nil) + +func (d *CodeFlare) ReconcileComponent(owner metav1.Object, client client.Client, scheme *runtime.Scheme, enabled bool, namespace string) error { + + // Update image parameters + if err := deploy.ApplyImageParams(CodeflarePath, imageParamMap); err != nil { + return err + } + + // Deploy Codeflare + err := deploy.DeployManifestsFromPath(owner, client, ComponentName, + CodeflarePath, + namespace, + scheme, enabled) + + return err + +} + +func (in *CodeFlare) DeepCopyInto(out *CodeFlare) { + *out = *in + out.Component = in.Component +} diff --git a/components/distributedworkloads/distributedworkloads.go b/components/distributedworkloads/distributedworkloads.go deleted file mode 100644 index 57762057bd8..00000000000 --- a/components/distributedworkloads/distributedworkloads.go +++ /dev/null @@ -1,68 +0,0 @@ -package distributedworkloads - -import ( - "github.com/opendatahub-io/opendatahub-operator/v2/components" - "github.com/opendatahub-io/opendatahub-operator/v2/pkg/deploy" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -const ( - ComponentName = "distributed-workloads" - CodeflarePath = deploy.DefaultManifestPath + "/" + "codeflare-stack" + "/base" - RayPath = deploy.DefaultManifestPath + "/" + "ray/operator" + "/base" -) - -var imageParamMap = map[string]string{} - -type DistributedWorkloads struct { - components.Component `json:""` -} - -func (d *DistributedWorkloads) SetImageParamsMap(imageMap map[string]string) map[string]string { - imageParamMap = imageMap - return imageParamMap -} - -func (d *DistributedWorkloads) GetComponentName() string { - return ComponentName -} - -// Verifies that Distributed Workloads implements ComponentInterface -var _ components.ComponentInterface = (*DistributedWorkloads)(nil) - -func (d *DistributedWorkloads) ReconcileComponent(owner metav1.Object, client client.Client, scheme *runtime.Scheme, enabled bool, namespace string) error { - - // Update image parameters - if err := deploy.ApplyImageParams(CodeflarePath, imageParamMap); err != nil { - return err - } - - // Deploy Codeflare - err := deploy.DeployManifestsFromPath(owner, client, ComponentName, - CodeflarePath, - namespace, - scheme, enabled) - - if err != nil { - return err - } - - // Update image parameters - if err := deploy.ApplyImageParams(RayPath, imageParamMap); err != nil { - return err - } - // Deploy Ray Operator - err = deploy.DeployManifestsFromPath(owner, client, ComponentName, - RayPath, - namespace, - scheme, enabled) - return err - -} - -func (in *DistributedWorkloads) DeepCopyInto(out *DistributedWorkloads) { - *out = *in - out.Component = in.Component -} diff --git a/components/ray/ray.go b/components/ray/ray.go new file mode 100644 index 00000000000..d749e3816a7 --- /dev/null +++ b/components/ray/ray.go @@ -0,0 +1,52 @@ +package ray + +import ( + "github.com/opendatahub-io/opendatahub-operator/v2/components" + "github.com/opendatahub-io/opendatahub-operator/v2/pkg/deploy" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +const ( + ComponentName = "ray" + RayPath = deploy.DefaultManifestPath + "/" + "ray/operator" + "/base" +) + +var imageParamMap = map[string]string{} + +type Ray struct { + components.Component `json:""` +} + +func (d *Ray) SetImageParamsMap(imageMap map[string]string) map[string]string { + imageParamMap = imageMap + return imageParamMap +} + +func (d *Ray) GetComponentName() string { + return ComponentName +} + +// Verifies that Ray implements ComponentInterface +var _ components.ComponentInterface = (*Ray)(nil) + +func (d *Ray) ReconcileComponent(owner metav1.Object, client client.Client, scheme *runtime.Scheme, enabled bool, namespace string) error { + + // Update image parameters + if err := deploy.ApplyImageParams(RayPath, imageParamMap); err != nil { + return err + } + // Deploy Ray Operator + err := deploy.DeployManifestsFromPath(owner, client, ComponentName, + RayPath, + namespace, + scheme, enabled) + return err + +} + +func (in *Ray) DeepCopyInto(out *Ray) { + *out = *in + out.Component = in.Component +} diff --git a/config/crd/bases/datasciencecluster.opendatahub.io_datascienceclusters.yaml b/config/crd/bases/datasciencecluster.opendatahub.io_datascienceclusters.yaml index cbcd29fa2e0..e0c9af96c2c 100644 --- a/config/crd/bases/datasciencecluster.opendatahub.io_datascienceclusters.yaml +++ b/config/crd/bases/datasciencecluster.opendatahub.io_datascienceclusters.yaml @@ -39,8 +39,8 @@ spec: components: description: Override and fine tune specific component configurations. properties: - dashboard: - description: Dashboard component configuration + codeflare: + description: CodeFlare component configuration properties: enabled: description: Set to "true" to enable component, "false" to @@ -49,8 +49,8 @@ spec: required: - enabled type: object - datasciencepipelines: - description: DataServicePipeline component configuration + dashboard: + description: Dashboard component configuration properties: enabled: description: Set to "true" to enable component, "false" to @@ -59,8 +59,8 @@ spec: required: - enabled type: object - distributedWorkloads: - description: DistributeWorkloads component configuration + datasciencepipelines: + description: DataServicePipeline component configuration properties: enabled: description: Set to "true" to enable component, "false" to @@ -89,6 +89,16 @@ spec: required: - enabled type: object + ray: + description: Ray component configuration + properties: + enabled: + description: Set to "true" to enable component, "false" to + disable component. A disabled component will not be installed. + type: boolean + required: + - enabled + type: object workbenches: description: Workbenches component configuration properties: diff --git a/controllers/datasciencecluster/datasciencecluster_controller.go b/controllers/datasciencecluster/datasciencecluster_controller.go index 45af82a41ca..eeda9876d57 100644 --- a/controllers/datasciencecluster/datasciencecluster_controller.go +++ b/controllers/datasciencecluster/datasciencecluster_controller.go @@ -27,9 +27,9 @@ import ( dsc "github.com/opendatahub-io/opendatahub-operator/v2/apis/datasciencecluster/v1alpha1" "github.com/opendatahub-io/opendatahub-operator/v2/components" + "github.com/opendatahub-io/opendatahub-operator/v2/components/codeflare" "github.com/opendatahub-io/opendatahub-operator/v2/components/dashboard" "github.com/opendatahub-io/opendatahub-operator/v2/components/datasciencepipelines" - "github.com/opendatahub-io/opendatahub-operator/v2/components/distributedworkloads" "github.com/opendatahub-io/opendatahub-operator/v2/components/kserve" "github.com/opendatahub-io/opendatahub-operator/v2/components/modelmeshserving" "github.com/opendatahub-io/opendatahub-operator/v2/components/workbenches" @@ -115,12 +115,12 @@ func (r *DataScienceClusterReconciler) Reconcile(ctx context.Context, req ctrl.R } } - // Ensure all ommited components show up as explicitly disabled - instance, err = r.updateComponents(instance) - if err != nil { - _ = r.reportError(err, instance, "error updating list of components in the CR") - return ctrl.Result{}, err - } + // // Ensure all ommited components show up as explicitly disabled + // instance, err = r.updateComponents(instance) + // if err != nil { + // _ = r.reportError(err, instance, "error updating list of components in the CR") + // return ctrl.Result{}, err + // } // reconcile dashboard component var val ctrl.Result @@ -157,12 +157,18 @@ func (r *DataScienceClusterReconciler) Reconcile(ctx context.Context, req ctrl.R return val, err } - // reconcile DistributedWorkloads component - if instance, val, err = r.reconcileSubComponent(instance, distributedworkloads.ComponentName, instance.Spec.Components.DistributeWorkloads.Enabled, &(instance.Spec.Components.DistributeWorkloads), ctx); err != nil { + // reconcile CodeFlare component + if instance, val, err = r.reconcileSubComponent(instance, codeflare.ComponentName, instance.Spec.Components.CodeFlare.Enabled, &(instance.Spec.Components.CodeFlare), ctx); err != nil { // no need to log any errors as this is done in the reconcileSubComponent method return val, err } + // reconcile Ray component + // if instance, val, err = r.reconcileSubComponent(instance, ray.ComponentName, instance.Spec.Components.Ray.Enabled, &(instance.Spec.Components.Ray), ctx); err != nil { + // // no need to log any errors as this is done in the reconcileSubComponent method + // return val, err + // } + // finalize reconciliation instance, err = r.updateStatus(instance, func(saved *dsc.DataScienceCluster) { status.SetCompleteCondition(&saved.Status.Conditions, status.ReconcileCompleted, "DataScienceCluster resource reconciled successfully") @@ -185,16 +191,14 @@ func (r *DataScienceClusterReconciler) reconcileSubComponent(instance *dsc.DataS // First set contidions to reflect a component is about to be reconciled instance, err := r.updateStatus(instance, func(saved *dsc.DataScienceCluster) { if enabled { - status.SetComponentCondition(&saved.Status.Conditions, componentName, status.ReconcileInit, "Component reconciliation started", corev1.ConditionUnknown) + status.SetComponentCondition(&saved.Status.Conditions, componentName, status.ReconcileInit, "Component is enabled", corev1.ConditionUnknown) } else { - status.SetComponentCondition(&saved.Status.Conditions, componentName, status.ReconcileInit, "Component removal started", corev1.ConditionUnknown) + status.SetComponentCondition(&saved.Status.Conditions, componentName, status.ReconcileInit, "Component is disabled", corev1.ConditionUnknown) } }) if err != nil { instance = r.reportError(err, instance, "failed to update DataScienceCluster conditions before reconciling "+componentName) - return instance, ctrl.Result{ - // Retry after failure until success. - RequeueAfter: time.Second * 10}, err + // try to continue with reconciliation, as further updates can fix the status } // Reconcile component @@ -288,20 +292,20 @@ func (r *DataScienceClusterReconciler) updateStatus(original *dsc.DataScienceClu return saved, err } -func (r *DataScienceClusterReconciler) updateComponents(original *dsc.DataScienceCluster) (*dsc.DataScienceCluster, error) { - saved := &dsc.DataScienceCluster{} - err := retry.RetryOnConflict(retry.DefaultRetry, func() error { - - err := r.Client.Get(context.TODO(), client.ObjectKeyFromObject(original), saved) - if err != nil { - return err - } - - // Try to update - err = r.Client.Update(context.TODO(), saved) - // Return err itself here (not wrapped inside another error) - // so that RetryOnConflict can identify it correctly. - return err - }) - return saved, err -} +// func (r *DataScienceClusterReconciler) updateComponents(original *dsc.DataScienceCluster) (*dsc.DataScienceCluster, error) { +// saved := &dsc.DataScienceCluster{} +// err := retry.RetryOnConflict(retry.DefaultRetry, func() error { + +// err := r.Client.Get(context.TODO(), client.ObjectKeyFromObject(original), saved) +// if err != nil { +// return err +// } + +// // Try to update +// err = r.Client.Update(context.TODO(), saved) +// // Return err itself here (not wrapped inside another error) +// // so that RetryOnConflict can identify it correctly. +// return err +// }) +// return saved, err +// } diff --git a/controllers/dscinitialization/dscinitialization_controller.go b/controllers/dscinitialization/dscinitialization_controller.go index 1cf6126c303..761d50dcfe5 100644 --- a/controllers/dscinitialization/dscinitialization_controller.go +++ b/controllers/dscinitialization/dscinitialization_controller.go @@ -200,6 +200,7 @@ var singletonPredicate = predicate.Funcs{ // Set to error level since it causes Panic setupLog := ctrl.Log.WithName("dscinitialization") setupLog.Error(errors.New("only single DSCInitialization instance can be created. Mismatch CreateEvent Object.GetName not to 'default'"), "Wrong name", "object", e.Object.GetName()) + return false } } diff --git a/pkg/deploy/deploy.go b/pkg/deploy/deploy.go index bceb09748ed..a37efdfd089 100644 --- a/pkg/deploy/deploy.go +++ b/pkg/deploy/deploy.go @@ -8,14 +8,15 @@ import ( "encoding/json" "fmt" "io" - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/types" "net/http" "os" "path/filepath" - ctrl "sigs.k8s.io/controller-runtime" "strings" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/types" + ctrl "sigs.k8s.io/controller-runtime" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" diff --git a/tests/e2e/dsc_creation_test.go b/tests/e2e/dsc_creation_test.go index bd6502e6074..5a8fb92eea6 100644 --- a/tests/e2e/dsc_creation_test.go +++ b/tests/e2e/dsc_creation_test.go @@ -3,11 +3,12 @@ package e2e import ( "context" "fmt" - "k8s.io/client-go/util/retry" "log" "testing" "time" + "k8s.io/client-go/util/retry" + "github.com/stretchr/testify/require" autoscalingv1 "k8s.io/api/autoscaling/v1" "k8s.io/apimachinery/pkg/api/errors" @@ -165,14 +166,14 @@ func (tc *testContext) testAllDSCApplications() error { } } - err = tc.testDSCApplication(&(tc.testDsc.Spec.Components.DistributeWorkloads)) - if tc.testDsc.Spec.Components.DistributeWorkloads.Enabled { + err = tc.testDSCApplication(&(tc.testDsc.Spec.Components.CodeFlare)) + if tc.testDsc.Spec.Components.CodeFlare.Enabled { if err != nil { - return fmt.Errorf("error validating application %v", tc.testDsc.Spec.Components.DistributeWorkloads) + return fmt.Errorf("error validating application %v", tc.testDsc.Spec.Components.CodeFlare) } } else { if err == nil { - return fmt.Errorf("error validating application %v", tc.testDsc.Spec.Components.DistributeWorkloads) + return fmt.Errorf("error validating application %v", tc.testDsc.Spec.Components.CodeFlare) } } return nil diff --git a/tests/e2e/dsc_deletion_test.go b/tests/e2e/dsc_deletion_test.go index e222bf972de..af5ba88e278 100644 --- a/tests/e2e/dsc_deletion_test.go +++ b/tests/e2e/dsc_deletion_test.go @@ -5,9 +5,10 @@ import ( "fmt" "log" + "testing" + dsc "github.com/opendatahub-io/opendatahub-operator/v2/apis/datasciencecluster/v1alpha1" "github.com/opendatahub-io/opendatahub-operator/v2/components" - "testing" "github.com/stretchr/testify/require" "k8s.io/apimachinery/pkg/api/errors" @@ -103,9 +104,9 @@ func (tc *testContext) testAllApplicationDeletion() error { return fmt.Errorf("error deleting application %v", tc.testDsc.Spec.Components.DataSciencePipelines) } - err = tc.testApplicationDeletion(&(tc.testDsc.Spec.Components.DistributeWorkloads)) + err = tc.testApplicationDeletion(&(tc.testDsc.Spec.Components.CodeFlare)) if err != nil { - return fmt.Errorf("error deleting application %v", tc.testDsc.Spec.Components.DistributeWorkloads) + return fmt.Errorf("error deleting application %v", tc.testDsc.Spec.Components.CodeFlare) } return nil } diff --git a/tests/e2e/helper_test.go b/tests/e2e/helper_test.go index 5eb29eae09c..e77152f39d9 100644 --- a/tests/e2e/helper_test.go +++ b/tests/e2e/helper_test.go @@ -2,16 +2,17 @@ package e2e import ( "context" + "log" + dsc "github.com/opendatahub-io/opendatahub-operator/v2/apis/datasciencecluster/v1alpha1" "github.com/opendatahub-io/opendatahub-operator/v2/components" + "github.com/opendatahub-io/opendatahub-operator/v2/components/codeflare" "github.com/opendatahub-io/opendatahub-operator/v2/components/dashboard" "github.com/opendatahub-io/opendatahub-operator/v2/components/datasciencepipelines" - "github.com/opendatahub-io/opendatahub-operator/v2/components/distributedworkloads" "github.com/opendatahub-io/opendatahub-operator/v2/components/kserve" "github.com/opendatahub-io/opendatahub-operator/v2/components/modelmeshserving" "github.com/opendatahub-io/opendatahub-operator/v2/components/workbenches" corev1 "k8s.io/api/core/v1" - "log" appsv1 "k8s.io/api/apps/v1" apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" @@ -81,7 +82,7 @@ func setupDSCInstance() *dsc.DataScienceCluster { Enabled: false, }, }, - DistributeWorkloads: distributedworkloads.DistributedWorkloads{ + CodeFlare: codeflare.CodeFlare{ Component: components.Component{ Enabled: false, },