diff --git a/pkg/binding/binding.go b/pkg/binding/binding.go index 0cb8dbf2505..c80f53b0934 100644 --- a/pkg/binding/binding.go +++ b/pkg/binding/binding.go @@ -4,11 +4,12 @@ import ( "fmt" "path/filepath" - "github.com/redhat-developer/odo/pkg/project" bindingApis "github.com/redhat-developer/service-binding-operator/apis" bindingApi "github.com/redhat-developer/service-binding-operator/apis/binding/v1alpha1" specApi "github.com/redhat-developer/service-binding-operator/apis/spec/v1alpha3" + "github.com/redhat-developer/odo/pkg/project" + "github.com/devfile/library/pkg/devfile/parser" devfilefs "github.com/devfile/library/pkg/testingutil/filesystem" "gopkg.in/yaml.v2" @@ -301,7 +302,7 @@ func (o *BindingClient) checkServiceBindingOperatorInstalled() error { func (o *BindingClient) CheckServiceBindingsInjectionDone(componentName string, appName string) (bool, error) { - deployment, err := o.kubernetesClient.GetOneDeployment(componentName, appName) + deployment, err := o.kubernetesClient.GetOneDeployment(componentName, appName, true) if err != nil { // If not deployment yet => all bindings are done if _, ok := err.(*kclient.DeploymentNotFoundError); ok { diff --git a/pkg/component/component.go b/pkg/component/component.go index 34df0ad123d..c659886e23c 100644 --- a/pkg/component/component.go +++ b/pkg/component/component.go @@ -88,7 +88,7 @@ func Exists(client kclient.ClientInterface, componentName, applicationName strin // GetOnePod gets a pod using the component and app name func GetOnePod(client kclient.ClientInterface, componentName string, appName string) (*corev1.Pod, error) { - return client.GetRunningPodFromSelector(odolabels.GetSelector(componentName, appName, odolabels.ComponentDevMode)) + return client.GetRunningPodFromSelector(odolabels.GetSelector(componentName, appName, odolabels.ComponentDevMode, false)) } // Log returns log from component @@ -212,7 +212,7 @@ func ListAllClusterComponents(client kclient.ClientInterface, namespace string) } func getResourcesForComponent(client kclient.ClientInterface, name string, namespace string) ([]unstructured.Unstructured, error) { - selector := labels.GetSelector(name, "app", labels.ComponentAnyMode) + selector := labels.GetSelector(name, "app", labels.ComponentAnyMode, false) resourceList, err := client.GetAllResourcesFromSelector(selector, namespace) if err != nil { return nil, err diff --git a/pkg/component/delete/delete.go b/pkg/component/delete/delete.go index 23881fec43f..f4539ab737c 100644 --- a/pkg/component/delete/delete.go +++ b/pkg/component/delete/delete.go @@ -5,6 +5,7 @@ import ( "path/filepath" "github.com/devfile/library/pkg/devfile/parser" + "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -36,7 +37,7 @@ func NewDeleteComponentClient(kubeClient kclient.ClientInterface) *DeleteCompone // It only returns resources not owned by another resource of the component, letting the garbage collector do its job func (do *DeleteComponentClient) ListClusterResourcesToDelete(componentName string, namespace string) ([]unstructured.Unstructured, error) { var result []unstructured.Unstructured - selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentAnyMode) + selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentAnyMode, false) list, err := do.kubeClient.GetAllResourcesFromSelector(selector, namespace) if err != nil { return nil, err @@ -90,7 +91,7 @@ func references(list []unstructured.Unstructured, ownerRef metav1.OwnerReference // ListResourcesToDeleteFromDevfile parses all the devfile components and returns a list of resources that are present on the cluster and can be deleted func (do DeleteComponentClient) ListResourcesToDeleteFromDevfile(devfileObj parser.DevfileObj, appName string, mode string) (isInnerLoopDeployed bool, resources []unstructured.Unstructured, err error) { - + var deployment *v1.Deployment if mode == odolabels.ComponentDevMode || mode == odolabels.ComponentAnyMode { // Inner Loop // Fetch the deployment of the devfile component @@ -101,7 +102,7 @@ func (do DeleteComponentClient) ListResourcesToDeleteFromDevfile(devfileObj pars return isInnerLoopDeployed, resources, fmt.Errorf("failed to get the resource %q name for component %q; cause: %w", kclient.DeploymentKind, componentName, err) } - deployment, err := do.kubeClient.GetDeploymentByName(deploymentName) + deployment, err = do.kubeClient.GetDeploymentByName(deploymentName) if err != nil && !kerrors.IsNotFound(err) { return isInnerLoopDeployed, resources, err } @@ -120,27 +121,30 @@ func (do DeleteComponentClient) ListResourcesToDeleteFromDevfile(devfileObj pars } } - if mode == odolabels.ComponentDeployMode || mode == odolabels.ComponentAnyMode { - // Outer Loop - // Parse the devfile for outerloop K8s resources - localResources, err := libdevfile.ListKubernetesComponents(devfileObj, filepath.Dir(devfileObj.Ctx.GetAbsPath())) + // Parse the devfile for K8s resources; these may belong to either innerloop or outerloop + localResources, err := libdevfile.ListKubernetesComponents(devfileObj, filepath.Dir(devfileObj.Ctx.GetAbsPath())) + if err != nil { + return isInnerLoopDeployed, resources, fmt.Errorf("failed to gather resources for deletion: %w", err) + } + for _, lr := range localResources { + var gvr *meta.RESTMapping + gvr, err = do.kubeClient.GetRestMappingFromUnstructured(lr) if err != nil { - return isInnerLoopDeployed, resources, fmt.Errorf("failed to gather resources for deletion: %w", err) + continue } - for _, lr := range localResources { - var gvr *meta.RESTMapping - gvr, err = do.kubeClient.GetRestMappingFromUnstructured(lr) - if err != nil { - continue - } - // Try to fetch the resource from the cluster; if it exists, append it to the resources list - var cr *unstructured.Unstructured - cr, err = do.kubeClient.GetDynamicResource(gvr.Resource, lr.GetName()) - if err != nil { - continue + // Try to fetch the resource from the cluster; if it exists, append it to the resources list + var cr *unstructured.Unstructured + cr, err = do.kubeClient.GetDynamicResource(gvr.Resource, lr.GetName()) + // If a specific mode is asked for, then make sure it matches with the cr's mode. + if err != nil || (mode != odolabels.ComponentAnyMode && odolabels.GetMode(cr.GetLabels()) != mode) { + if cr != nil { + klog.V(4).Infof("Ignoring resource: %s/%s; its mode(%s) does not match with the given mode(%s)", gvr.Resource.Resource, lr.GetName(), odolabels.GetMode(cr.GetLabels()), mode) + } else { + klog.V(4).Infof("Ignoring resource: %s/%s; it does not exist on the cluster", gvr.Resource.Resource, lr.GetName()) } - resources = append(resources, *cr) + continue } + resources = append(resources, *cr) } return isInnerLoopDeployed, resources, nil @@ -155,7 +159,7 @@ func (do *DeleteComponentClient) ExecutePreStopEvents(devfileObj parser.DevfileO klog.V(4).Infof("Gathering information for component: %q", componentName) klog.V(3).Infof("Checking component status for %q", componentName) - selector := odolabels.GetSelector(componentName, appName, odolabels.ComponentDevMode) + selector := odolabels.GetSelector(componentName, appName, odolabels.ComponentDevMode, false) pod, err := do.kubeClient.GetRunningPodFromSelector(selector) if err != nil { klog.V(1).Info("Component not found on the cluster.") diff --git a/pkg/component/delete/delete_test.go b/pkg/component/delete/delete_test.go index 4b0a299e13a..31e5bb3fea7 100644 --- a/pkg/component/delete/delete_test.go +++ b/pkg/component/delete/delete_test.go @@ -17,12 +17,15 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "github.com/redhat-developer/odo/pkg/kclient" - "github.com/redhat-developer/odo/pkg/labels" odolabels "github.com/redhat-developer/odo/pkg/labels" odoTestingUtil "github.com/redhat-developer/odo/pkg/testingutil" "github.com/redhat-developer/odo/pkg/util" ) +const ( + appName = "app" +) + func TestDeleteComponentClient_ListClusterResourcesToDelete(t *testing.T) { res1 := getUnstructured("dep1", "deployment", "v1", "") res2 := getUnstructured("svc1", "service", "v1", "") @@ -235,18 +238,19 @@ func TestDeleteComponentClient_DeleteResources(t *testing.T) { } func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { - const appName = "app" - const projectName = "default" const compName = "nodejs-prj1-api-abhz" - innerLoopDeploymentName, _ := util.NamespaceKubernetesObject(compName, appName) - deployment := odoTestingUtil.CreateFakeDeployment(compName) + innerLoopCoreDeploymentName, _ := util.NamespaceKubernetesObject(compName, appName) + + // innerLoopCoreDeployment is the deployment created by odo dev for the component + innerLoopCoreDeployment := odoTestingUtil.CreateFakeDeployment(compName, true) - deployedInnerLoopResource, e := kclient.ConvertK8sResourceToUnstructured(deployment) + innerLoopCoreDeploymentUnstructured, e := kclient.ConvertK8sResourceToUnstructured(innerLoopCoreDeployment) if e != nil { t.Errorf("unable to convert deployment to unstructured") } - outerLoopResource := unstructured.Unstructured{ + // outerLoopResourceUnstructured is the deployment created by odo deploy + outerLoopResourceUnstructured := unstructured.Unstructured{ Object: map[string]interface{}{ "apiVersion": "apps/v1", "kind": "Deployment", @@ -284,14 +288,18 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { }, }, } - outerLoopGVR := meta.RESTMapping{ - Resource: schema.GroupVersionResource{ - Group: "apps", - Version: "v1", - Resource: outerLoopResource.GetKind(), - }, + + // labeledOuterloopResource is the deployment with labels set + labeledOuterloopResource := *outerLoopResourceUnstructured.DeepCopy() + labeledOuterloopResource.SetLabels(odolabels.GetLabels(compName, appName, odolabels.ComponentDeployMode, false)) + + // innerLoopResourceUnstructured is the deployment that will be deployed by apply command with `odo dev` + innerLoopResourceUnstructured := *outerLoopResourceUnstructured.DeepCopy() + innerLoopResourceUnstructured.SetLabels(odolabels.GetLabels(compName, appName, odolabels.ComponentDevMode, false)) + + deploymentRESTMapping := meta.RESTMapping{ + Resource: getGVR("apps", "v1", "Deployment"), } - deployedOuterLoopResource := getUnstructured("my-component", "Deployment", "apps/v1", projectName) type fields struct { kubeClient func(ctrl *gomock.Controller) kclient.ClientInterface @@ -299,6 +307,7 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { type args struct { devfileObj parser.DevfileObj appName string + mode string } tests := []struct { name string @@ -309,17 +318,17 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { wantErr bool }{ { - name: "both innerloop and outerloop resources are pushed to the cluster", + name: "list innerloop core resource(deployment), and outerloop resources", fields: fields{ kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { kubeClient := kclient.NewMockClientInterface(ctrl) - kubeClient.EXPECT().GetDeploymentByName(innerLoopDeploymentName).Return(deployment, nil) + kubeClient.EXPECT().GetDeploymentByName(innerLoopCoreDeploymentName).Return(innerLoopCoreDeployment, nil) - kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResource).Return(&outerLoopGVR, nil) + kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResourceUnstructured).Return(&deploymentRESTMapping, nil) kubeClient.EXPECT(). - GetDynamicResource(outerLoopGVR.Resource, outerLoopResource.GetName()). - Return(&deployedOuterLoopResource, nil) + GetDynamicResource(deploymentRESTMapping.Resource, outerLoopResourceUnstructured.GetName()). + Return(&labeledOuterloopResource, nil) return kubeClient }, @@ -327,18 +336,19 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { args: args{ devfileObj: odoTestingUtil.GetTestDevfileObjFromFile("devfile-deploy.yaml"), appName: appName, + mode: odolabels.ComponentAnyMode, }, wantIsInnerLoopDeployed: true, - wantResources: []unstructured.Unstructured{deployedInnerLoopResource, deployedOuterLoopResource}, + wantResources: []unstructured.Unstructured{innerLoopCoreDeploymentUnstructured, labeledOuterloopResource}, wantErr: false, }, { - name: "no outerloop resources are present in the devfile", + name: "list innerloop core resource(deployment) only", fields: fields{ kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { kubeClient := kclient.NewMockClientInterface(ctrl) - kubeClient.EXPECT().GetDeploymentByName(innerLoopDeploymentName).Return(deployment, nil) + kubeClient.EXPECT().GetDeploymentByName(innerLoopCoreDeploymentName).Return(innerLoopCoreDeployment, nil) return kubeClient }, }, @@ -352,55 +362,89 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { return obj }(), appName: appName, + mode: odolabels.ComponentDevMode, }, wantIsInnerLoopDeployed: true, - wantResources: []unstructured.Unstructured{deployedInnerLoopResource}, + wantResources: []unstructured.Unstructured{innerLoopCoreDeploymentUnstructured}, wantErr: false, }, { - name: "only outerloop resources are deployed; innerloop resource is not found", + name: "list innerloop core resources(deployment), another innerloop resources", fields: fields{ kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { kubeClient := kclient.NewMockClientInterface(ctrl) - kubeClient.EXPECT().GetDeploymentByName(innerLoopDeploymentName). - Return(&appsv1.Deployment{}, kerrors.NewNotFound(schema.GroupResource{Group: "apps", Resource: "Deployments"}, innerLoopDeploymentName)) - kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResource).Return(&outerLoopGVR, nil) + + kubeClient.EXPECT().GetDeploymentByName(innerLoopCoreDeploymentName).Return(innerLoopCoreDeployment, nil) + + kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResourceUnstructured).Return(&deploymentRESTMapping, nil) kubeClient.EXPECT(). - GetDynamicResource(outerLoopGVR.Resource, outerLoopResource.GetName()). - Return(&deployedOuterLoopResource, nil) + GetDynamicResource(deploymentRESTMapping.Resource, outerLoopResourceUnstructured.GetName()). + Return(&innerLoopResourceUnstructured, nil) + + return kubeClient + }, + }, + args: args{ + devfileObj: func() parser.DevfileObj { + obj := odoTestingUtil.GetTestDevfileObjFromFile("devfile-composite-apply-commands.yaml") + // change the metadata name to the desired one since devfile.yaml has a different name + metadata := obj.Data.GetMetadata() + metadata.Name = compName + obj.Data.SetMetadata(metadata) + return obj + }(), + appName: appName, + mode: odolabels.ComponentDevMode, + }, + wantIsInnerLoopDeployed: true, + wantResources: []unstructured.Unstructured{innerLoopCoreDeploymentUnstructured, innerLoopResourceUnstructured}, + wantErr: false, + }, + { + name: "list outerloop resources only", + fields: fields{ + kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { + kubeClient := kclient.NewMockClientInterface(ctrl) + + kubeClient.EXPECT().GetDeploymentByName(innerLoopCoreDeploymentName). + Return(&appsv1.Deployment{}, kerrors.NewNotFound(deploymentRESTMapping.Resource.GroupResource(), innerLoopCoreDeploymentName)) + kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResourceUnstructured).Return(&deploymentRESTMapping, nil) + kubeClient.EXPECT(). + GetDynamicResource(deploymentRESTMapping.Resource, outerLoopResourceUnstructured.GetName()). + Return(&labeledOuterloopResource, nil) return kubeClient }, }, args: args{ devfileObj: odoTestingUtil.GetTestDevfileObjFromFile("devfile-deploy.yaml"), appName: appName, + mode: odolabels.ComponentAnyMode, }, wantIsInnerLoopDeployed: false, - wantResources: []unstructured.Unstructured{deployedOuterLoopResource}, + wantResources: []unstructured.Unstructured{labeledOuterloopResource}, wantErr: false, }, { - name: "only uri-referenced outerloop resources are deployed; innerloop resource is not found", + name: "list uri-referenced outerloop resources", fields: fields{ kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { kubeClient := kclient.NewMockClientInterface(ctrl) - kubeClient.EXPECT().GetDeploymentByName(innerLoopDeploymentName). - Return(&appsv1.Deployment{}, - kerrors.NewNotFound(schema.GroupResource{Group: "apps", Resource: "Deployments"}, - innerLoopDeploymentName)) - kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResource).Return(&outerLoopGVR, nil) + kubeClient.EXPECT().GetDeploymentByName(innerLoopCoreDeploymentName). + Return(&appsv1.Deployment{}, kerrors.NewNotFound(schema.GroupResource{Group: "apps", Resource: "Deployments"}, innerLoopCoreDeploymentName)) + kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResourceUnstructured).Return(&deploymentRESTMapping, nil) kubeClient.EXPECT(). - GetDynamicResource(outerLoopGVR.Resource, outerLoopResource.GetName()). - Return(&deployedOuterLoopResource, nil) + GetDynamicResource(deploymentRESTMapping.Resource, outerLoopResourceUnstructured.GetName()). + Return(&labeledOuterloopResource, nil) return kubeClient }, }, args: args{ devfileObj: odoTestingUtil.GetTestDevfileObjFromFile("devfile-deploy-with-k8s-uri.yaml"), appName: appName, + mode: odolabels.ComponentAnyMode, }, wantIsInnerLoopDeployed: false, - wantResources: []unstructured.Unstructured{deployedOuterLoopResource}, + wantResources: []unstructured.Unstructured{labeledOuterloopResource}, wantErr: false, }, { @@ -408,13 +452,14 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { fields: fields{ kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { kubeClient := kclient.NewMockClientInterface(ctrl) - kubeClient.EXPECT().GetDeploymentByName(innerLoopDeploymentName).Return(&appsv1.Deployment{}, errors.New("some error")) + kubeClient.EXPECT().GetDeploymentByName(innerLoopCoreDeploymentName).Return(&appsv1.Deployment{}, errors.New("some error")) return kubeClient }, }, args: args{ devfileObj: odoTestingUtil.GetTestDevfileObjFromFile("devfile-deploy.yaml"), appName: appName, + mode: odolabels.ComponentAnyMode, }, wantIsInnerLoopDeployed: false, wantResources: nil, @@ -425,17 +470,18 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { fields: fields{ kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { kubeClient := kclient.NewMockClientInterface(ctrl) - kubeClient.EXPECT().GetDeploymentByName(innerLoopDeploymentName).Return(deployment, nil) - kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResource).Return(nil, errors.New("some error")) + kubeClient.EXPECT().GetDeploymentByName(innerLoopCoreDeploymentName).Return(innerLoopCoreDeployment, nil) + kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResourceUnstructured).Return(nil, errors.New("some error")) return kubeClient }, }, args: args{ devfileObj: odoTestingUtil.GetTestDevfileObjFromFile("devfile-deploy.yaml"), appName: appName, + mode: odolabels.ComponentAnyMode, }, wantIsInnerLoopDeployed: true, - wantResources: []unstructured.Unstructured{deployedInnerLoopResource}, + wantResources: []unstructured.Unstructured{innerLoopCoreDeploymentUnstructured}, wantErr: false, }, { @@ -443,10 +489,10 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { fields: fields{ kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { kubeClient := kclient.NewMockClientInterface(ctrl) - kubeClient.EXPECT().GetDeploymentByName(innerLoopDeploymentName).Return(deployment, nil) - kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResource).Return(&outerLoopGVR, nil) + kubeClient.EXPECT().GetDeploymentByName(innerLoopCoreDeploymentName).Return(innerLoopCoreDeployment, nil) + kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResourceUnstructured).Return(&deploymentRESTMapping, nil) kubeClient.EXPECT(). - GetDynamicResource(outerLoopGVR.Resource, outerLoopResource.GetName()). + GetDynamicResource(deploymentRESTMapping.Resource, outerLoopResourceUnstructured.GetName()). Return(nil, errors.New("some error")) return kubeClient }, @@ -454,9 +500,42 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { args: args{ devfileObj: odoTestingUtil.GetTestDevfileObjFromFile("devfile-deploy.yaml"), appName: appName, + mode: odolabels.ComponentAnyMode, + }, + wantIsInnerLoopDeployed: true, + wantResources: []unstructured.Unstructured{innerLoopCoreDeploymentUnstructured}, + wantErr: false, + }, + { + name: "do not list outerloop resource if Dev mode is asked", + fields: fields{ + kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { + kubeClient := kclient.NewMockClientInterface(ctrl) + + kubeClient.EXPECT().GetDeploymentByName(innerLoopCoreDeploymentName).Return(innerLoopCoreDeployment, nil) + + kubeClient.EXPECT().GetRestMappingFromUnstructured(outerLoopResourceUnstructured).Return(&deploymentRESTMapping, nil) + kubeClient.EXPECT(). + GetDynamicResource(deploymentRESTMapping.Resource, outerLoopResourceUnstructured.GetName()). + Return(&outerLoopResourceUnstructured, nil) + + return kubeClient + }, + }, + args: args{ + devfileObj: func() parser.DevfileObj { + obj := odoTestingUtil.GetTestDevfileObjFromFile("devfile-composite-apply-commands.yaml") + // change the metadata name to the desired one since devfile.yaml has a different name + metadata := obj.Data.GetMetadata() + metadata.Name = compName + obj.Data.SetMetadata(metadata) + return obj + }(), + appName: appName, + mode: odolabels.ComponentDevMode, }, wantIsInnerLoopDeployed: true, - wantResources: []unstructured.Unstructured{deployedInnerLoopResource}, + wantResources: []unstructured.Unstructured{innerLoopCoreDeploymentUnstructured}, wantErr: false, }, } @@ -466,7 +545,7 @@ func TestDeleteComponentClient_ListResourcesToDeleteFromDevfile(t *testing.T) { do := DeleteComponentClient{ kubeClient: tt.fields.kubeClient(ctrl), } - gotIsInnerLoopDeployed, gotResources, err := do.ListResourcesToDeleteFromDevfile(tt.args.devfileObj, tt.args.appName, labels.ComponentAnyMode) + gotIsInnerLoopDeployed, gotResources, err := do.ListResourcesToDeleteFromDevfile(tt.args.devfileObj, tt.args.appName, tt.args.mode) if (err != nil) != tt.wantErr { t.Errorf("ListResourcesToDeleteFromDevfile() error = %v, wantErr %v", err, tt.wantErr) return @@ -523,7 +602,7 @@ func TestDeleteComponentClient_ExecutePreStopEvents(t *testing.T) { kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { client := kclient.NewMockClientInterface(ctrl) - selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode) + selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode, false) client.EXPECT().GetRunningPodFromSelector(selector).Return(&corev1.Pod{}, &kclient.PodNotFoundError{Selector: selector}) return client }, @@ -540,7 +619,7 @@ func TestDeleteComponentClient_ExecutePreStopEvents(t *testing.T) { kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { client := kclient.NewMockClientInterface(ctrl) - selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode) + selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode, false) client.EXPECT().GetRunningPodFromSelector(selector).Return(nil, errors.New("some un-ignorable error")) return client }, @@ -557,7 +636,7 @@ func TestDeleteComponentClient_ExecutePreStopEvents(t *testing.T) { kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { client := kclient.NewMockClientInterface(ctrl) - selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode) + selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode, false) client.EXPECT().GetRunningPodFromSelector(selector).Return(odoTestingUtil.CreateFakePod(componentName, "runtime"), nil) cmd := []string{"/bin/sh", "-c", "cd /projects/nodejs-starter && (echo \"Hello World!\") 1>>/proc/1/fd/1 2>>/proc/1/fd/2"} @@ -578,7 +657,7 @@ func TestDeleteComponentClient_ExecutePreStopEvents(t *testing.T) { kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { client := kclient.NewMockClientInterface(ctrl) - selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode) + selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode, false) pod := odoTestingUtil.CreateFakePod(componentName, "runtime") pod.Status.Phase = corev1.PodFailed client.EXPECT().GetRunningPodFromSelector(selector).Return(pod, nil) @@ -597,9 +676,9 @@ func TestDeleteComponentClient_ExecutePreStopEvents(t *testing.T) { kubeClient: func(ctrl *gomock.Controller) kclient.ClientInterface { client := kclient.NewMockClientInterface(ctrl) - selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode) + selector := odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode, false) fakePod := odoTestingUtil.CreateFakePod(componentName, "runtime") - //Expecting this method to be called twice because if the command execution fails, we try to get the pod logs by calling GetOnePodFromSelector again. + // Expecting this method to be called twice because if the command execution fails, we try to get the pod logs by calling GetOnePodFromSelector again. client.EXPECT().GetRunningPodFromSelector(selector).Return(fakePod, nil).Times(2) client.EXPECT().GetPodLogs(fakePod.Name, gomock.Any(), gomock.Any()).Return(nil, errors.New("an error")) diff --git a/pkg/component/delete/interface.go b/pkg/component/delete/interface.go index 0d0a9c6e853..9566fae59c1 100644 --- a/pkg/component/delete/interface.go +++ b/pkg/component/delete/interface.go @@ -8,7 +8,7 @@ import ( type Client interface { // ListClusterResourcesToDelete lists Kubernetes resources from cluster in namespace for a given odo component ListClusterResourcesToDelete(componentName string, namespace string) ([]unstructured.Unstructured, error) - // DeleteResources deletes the unstuctured resources and return the resources that failed to be deleted + // DeleteResources deletes the unstructured resources and return the resources that failed to be deleted // set wait to true to wait for all the dependencies to be deleted DeleteResources(resources []unstructured.Unstructured, wait bool) []unstructured.Unstructured // ExecutePreStopEvents executes preStop events if any, as a precondition to deleting a devfile component deployment diff --git a/pkg/deploy/deploy.go b/pkg/deploy/deploy.go index ed73665d28a..54142a52f25 100644 --- a/pkg/deploy/deploy.go +++ b/pkg/deploy/deploy.go @@ -2,21 +2,15 @@ package deploy import ( "errors" - "fmt" - "strings" "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2" "github.com/devfile/library/pkg/devfile/parser" - devfilefs "github.com/devfile/library/pkg/testingutil/filesystem" - "k8s.io/klog" - "github.com/redhat-developer/odo/pkg/component" + "github.com/redhat-developer/odo/pkg/devfile/adapters/kubernetes/component" "github.com/redhat-developer/odo/pkg/devfile/image" "github.com/redhat-developer/odo/pkg/kclient" odolabels "github.com/redhat-developer/odo/pkg/labels" "github.com/redhat-developer/odo/pkg/libdevfile" - "github.com/redhat-developer/odo/pkg/log" - "github.com/redhat-developer/odo/pkg/service" "github.com/redhat-developer/odo/pkg/testingutil/filesystem" ) @@ -64,41 +58,7 @@ func (o *deployHandler) ApplyImage(img v1alpha2.Component) error { // ApplyKubernetes applies inline Kubernetes YAML from the devfile.yaml file func (o *deployHandler) ApplyKubernetes(kubernetes v1alpha2.Component) error { - - // Validate if the GVRs represented by Kubernetes inlined components are supported by the underlying cluster - _, err := service.ValidateResourceExist(o.kubeClient, o.devfileObj, kubernetes, o.path) - if err != nil { - return err - } - - // Get the most common labels that's applicable to all resources being deployed. - // Set the mode to DEPLOY. Regardless of what Kubernetes resource we are deploying. - labels := odolabels.GetLabels(o.devfileObj.Data.GetMetadata().Name, o.appName, odolabels.ComponentDeployMode) - klog.V(4).Infof("Injecting labels: %+v into k8s artifact", labels) - - // Create the annotations - // Retrieve the component type from the devfile and also inject it into the list of annotations - annotations := make(map[string]string) - odolabels.SetProjectType(annotations, component.GetComponentTypeFromDevfileMetadata(o.devfileObj.Data.GetMetadata())) - - // Get the Kubernetes component - u, err := libdevfile.GetK8sComponentAsUnstructured(o.devfileObj, kubernetes.Name, o.path, devfilefs.DefaultFs{}) - if err != nil { - return err - } - - // Deploy the actual Kubernetes component and error out if there's an issue. - log.Sectionf("Deploying Kubernetes Component: %s", u.GetName()) - isOperatorBackedService, err := service.PushKubernetesResource(o.kubeClient, u, labels, annotations) - if err != nil { - return fmt.Errorf("failed to create service(s) associated with the component: %w", err) - } - - if isOperatorBackedService { - log.Successf("Kubernetes resource %q on the cluster; refer %q to know how to link it to the component", strings.Join([]string{u.GetKind(), u.GetName()}, "/"), "odo link -h") - - } - return nil + return component.ApplyKubernetes(odolabels.ComponentDeployMode, o.appName, o.devfileObj, kubernetes, o.kubeClient, o.path) } // Execute will deploy the listed information in the `exec` section of devfile.yaml diff --git a/pkg/dev/dev.go b/pkg/dev/dev.go index 6a1652d69dd..bccf37a9306 100644 --- a/pkg/dev/dev.go +++ b/pkg/dev/dev.go @@ -9,6 +9,7 @@ import ( "github.com/redhat-developer/odo/pkg/kclient" "github.com/redhat-developer/odo/pkg/portForward" "github.com/redhat-developer/odo/pkg/preference" + "github.com/redhat-developer/odo/pkg/testingutil/filesystem" "github.com/devfile/library/pkg/devfile/parser" "k8s.io/klog/v2" @@ -54,6 +55,7 @@ func (o *DevClient) Start( runCommand string, randomPorts bool, errOut io.Writer, + fs filesystem.Filesystem, ) (watch.ComponentStatus, error) { klog.V(4).Infoln("Creating new adapter") adapter := component.NewKubernetesAdapter( @@ -63,6 +65,7 @@ func (o *DevClient) Start( Context: path, AppName: "app", Devfile: devfileObj, + FS: fs, }, namespace) diff --git a/pkg/dev/interface.go b/pkg/dev/interface.go index 8fe302c2f83..a91c7c66128 100644 --- a/pkg/dev/interface.go +++ b/pkg/dev/interface.go @@ -7,6 +7,7 @@ import ( "github.com/devfile/library/pkg/devfile/parser" "github.com/redhat-developer/odo/pkg/devfile/adapters" + "github.com/redhat-developer/odo/pkg/testingutil/filesystem" "github.com/redhat-developer/odo/pkg/watch" ) @@ -26,6 +27,7 @@ type Client interface { runCommand string, randomPorts bool, errOut io.Writer, + fs filesystem.Filesystem, ) (watch.ComponentStatus, error) // Watch watches for any changes to the files under path while ignoring the files/directories in ignorePaths. diff --git a/pkg/dev/mock.go b/pkg/dev/mock.go index 24871fa43a0..a26519b61df 100644 --- a/pkg/dev/mock.go +++ b/pkg/dev/mock.go @@ -6,54 +6,54 @@ package dev import ( context "context" - io "io" - reflect "reflect" - parser "github.com/devfile/library/pkg/devfile/parser" gomock "github.com/golang/mock/gomock" adapters "github.com/redhat-developer/odo/pkg/devfile/adapters" + filesystem "github.com/redhat-developer/odo/pkg/testingutil/filesystem" watch "github.com/redhat-developer/odo/pkg/watch" + io "io" + reflect "reflect" ) -// MockClient is a mock of Client interface. +// MockClient is a mock of Client interface type MockClient struct { ctrl *gomock.Controller recorder *MockClientMockRecorder } -// MockClientMockRecorder is the mock recorder for MockClient. +// MockClientMockRecorder is the mock recorder for MockClient type MockClientMockRecorder struct { mock *MockClient } -// NewMockClient creates a new mock instance. +// NewMockClient creates a new mock instance func NewMockClient(ctrl *gomock.Controller) *MockClient { mock := &MockClient{ctrl: ctrl} mock.recorder = &MockClientMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use. +// EXPECT returns an object that allows the caller to indicate expected use func (m *MockClient) EXPECT() *MockClientMockRecorder { return m.recorder } -// Start mocks base method. -func (m *MockClient) Start(devfileObj parser.DevfileObj, namespace string, ignorePaths []string, path string, debug bool, buildCommand, runCommand string, randomPorts bool, errOut io.Writer) (watch.ComponentStatus, error) { +// Start mocks base method +func (m *MockClient) Start(devfileObj parser.DevfileObj, namespace string, ignorePaths []string, path string, debug bool, buildCommand, runCommand string, randomPorts bool, errOut io.Writer, fs filesystem.Filesystem) (watch.ComponentStatus, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Start", devfileObj, namespace, ignorePaths, path, debug, buildCommand, runCommand, randomPorts, errOut) + ret := m.ctrl.Call(m, "Start", devfileObj, namespace, ignorePaths, path, debug, buildCommand, runCommand, randomPorts, errOut, fs) ret0, _ := ret[0].(watch.ComponentStatus) ret1, _ := ret[1].(error) return ret0, ret1 } -// Start indicates an expected call of Start. -func (mr *MockClientMockRecorder) Start(devfileObj, namespace, ignorePaths, path, debug, buildCommand, runCommand, randomPorts, errOut interface{}) *gomock.Call { +// Start indicates an expected call of Start +func (mr *MockClientMockRecorder) Start(devfileObj, namespace, ignorePaths, path, debug, buildCommand, runCommand, randomPorts, errOut, fs interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Start", reflect.TypeOf((*MockClient)(nil).Start), devfileObj, namespace, ignorePaths, path, debug, buildCommand, runCommand, randomPorts, errOut) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Start", reflect.TypeOf((*MockClient)(nil).Start), devfileObj, namespace, ignorePaths, path, debug, buildCommand, runCommand, randomPorts, errOut, fs) } -// Watch mocks base method. +// Watch mocks base method func (m *MockClient) Watch(devfilePath string, devfileObj parser.DevfileObj, path string, ignorePaths []string, out io.Writer, h Handler, ctx context.Context, debug bool, buildCommand, runCommand string, variables map[string]string, randomPorts, watchFiles bool, errOut io.Writer, componentStatus watch.ComponentStatus) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Watch", devfilePath, devfileObj, path, ignorePaths, out, h, ctx, debug, buildCommand, runCommand, variables, randomPorts, watchFiles, errOut, componentStatus) @@ -61,36 +61,36 @@ func (m *MockClient) Watch(devfilePath string, devfileObj parser.DevfileObj, pat return ret0 } -// Watch indicates an expected call of Watch. +// Watch indicates an expected call of Watch func (mr *MockClientMockRecorder) Watch(devfilePath, devfileObj, path, ignorePaths, out, h, ctx, debug, buildCommand, runCommand, variables, randomPorts, watchFiles, errOut, componentStatus interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Watch", reflect.TypeOf((*MockClient)(nil).Watch), devfilePath, devfileObj, path, ignorePaths, out, h, ctx, debug, buildCommand, runCommand, variables, randomPorts, watchFiles, errOut, componentStatus) } -// MockHandler is a mock of Handler interface. +// MockHandler is a mock of Handler interface type MockHandler struct { ctrl *gomock.Controller recorder *MockHandlerMockRecorder } -// MockHandlerMockRecorder is the mock recorder for MockHandler. +// MockHandlerMockRecorder is the mock recorder for MockHandler type MockHandlerMockRecorder struct { mock *MockHandler } -// NewMockHandler creates a new mock instance. +// NewMockHandler creates a new mock instance func NewMockHandler(ctrl *gomock.Controller) *MockHandler { mock := &MockHandler{ctrl: ctrl} mock.recorder = &MockHandlerMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use. +// EXPECT returns an object that allows the caller to indicate expected use func (m *MockHandler) EXPECT() *MockHandlerMockRecorder { return m.recorder } -// RegenerateAdapterAndPush mocks base method. +// RegenerateAdapterAndPush mocks base method func (m *MockHandler) RegenerateAdapterAndPush(arg0 adapters.PushParameters, arg1 watch.WatchParameters, arg2 *watch.ComponentStatus) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "RegenerateAdapterAndPush", arg0, arg1, arg2) @@ -98,7 +98,7 @@ func (m *MockHandler) RegenerateAdapterAndPush(arg0 adapters.PushParameters, arg return ret0 } -// RegenerateAdapterAndPush indicates an expected call of RegenerateAdapterAndPush. +// RegenerateAdapterAndPush indicates an expected call of RegenerateAdapterAndPush func (mr *MockHandlerMockRecorder) RegenerateAdapterAndPush(arg0, arg1, arg2 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegenerateAdapterAndPush", reflect.TypeOf((*MockHandler)(nil).RegenerateAdapterAndPush), arg0, arg1, arg2) diff --git a/pkg/devfile/adapters/kubernetes/component/adapter.go b/pkg/devfile/adapters/kubernetes/component/adapter.go index 14e8b0428d3..a18bb05edb2 100644 --- a/pkg/devfile/adapters/kubernetes/component/adapter.go +++ b/pkg/devfile/adapters/kubernetes/component/adapter.go @@ -26,6 +26,7 @@ import ( "github.com/redhat-developer/odo/pkg/service" storagepkg "github.com/redhat-developer/odo/pkg/storage" "github.com/redhat-developer/odo/pkg/sync" + "github.com/redhat-developer/odo/pkg/testingutil/filesystem" "github.com/redhat-developer/odo/pkg/util" "github.com/redhat-developer/odo/pkg/watch" @@ -54,10 +55,11 @@ type Adapter struct { // AdapterContext is a construct that is common to all adapters type AdapterContext struct { - ComponentName string // ComponentName is the odo component name, it is NOT related to any devfile components - Context string // Context is the given directory containing the source code and configs - AppName string // the application name associated to a component - Devfile parser.DevfileObj // Devfile is the object returned by the Devfile parser + ComponentName string // ComponentName is the odo component name, it is NOT related to any devfile components + Context string // Context is the given directory containing the source code and configs + AppName string // the application name associated to a component + Devfile parser.DevfileObj // Devfile is the object returned by the Devfile parser + FS filesystem.Filesystem // FS is the object used for building image component if present } var _ sync.SyncClient = (*Adapter)(nil) @@ -113,7 +115,7 @@ func (a Adapter) Push(parameters adapters.PushParameters, componentStatus *watch } // Set the mode to Dev since we are using "odo dev" here - labels := odolabels.GetLabels(a.ComponentName, a.AppName, odolabels.ComponentDevMode) + labels := odolabels.GetLabels(a.ComponentName, a.AppName, odolabels.ComponentDevMode, false) k8sComponents, err := a.pushDevfileKubernetesComponents(labels) if err != nil { @@ -197,7 +199,6 @@ func (a Adapter) Push(parameters adapters.PushParameters, componentStatus *watch if err != nil { return fmt.Errorf("error while retrieving container from pod %s with a mounted project volume: %w", pod.GetName(), err) } - //s.End(true) s := log.Spinner("Syncing files into the container") defer s.End(false) @@ -274,8 +275,8 @@ func (a Adapter) Push(parameters adapters.PushParameters, componentStatus *watch return err } } else if commandType == devfilev1.CompositeCommandType { - //this handler will run each command in this composite command individually, - //and will determine whether each command is running or not. + // this handler will run each command in this composite command individually, + // and will determine whether each command is running or not. isComposite = true } else { return fmt.Errorf("unsupported type %q for Devfile command %s, only exec and composite are handled", @@ -358,8 +359,7 @@ func (a *Adapter) createOrUpdateComponent( } // Set the labels - labels := odolabels.GetLabels(componentName, a.AppName, odolabels.ComponentDevMode) - labels["component"] = componentName + labels := odolabels.GetLabels(componentName, a.AppName, odolabels.ComponentDevMode, true) annotations := make(map[string]string) odolabels.SetProjectType(annotations, component.GetComponentTypeFromDevfileMetadata(a.AdapterContext.Devfile.Data.GetMetadata())) diff --git a/pkg/devfile/adapters/kubernetes/component/adapter_test.go b/pkg/devfile/adapters/kubernetes/component/adapter_test.go index e5867d2192f..4a68c913ade 100644 --- a/pkg/devfile/adapters/kubernetes/component/adapter_test.go +++ b/pkg/devfile/adapters/kubernetes/component/adapter_test.go @@ -299,13 +299,13 @@ func TestAdapter_generateDeploymentObjectMeta(t *testing.T) { fields: fields{ componentName: "nodejs", appName: "app", - deployment: odoTestingUtil.CreateFakeDeployment("nodejs"), + deployment: odoTestingUtil.CreateFakeDeployment("nodejs", false), }, args: args{ - labels: odoTestingUtil.CreateFakeDeployment("nodejs").Labels, + labels: odoTestingUtil.CreateFakeDeployment("nodejs", false).Labels, annotations: nil, }, - want: generator.GetObjectMeta("nodejs", "project-0", odoTestingUtil.CreateFakeDeployment("nodejs").Labels, nil), + want: generator.GetObjectMeta("nodejs", "project-0", odoTestingUtil.CreateFakeDeployment("nodejs", false).Labels, nil), wantErr: false, }, { @@ -316,10 +316,10 @@ func TestAdapter_generateDeploymentObjectMeta(t *testing.T) { deployment: nil, }, args: args{ - labels: odoTestingUtil.CreateFakeDeployment("nodejs").Labels, + labels: odoTestingUtil.CreateFakeDeployment("nodejs", false).Labels, annotations: nil, }, - want: generator.GetObjectMeta(namespacedKubernetesName, "project-0", odoTestingUtil.CreateFakeDeployment("nodejs").Labels, nil), + want: generator.GetObjectMeta(namespacedKubernetesName, "project-0", odoTestingUtil.CreateFakeDeployment("nodejs", false).Labels, nil), wantErr: false, }, { @@ -327,13 +327,13 @@ func TestAdapter_generateDeploymentObjectMeta(t *testing.T) { fields: fields{ componentName: "nodejs", appName: "app", - deployment: odoTestingUtil.CreateFakeDeployment("nodejs"), + deployment: odoTestingUtil.CreateFakeDeployment("nodejs", false), }, args: args{ - labels: odoTestingUtil.CreateFakeDeployment("nodejs").Labels, + labels: odoTestingUtil.CreateFakeDeployment("nodejs", false).Labels, annotations: odolabels.Builder().WithMode(odolabels.ComponentDevMode).Labels(), }, - want: generator.GetObjectMeta("nodejs", "project-0", odoTestingUtil.CreateFakeDeployment("nodejs").Labels, odolabels.Builder().WithMode(odolabels.ComponentDevMode).Labels()), + want: generator.GetObjectMeta("nodejs", "project-0", odoTestingUtil.CreateFakeDeployment("nodejs", false).Labels, odolabels.Builder().WithMode(odolabels.ComponentDevMode).Labels()), wantErr: false, }, } diff --git a/pkg/devfile/adapters/kubernetes/component/commandhandler.go b/pkg/devfile/adapters/kubernetes/component/commandhandler.go index ba1e3661391..c4e4d71a17c 100644 --- a/pkg/devfile/adapters/kubernetes/component/commandhandler.go +++ b/pkg/devfile/adapters/kubernetes/component/commandhandler.go @@ -6,13 +6,19 @@ import ( "time" devfilev1 "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2" + "github.com/devfile/library/pkg/devfile/parser" + devfilefs "github.com/devfile/library/pkg/testingutil/filesystem" "k8s.io/klog" "github.com/redhat-developer/odo/pkg/component" "github.com/redhat-developer/odo/pkg/devfile/adapters" + "github.com/redhat-developer/odo/pkg/devfile/image" + "github.com/redhat-developer/odo/pkg/kclient" + odolabels "github.com/redhat-developer/odo/pkg/labels" "github.com/redhat-developer/odo/pkg/libdevfile" "github.com/redhat-developer/odo/pkg/log" "github.com/redhat-developer/odo/pkg/remotecmd" + "github.com/redhat-developer/odo/pkg/service" "github.com/redhat-developer/odo/pkg/sync" "github.com/redhat-developer/odo/pkg/task" "github.com/redhat-developer/odo/pkg/util" @@ -31,14 +37,12 @@ var _ libdevfile.Handler = (*adapterHandler)(nil) var _ ComponentAdapter = (*adapterHandler)(nil) var _ sync.SyncClient = (*adapterHandler)(nil) -func (a *adapterHandler) ApplyImage(_ devfilev1.Component) error { - klog.V(2).Info("this handler can only handle exec commands in container components, not image components") - return nil +func (a *adapterHandler) ApplyImage(img devfilev1.Component) error { + return image.BuildPushSpecificImage(a.FS, a.parameters.Path, img, true) } -func (a *adapterHandler) ApplyKubernetes(_ devfilev1.Component) error { - klog.V(2).Info("this handler can only handle exec commands in container components, not Kubernetes components") - return nil +func (a *adapterHandler) ApplyKubernetes(kubernetes devfilev1.Component) error { + return ApplyKubernetes(odolabels.ComponentDevMode, a.AppName, a.Devfile, kubernetes, a.kubeClient, a.parameters.Path) } func (a *adapterHandler) Execute(devfileCmd devfilev1.Command) error { @@ -126,6 +130,47 @@ func (a *adapterHandler) Execute(devfileCmd devfilev1.Command) error { fmt.Sprintf("Devfile command %q exited with an error status in %.0f second(s)", devfileCmd.Id, totalWaitTime)) } +// ApplyKubernetes contains the logic to create the k8s resources defined by the `apply` command +// mode(Dev, Deploy): the mode in which the resources are deployed +// appName: application name +// devfile: the devfile object +// kubernetes: the kubernetes devfile component to be deployed +// kubeClient: Kubernetes client to be used to deploy the resource +// path: path to the context directory +func ApplyKubernetes(mode, appName string, devfile parser.DevfileObj, kubernetes devfilev1.Component, kubeClient kclient.ClientInterface, path string) error { + // Validate if the GVRs represented by Kubernetes inlined components are supported by the underlying cluster + _, err := ValidateResourceExist(kubeClient, devfile, kubernetes, path) + if err != nil { + return err + } + + // Get the most common labels that's applicable to all resources being deployed. + // Set the mode. Regardless of what Kubernetes resource we are deploying. + labels := odolabels.GetLabels(devfile.Data.GetMetadata().Name, appName, mode, false) + + klog.V(4).Infof("Injecting labels: %+v into k8s artifact", labels) + + // Create the annotations + // Retrieve the component type from the devfile and also inject it into the list of annotations + annotations := make(map[string]string) + odolabels.SetProjectType(annotations, component.GetComponentTypeFromDevfileMetadata(devfile.Data.GetMetadata())) + + // Get the Kubernetes component + u, err := libdevfile.GetK8sComponentAsUnstructured(devfile, kubernetes.Name, path, devfilefs.DefaultFs{}) + if err != nil { + return err + } + + // Deploy the actual Kubernetes component and error out if there's an issue. + log.Sectionf("Deploying Kubernetes Component: %s", u.GetName()) + _, err = service.PushKubernetesResource(kubeClient, u, labels, annotations) + if err != nil { + return fmt.Errorf("failed to create service(s) associated with the component: %w", err) + } + + return nil +} + // devfileCommandToRemoteCmdDefinition builds and returns a new remotecmd.CommandDefinition object from the specified devfileCmd. // An error is returned for non-exec Devfile commands. func devfileCommandToRemoteCmdDefinition(devfileCmd devfilev1.Command) (remotecmd.CommandDefinition, error) { diff --git a/pkg/devfile/adapters/kubernetes/component/push.go b/pkg/devfile/adapters/kubernetes/component/push.go index a1ed481e1d9..42dac135c39 100644 --- a/pkg/devfile/adapters/kubernetes/component/push.go +++ b/pkg/devfile/adapters/kubernetes/component/push.go @@ -5,6 +5,9 @@ import ( "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2" devfilev1 "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2" + appsv1 "k8s.io/api/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/redhat-developer/odo/pkg/component" "github.com/redhat-developer/odo/pkg/devfile" "github.com/redhat-developer/odo/pkg/devfile/adapters" @@ -12,8 +15,6 @@ import ( odolabels "github.com/redhat-developer/odo/pkg/labels" "github.com/redhat-developer/odo/pkg/libdevfile" "github.com/redhat-developer/odo/pkg/service" - appsv1 "k8s.io/api/apps/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // getComponentDeployment returns the deployment associated with the component, if deployed @@ -22,7 +23,7 @@ func (a *Adapter) getComponentDeployment() (*appsv1.Deployment, bool, error) { // Get the Dev deployment: // Since `odo deploy` can theoretically deploy a deployment as well with the same instance name // we make sure that we are retrieving the deployment with the Dev mode, NOT Deploy. - selectorLabels := odolabels.GetSelector(a.ComponentName, a.AppName, odolabels.ComponentDevMode) + selectorLabels := odolabels.GetSelector(a.ComponentName, a.AppName, odolabels.ComponentDevMode, true) deployment, err := a.kubeClient.GetOneDeploymentFromSelector(selectorLabels) if err != nil { @@ -47,7 +48,7 @@ func (a *Adapter) pushDevfileKubernetesComponents( } // validate if the GVRs represented by Kubernetes inlined components are supported by the underlying cluster - err = service.ValidateResourcesExist(a.kubeClient, a.Devfile, k8sComponents, a.Context) + err = ValidateResourcesExist(a.kubeClient, a.Devfile, k8sComponents, a.Context) if err != nil { return nil, err } diff --git a/pkg/devfile/adapters/kubernetes/component/utils.go b/pkg/devfile/adapters/kubernetes/component/utils.go new file mode 100644 index 00000000000..e677a7209af --- /dev/null +++ b/pkg/devfile/adapters/kubernetes/component/utils.go @@ -0,0 +1,57 @@ +package component + +import ( + "errors" + "fmt" + "strings" + + devfile "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2" + "github.com/devfile/library/pkg/devfile/parser" + devfilefs "github.com/devfile/library/pkg/testingutil/filesystem" + + "github.com/redhat-developer/odo/pkg/kclient" + "github.com/redhat-developer/odo/pkg/libdevfile" +) + +// ValidateResourcesExist validates if the Kubernetes inlined components are installed on the cluster +func ValidateResourcesExist(client kclient.ClientInterface, devfileObj parser.DevfileObj, k8sComponents []devfile.Component, context string) error { + if len(k8sComponents) == 0 { + return nil + } + + var unsupportedResources []string + for _, c := range k8sComponents { + kindErr, err := ValidateResourceExist(client, devfileObj, c, context) + if err != nil { + if kindErr != "" { + unsupportedResources = append(unsupportedResources, kindErr) + } else { + return err + } + } + } + + if len(unsupportedResources) > 0 { + // tell the user about all the unsupported resources in one message + return fmt.Errorf("following resource(s) in the devfile are not supported by your cluster; please install corresponding Operator(s) before doing \"odo dev\": %s", strings.Join(unsupportedResources, ", ")) + } + return nil +} + +// ValidateResourceExist validates if a Kubernetes inlined component is installed on the cluster +func ValidateResourceExist(client kclient.ClientInterface, devfileObj parser.DevfileObj, k8sComponent devfile.Component, context string) (kindErr string, err error) { + // get the string representation of the YAML definition of a CRD + u, err := libdevfile.GetK8sComponentAsUnstructured(devfileObj, k8sComponent.Name, context, devfilefs.DefaultFs{}) + if err != nil { + return "", err + } + + _, err = client.GetRestMappingFromUnstructured(u) + if err != nil && u.GetKind() != "ServiceBinding" { + // getting a RestMapping would fail if there are no matches for the Kind field on the cluster; + // but if it's a "ServiceBinding" resource, we don't add it to unsupported list because odo can create links + // without having SBO installed + return u.GetKind(), errors.New("resource not supported") + } + return "", nil +} diff --git a/pkg/kclient/deployments.go b/pkg/kclient/deployments.go index 5fc1e933e7a..54b63a8a592 100644 --- a/pkg/kclient/deployments.go +++ b/pkg/kclient/deployments.go @@ -37,8 +37,8 @@ func (c *Client) GetDeploymentByName(name string) (*appsv1.Deployment, error) { } // GetOneDeployment returns the Deployment object associated with the given component and app -func (c *Client) GetOneDeployment(componentName, appName string) (*appsv1.Deployment, error) { - selector := odolabels.GetSelector(componentName, appName, odolabels.ComponentDevMode) +func (c *Client) GetOneDeployment(componentName, appName string, isPartOfComponent bool) (*appsv1.Deployment, error) { + selector := odolabels.GetSelector(componentName, appName, odolabels.ComponentDevMode, isPartOfComponent) return c.GetOneDeploymentFromSelector(selector) } diff --git a/pkg/kclient/deployments_test.go b/pkg/kclient/deployments_test.go index 7b4b0f7f8c1..09535fa53fd 100644 --- a/pkg/kclient/deployments_test.go +++ b/pkg/kclient/deployments_test.go @@ -158,10 +158,10 @@ func TestGetDeploymentByName(t *testing.T) { fkclientset.Kubernetes.PrependReactor("get", "deployments", func(action ktesting.Action) (bool, runtime.Object, error) { if tt.deploymentName == "mydeploy2" { - emptyDeployment := odoTestingUtil.CreateFakeDeployment("") + emptyDeployment := odoTestingUtil.CreateFakeDeployment("", false) return true, emptyDeployment, nil } else if tt.deploymentName == "mydeploy1" { - deployment := odoTestingUtil.CreateFakeDeployment(tt.deploymentName) + deployment := odoTestingUtil.CreateFakeDeployment(tt.deploymentName, false) return true, deployment, nil } else { return true, nil, errors.New("deployment get error") diff --git a/pkg/kclient/interface.go b/pkg/kclient/interface.go index ffbaba42e6f..ffbbbb7ff4c 100644 --- a/pkg/kclient/interface.go +++ b/pkg/kclient/interface.go @@ -8,6 +8,8 @@ import ( "github.com/go-openapi/spec" projectv1 "github.com/openshift/api/project/v1" olm "github.com/operator-framework/api/pkg/operators/v1alpha1" + bindingApi "github.com/redhat-developer/service-binding-operator/apis/binding/v1alpha1" + specApi "github.com/redhat-developer/service-binding-operator/apis/spec/v1alpha3" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" @@ -22,8 +24,6 @@ import ( "k8s.io/client-go/tools/clientcmd" "github.com/redhat-developer/odo/pkg/api" - bindingApi "github.com/redhat-developer/service-binding-operator/apis/binding/v1alpha1" - specApi "github.com/redhat-developer/service-binding-operator/apis/spec/v1alpha3" ) type ClientInterface interface { @@ -47,7 +47,7 @@ type ClientInterface interface { // deployment.go GetDeploymentByName(name string) (*appsv1.Deployment, error) - GetOneDeployment(componentName, appName string) (*appsv1.Deployment, error) + GetOneDeployment(componentName, appName string, isPartOfComponent bool) (*appsv1.Deployment, error) GetOneDeploymentFromSelector(selector string) (*appsv1.Deployment, error) GetDeploymentFromSelector(selector string) ([]appsv1.Deployment, error) CreateDeployment(deploy appsv1.Deployment) (*appsv1.Deployment, error) diff --git a/pkg/kclient/mock_Client.go b/pkg/kclient/mock_Client.go index 63b1d2582c2..53f5decec72 100644 --- a/pkg/kclient/mock_Client.go +++ b/pkg/kclient/mock_Client.go @@ -6,10 +6,6 @@ package kclient import ( context "context" - io "io" - reflect "reflect" - time "time" - spec "github.com/go-openapi/spec" gomock "github.com/golang/mock/gomock" v1 "github.com/openshift/api/project/v1" @@ -17,6 +13,7 @@ import ( api "github.com/redhat-developer/odo/pkg/api" v1alpha10 "github.com/redhat-developer/service-binding-operator/apis/binding/v1alpha1" v1alpha3 "github.com/redhat-developer/service-binding-operator/apis/spec/v1alpha3" + io "io" v10 "k8s.io/api/apps/v1" v11 "k8s.io/api/core/v1" meta "k8s.io/apimachinery/pkg/api/meta" @@ -29,277 +26,335 @@ import ( kubernetes "k8s.io/client-go/kubernetes" rest "k8s.io/client-go/rest" clientcmd "k8s.io/client-go/tools/clientcmd" + reflect "reflect" + time "time" ) -// MockClientInterface is a mock of ClientInterface interface. +// MockClientInterface is a mock of ClientInterface interface type MockClientInterface struct { ctrl *gomock.Controller recorder *MockClientInterfaceMockRecorder } -// MockClientInterfaceMockRecorder is the mock recorder for MockClientInterface. +// MockClientInterfaceMockRecorder is the mock recorder for MockClientInterface type MockClientInterfaceMockRecorder struct { mock *MockClientInterface } -// NewMockClientInterface creates a new mock instance. +// NewMockClientInterface creates a new mock instance func NewMockClientInterface(ctrl *gomock.Controller) *MockClientInterface { mock := &MockClientInterface{ctrl: ctrl} mock.recorder = &MockClientInterfaceMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use. +// EXPECT returns an object that allows the caller to indicate expected use func (m *MockClientInterface) EXPECT() *MockClientInterfaceMockRecorder { return m.recorder } -// APIServiceBindingFromBinding mocks base method. -func (m *MockClientInterface) APIServiceBindingFromBinding(binding v1alpha10.ServiceBinding) (api.ServiceBinding, error) { +// GetAllResourcesFromSelector mocks base method +func (m *MockClientInterface) GetAllResourcesFromSelector(selector, ns string) ([]unstructured.Unstructured, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "APIServiceBindingFromBinding", binding) - ret0, _ := ret[0].(api.ServiceBinding) + ret := m.ctrl.Call(m, "GetAllResourcesFromSelector", selector, ns) + ret0, _ := ret[0].([]unstructured.Unstructured) ret1, _ := ret[1].(error) return ret0, ret1 } -// APIServiceBindingFromBinding indicates an expected call of APIServiceBindingFromBinding. -func (mr *MockClientInterfaceMockRecorder) APIServiceBindingFromBinding(binding interface{}) *gomock.Call { +// GetAllResourcesFromSelector indicates an expected call of GetAllResourcesFromSelector +func (mr *MockClientInterfaceMockRecorder) GetAllResourcesFromSelector(selector, ns interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "APIServiceBindingFromBinding", reflect.TypeOf((*MockClientInterface)(nil).APIServiceBindingFromBinding), binding) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllResourcesFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetAllResourcesFromSelector), selector, ns) } -// APIServiceBindingFromSpec mocks base method. -func (m *MockClientInterface) APIServiceBindingFromSpec(spec v1alpha3.ServiceBinding) api.ServiceBinding { +// IsServiceBindingSupported mocks base method +func (m *MockClientInterface) IsServiceBindingSupported() (bool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "APIServiceBindingFromSpec", spec) - ret0, _ := ret[0].(api.ServiceBinding) - return ret0 + ret := m.ctrl.Call(m, "IsServiceBindingSupported") + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// APIServiceBindingFromSpec indicates an expected call of APIServiceBindingFromSpec. -func (mr *MockClientInterfaceMockRecorder) APIServiceBindingFromSpec(spec interface{}) *gomock.Call { +// IsServiceBindingSupported indicates an expected call of IsServiceBindingSupported +func (mr *MockClientInterfaceMockRecorder) IsServiceBindingSupported() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "APIServiceBindingFromSpec", reflect.TypeOf((*MockClientInterface)(nil).APIServiceBindingFromSpec), spec) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsServiceBindingSupported", reflect.TypeOf((*MockClientInterface)(nil).IsServiceBindingSupported)) } -// ApplyDeployment mocks base method. -func (m *MockClientInterface) ApplyDeployment(deploy v10.Deployment) (*v10.Deployment, error) { +// GetBindableKinds mocks base method +func (m *MockClientInterface) GetBindableKinds() (v1alpha10.BindableKinds, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ApplyDeployment", deploy) - ret0, _ := ret[0].(*v10.Deployment) + ret := m.ctrl.Call(m, "GetBindableKinds") + ret0, _ := ret[0].(v1alpha10.BindableKinds) ret1, _ := ret[1].(error) return ret0, ret1 } -// ApplyDeployment indicates an expected call of ApplyDeployment. -func (mr *MockClientInterfaceMockRecorder) ApplyDeployment(deploy interface{}) *gomock.Call { +// GetBindableKinds indicates an expected call of GetBindableKinds +func (mr *MockClientInterfaceMockRecorder) GetBindableKinds() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ApplyDeployment", reflect.TypeOf((*MockClientInterface)(nil).ApplyDeployment), deploy) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBindableKinds", reflect.TypeOf((*MockClientInterface)(nil).GetBindableKinds)) } -// CreateDeployment mocks base method. -func (m *MockClientInterface) CreateDeployment(deploy v10.Deployment) (*v10.Deployment, error) { +// GetBindableKindStatusRestMapping mocks base method +func (m *MockClientInterface) GetBindableKindStatusRestMapping(bindableKindStatuses []v1alpha10.BindableKindsStatus) ([]*meta.RESTMapping, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateDeployment", deploy) - ret0, _ := ret[0].(*v10.Deployment) + ret := m.ctrl.Call(m, "GetBindableKindStatusRestMapping", bindableKindStatuses) + ret0, _ := ret[0].([]*meta.RESTMapping) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreateDeployment indicates an expected call of CreateDeployment. -func (mr *MockClientInterfaceMockRecorder) CreateDeployment(deploy interface{}) *gomock.Call { +// GetBindableKindStatusRestMapping indicates an expected call of GetBindableKindStatusRestMapping +func (mr *MockClientInterfaceMockRecorder) GetBindableKindStatusRestMapping(bindableKindStatuses interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDeployment", reflect.TypeOf((*MockClientInterface)(nil).CreateDeployment), deploy) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBindableKindStatusRestMapping", reflect.TypeOf((*MockClientInterface)(nil).GetBindableKindStatusRestMapping), bindableKindStatuses) } -// CreateNamespace mocks base method. -func (m *MockClientInterface) CreateNamespace(name string) (*v11.Namespace, error) { +// GetBindingServiceBinding mocks base method +func (m *MockClientInterface) GetBindingServiceBinding(name string) (v1alpha10.ServiceBinding, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateNamespace", name) - ret0, _ := ret[0].(*v11.Namespace) + ret := m.ctrl.Call(m, "GetBindingServiceBinding", name) + ret0, _ := ret[0].(v1alpha10.ServiceBinding) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreateNamespace indicates an expected call of CreateNamespace. -func (mr *MockClientInterfaceMockRecorder) CreateNamespace(name interface{}) *gomock.Call { +// GetBindingServiceBinding indicates an expected call of GetBindingServiceBinding +func (mr *MockClientInterfaceMockRecorder) GetBindingServiceBinding(name interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateNamespace", reflect.TypeOf((*MockClientInterface)(nil).CreateNamespace), name) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBindingServiceBinding", reflect.TypeOf((*MockClientInterface)(nil).GetBindingServiceBinding), name) } -// CreateNewProject mocks base method. -func (m *MockClientInterface) CreateNewProject(projectName string, wait bool) error { +// GetSpecServiceBinding mocks base method +func (m *MockClientInterface) GetSpecServiceBinding(name string) (v1alpha3.ServiceBinding, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateNewProject", projectName, wait) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "GetSpecServiceBinding", name) + ret0, _ := ret[0].(v1alpha3.ServiceBinding) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// CreateNewProject indicates an expected call of CreateNewProject. -func (mr *MockClientInterfaceMockRecorder) CreateNewProject(projectName, wait interface{}) *gomock.Call { +// GetSpecServiceBinding indicates an expected call of GetSpecServiceBinding +func (mr *MockClientInterfaceMockRecorder) GetSpecServiceBinding(name interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateNewProject", reflect.TypeOf((*MockClientInterface)(nil).CreateNewProject), projectName, wait) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSpecServiceBinding", reflect.TypeOf((*MockClientInterface)(nil).GetSpecServiceBinding), name) } -// CreatePVC mocks base method. -func (m *MockClientInterface) CreatePVC(pvc v11.PersistentVolumeClaim) (*v11.PersistentVolumeClaim, error) { +// ListServiceBindingsFromAllGroups mocks base method +func (m *MockClientInterface) ListServiceBindingsFromAllGroups() ([]v1alpha3.ServiceBinding, []v1alpha10.ServiceBinding, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreatePVC", pvc) - ret0, _ := ret[0].(*v11.PersistentVolumeClaim) + ret := m.ctrl.Call(m, "ListServiceBindingsFromAllGroups") + ret0, _ := ret[0].([]v1alpha3.ServiceBinding) + ret1, _ := ret[1].([]v1alpha10.ServiceBinding) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// ListServiceBindingsFromAllGroups indicates an expected call of ListServiceBindingsFromAllGroups +func (mr *MockClientInterfaceMockRecorder) ListServiceBindingsFromAllGroups() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServiceBindingsFromAllGroups", reflect.TypeOf((*MockClientInterface)(nil).ListServiceBindingsFromAllGroups)) +} + +// NewServiceBindingServiceObject mocks base method +func (m *MockClientInterface) NewServiceBindingServiceObject(serviceNs string, unstructuredService unstructured.Unstructured, bindingName string) (v1alpha10.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NewServiceBindingServiceObject", serviceNs, unstructuredService, bindingName) + ret0, _ := ret[0].(v1alpha10.Service) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreatePVC indicates an expected call of CreatePVC. -func (mr *MockClientInterfaceMockRecorder) CreatePVC(pvc interface{}) *gomock.Call { +// NewServiceBindingServiceObject indicates an expected call of NewServiceBindingServiceObject +func (mr *MockClientInterfaceMockRecorder) NewServiceBindingServiceObject(serviceNs, unstructuredService, bindingName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePVC", reflect.TypeOf((*MockClientInterface)(nil).CreatePVC), pvc) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewServiceBindingServiceObject", reflect.TypeOf((*MockClientInterface)(nil).NewServiceBindingServiceObject), serviceNs, unstructuredService, bindingName) } -// CreateSecret mocks base method. -func (m *MockClientInterface) CreateSecret(objectMeta v12.ObjectMeta, data map[string]string, ownerReference v12.OwnerReference) error { +// APIServiceBindingFromBinding mocks base method +func (m *MockClientInterface) APIServiceBindingFromBinding(binding v1alpha10.ServiceBinding) (api.ServiceBinding, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateSecret", objectMeta, data, ownerReference) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "APIServiceBindingFromBinding", binding) + ret0, _ := ret[0].(api.ServiceBinding) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// CreateSecret indicates an expected call of CreateSecret. -func (mr *MockClientInterfaceMockRecorder) CreateSecret(objectMeta, data, ownerReference interface{}) *gomock.Call { +// APIServiceBindingFromBinding indicates an expected call of APIServiceBindingFromBinding +func (mr *MockClientInterfaceMockRecorder) APIServiceBindingFromBinding(binding interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSecret", reflect.TypeOf((*MockClientInterface)(nil).CreateSecret), objectMeta, data, ownerReference) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "APIServiceBindingFromBinding", reflect.TypeOf((*MockClientInterface)(nil).APIServiceBindingFromBinding), binding) } -// CreateSecrets mocks base method. -func (m *MockClientInterface) CreateSecrets(componentName string, commonObjectMeta v12.ObjectMeta, svc *v11.Service, ownerReference v12.OwnerReference) error { +// APIServiceBindingFromSpec mocks base method +func (m *MockClientInterface) APIServiceBindingFromSpec(spec v1alpha3.ServiceBinding) api.ServiceBinding { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateSecrets", componentName, commonObjectMeta, svc, ownerReference) - ret0, _ := ret[0].(error) + ret := m.ctrl.Call(m, "APIServiceBindingFromSpec", spec) + ret0, _ := ret[0].(api.ServiceBinding) return ret0 } -// CreateSecrets indicates an expected call of CreateSecrets. -func (mr *MockClientInterfaceMockRecorder) CreateSecrets(componentName, commonObjectMeta, svc, ownerReference interface{}) *gomock.Call { +// APIServiceBindingFromSpec indicates an expected call of APIServiceBindingFromSpec +func (mr *MockClientInterfaceMockRecorder) APIServiceBindingFromSpec(spec interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSecrets", reflect.TypeOf((*MockClientInterface)(nil).CreateSecrets), componentName, commonObjectMeta, svc, ownerReference) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "APIServiceBindingFromSpec", reflect.TypeOf((*MockClientInterface)(nil).APIServiceBindingFromSpec), spec) } -// CreateService mocks base method. -func (m *MockClientInterface) CreateService(svc v11.Service) (*v11.Service, error) { +// GetWorkloadKinds mocks base method +func (m *MockClientInterface) GetWorkloadKinds() ([]string, []schema.GroupVersionKind, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateService", svc) - ret0, _ := ret[0].(*v11.Service) + ret := m.ctrl.Call(m, "GetWorkloadKinds") + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].([]schema.GroupVersionKind) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetWorkloadKinds indicates an expected call of GetWorkloadKinds +func (mr *MockClientInterfaceMockRecorder) GetWorkloadKinds() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetWorkloadKinds", reflect.TypeOf((*MockClientInterface)(nil).GetWorkloadKinds)) +} + +// GetDeploymentByName mocks base method +func (m *MockClientInterface) GetDeploymentByName(name string) (*v10.Deployment, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetDeploymentByName", name) + ret0, _ := ret[0].(*v10.Deployment) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreateService indicates an expected call of CreateService. -func (mr *MockClientInterfaceMockRecorder) CreateService(svc interface{}) *gomock.Call { +// GetDeploymentByName indicates an expected call of GetDeploymentByName +func (mr *MockClientInterfaceMockRecorder) GetDeploymentByName(name interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateService", reflect.TypeOf((*MockClientInterface)(nil).CreateService), svc) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeploymentByName", reflect.TypeOf((*MockClientInterface)(nil).GetDeploymentByName), name) } -// CreateTLSSecret mocks base method. -func (m *MockClientInterface) CreateTLSSecret(tlsCertificate, tlsPrivKey []byte, objectMeta v12.ObjectMeta) (*v11.Secret, error) { +// GetOneDeployment mocks base method +func (m *MockClientInterface) GetOneDeployment(componentName, appName string, isPartOfComponent bool) (*v10.Deployment, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateTLSSecret", tlsCertificate, tlsPrivKey, objectMeta) - ret0, _ := ret[0].(*v11.Secret) + ret := m.ctrl.Call(m, "GetOneDeployment", componentName, appName, isPartOfComponent) + ret0, _ := ret[0].(*v10.Deployment) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreateTLSSecret indicates an expected call of CreateTLSSecret. -func (mr *MockClientInterfaceMockRecorder) CreateTLSSecret(tlsCertificate, tlsPrivKey, objectMeta interface{}) *gomock.Call { +// GetOneDeployment indicates an expected call of GetOneDeployment +func (mr *MockClientInterfaceMockRecorder) GetOneDeployment(componentName, appName, isPartOfComponent interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateTLSSecret", reflect.TypeOf((*MockClientInterface)(nil).CreateTLSSecret), tlsCertificate, tlsPrivKey, objectMeta) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOneDeployment", reflect.TypeOf((*MockClientInterface)(nil).GetOneDeployment), componentName, appName, isPartOfComponent) } -// DeleteDynamicResource mocks base method. -func (m *MockClientInterface) DeleteDynamicResource(name string, gvr schema.GroupVersionResource, wait bool) error { +// GetOneDeploymentFromSelector mocks base method +func (m *MockClientInterface) GetOneDeploymentFromSelector(selector string) (*v10.Deployment, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteDynamicResource", name, gvr, wait) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "GetOneDeploymentFromSelector", selector) + ret0, _ := ret[0].(*v10.Deployment) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// DeleteDynamicResource indicates an expected call of DeleteDynamicResource. -func (mr *MockClientInterfaceMockRecorder) DeleteDynamicResource(name, gvr, wait interface{}) *gomock.Call { +// GetOneDeploymentFromSelector indicates an expected call of GetOneDeploymentFromSelector +func (mr *MockClientInterfaceMockRecorder) GetOneDeploymentFromSelector(selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteDynamicResource", reflect.TypeOf((*MockClientInterface)(nil).DeleteDynamicResource), name, gvr, wait) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOneDeploymentFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetOneDeploymentFromSelector), selector) } -// DeleteNamespace mocks base method. -func (m *MockClientInterface) DeleteNamespace(name string, wait bool) error { +// GetDeploymentFromSelector mocks base method +func (m *MockClientInterface) GetDeploymentFromSelector(selector string) ([]v10.Deployment, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteNamespace", name, wait) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "GetDeploymentFromSelector", selector) + ret0, _ := ret[0].([]v10.Deployment) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// DeleteNamespace indicates an expected call of DeleteNamespace. -func (mr *MockClientInterfaceMockRecorder) DeleteNamespace(name, wait interface{}) *gomock.Call { +// GetDeploymentFromSelector indicates an expected call of GetDeploymentFromSelector +func (mr *MockClientInterfaceMockRecorder) GetDeploymentFromSelector(selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteNamespace", reflect.TypeOf((*MockClientInterface)(nil).DeleteNamespace), name, wait) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeploymentFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetDeploymentFromSelector), selector) } -// DeletePVC mocks base method. -func (m *MockClientInterface) DeletePVC(pvcName string) error { +// CreateDeployment mocks base method +func (m *MockClientInterface) CreateDeployment(deploy v10.Deployment) (*v10.Deployment, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeletePVC", pvcName) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "CreateDeployment", deploy) + ret0, _ := ret[0].(*v10.Deployment) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// DeletePVC indicates an expected call of DeletePVC. -func (mr *MockClientInterfaceMockRecorder) DeletePVC(pvcName interface{}) *gomock.Call { +// CreateDeployment indicates an expected call of CreateDeployment +func (mr *MockClientInterfaceMockRecorder) CreateDeployment(deploy interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePVC", reflect.TypeOf((*MockClientInterface)(nil).DeletePVC), pvcName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDeployment", reflect.TypeOf((*MockClientInterface)(nil).CreateDeployment), deploy) } -// DeleteProject mocks base method. -func (m *MockClientInterface) DeleteProject(name string, wait bool) error { +// UpdateDeployment mocks base method +func (m *MockClientInterface) UpdateDeployment(deploy v10.Deployment) (*v10.Deployment, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteProject", name, wait) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "UpdateDeployment", deploy) + ret0, _ := ret[0].(*v10.Deployment) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// DeleteProject indicates an expected call of DeleteProject. -func (mr *MockClientInterfaceMockRecorder) DeleteProject(name, wait interface{}) *gomock.Call { +// UpdateDeployment indicates an expected call of UpdateDeployment +func (mr *MockClientInterfaceMockRecorder) UpdateDeployment(deploy interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteProject", reflect.TypeOf((*MockClientInterface)(nil).DeleteProject), name, wait) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDeployment", reflect.TypeOf((*MockClientInterface)(nil).UpdateDeployment), deploy) } -// DeleteSecret mocks base method. -func (m *MockClientInterface) DeleteSecret(secretName, namespace string) error { +// ApplyDeployment mocks base method +func (m *MockClientInterface) ApplyDeployment(deploy v10.Deployment) (*v10.Deployment, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteSecret", secretName, namespace) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "ApplyDeployment", deploy) + ret0, _ := ret[0].(*v10.Deployment) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// DeleteSecret indicates an expected call of DeleteSecret. -func (mr *MockClientInterfaceMockRecorder) DeleteSecret(secretName, namespace interface{}) *gomock.Call { +// ApplyDeployment indicates an expected call of ApplyDeployment +func (mr *MockClientInterfaceMockRecorder) ApplyDeployment(deploy interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSecret", reflect.TypeOf((*MockClientInterface)(nil).DeleteSecret), secretName, namespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ApplyDeployment", reflect.TypeOf((*MockClientInterface)(nil).ApplyDeployment), deploy) } -// DeleteService mocks base method. -func (m *MockClientInterface) DeleteService(serviceName string) error { +// GetDeploymentAPIVersion mocks base method +func (m *MockClientInterface) GetDeploymentAPIVersion() (schema.GroupVersionKind, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteService", serviceName) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "GetDeploymentAPIVersion") + ret0, _ := ret[0].(schema.GroupVersionKind) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// DeleteService indicates an expected call of DeleteService. -func (mr *MockClientInterfaceMockRecorder) DeleteService(serviceName interface{}) *gomock.Call { +// GetDeploymentAPIVersion indicates an expected call of GetDeploymentAPIVersion +func (mr *MockClientInterfaceMockRecorder) GetDeploymentAPIVersion() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteService", reflect.TypeOf((*MockClientInterface)(nil).DeleteService), serviceName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeploymentAPIVersion", reflect.TypeOf((*MockClientInterface)(nil).GetDeploymentAPIVersion)) +} + +// IsDeploymentExtensionsV1Beta1 mocks base method +func (m *MockClientInterface) IsDeploymentExtensionsV1Beta1() (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "IsDeploymentExtensionsV1Beta1") + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// IsDeploymentExtensionsV1Beta1 indicates an expected call of IsDeploymentExtensionsV1Beta1 +func (mr *MockClientInterfaceMockRecorder) IsDeploymentExtensionsV1Beta1() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsDeploymentExtensionsV1Beta1", reflect.TypeOf((*MockClientInterface)(nil).IsDeploymentExtensionsV1Beta1)) } -// DeploymentWatcher mocks base method. +// DeploymentWatcher mocks base method func (m *MockClientInterface) DeploymentWatcher(ctx context.Context, selector string) (watch.Interface, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DeploymentWatcher", ctx, selector) @@ -308,145 +363,102 @@ func (m *MockClientInterface) DeploymentWatcher(ctx context.Context, selector st return ret0, ret1 } -// DeploymentWatcher indicates an expected call of DeploymentWatcher. +// DeploymentWatcher indicates an expected call of DeploymentWatcher func (mr *MockClientInterfaceMockRecorder) DeploymentWatcher(ctx, selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeploymentWatcher", reflect.TypeOf((*MockClientInterface)(nil).DeploymentWatcher), ctx, selector) } -// ExecCMDInContainer mocks base method. -func (m *MockClientInterface) ExecCMDInContainer(containerName, podName string, cmd []string, stdout, stderr io.Writer, stdin io.Reader, tty bool) error { +// PatchDynamicResource mocks base method +func (m *MockClientInterface) PatchDynamicResource(exampleCustomResource unstructured.Unstructured) (bool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ExecCMDInContainer", containerName, podName, cmd, stdout, stderr, stdin, tty) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "PatchDynamicResource", exampleCustomResource) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// ExecCMDInContainer indicates an expected call of ExecCMDInContainer. -func (mr *MockClientInterfaceMockRecorder) ExecCMDInContainer(containerName, podName, cmd, stdout, stderr, stdin, tty interface{}) *gomock.Call { +// PatchDynamicResource indicates an expected call of PatchDynamicResource +func (mr *MockClientInterfaceMockRecorder) PatchDynamicResource(exampleCustomResource interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExecCMDInContainer", reflect.TypeOf((*MockClientInterface)(nil).ExecCMDInContainer), containerName, podName, cmd, stdout, stderr, stdin, tty) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PatchDynamicResource", reflect.TypeOf((*MockClientInterface)(nil).PatchDynamicResource), exampleCustomResource) } -// ExtractProjectToComponent mocks base method. -func (m *MockClientInterface) ExtractProjectToComponent(containerName, podName, targetPath string, stdin io.Reader) error { +// ListDynamicResources mocks base method +func (m *MockClientInterface) ListDynamicResources(namespace string, gvr schema.GroupVersionResource) (*unstructured.UnstructuredList, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ExtractProjectToComponent", containerName, podName, targetPath, stdin) - ret0, _ := ret[0].(error) - return ret0 -} - -// ExtractProjectToComponent indicates an expected call of ExtractProjectToComponent. -func (mr *MockClientInterfaceMockRecorder) ExtractProjectToComponent(containerName, podName, targetPath, stdin interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExtractProjectToComponent", reflect.TypeOf((*MockClientInterface)(nil).ExtractProjectToComponent), containerName, podName, targetPath, stdin) -} - -// GeneratePortForwardReq mocks base method. -func (m *MockClientInterface) GeneratePortForwardReq(podName string) *rest.Request { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GeneratePortForwardReq", podName) - ret0, _ := ret[0].(*rest.Request) - return ret0 -} - -// GeneratePortForwardReq indicates an expected call of GeneratePortForwardReq. -func (mr *MockClientInterfaceMockRecorder) GeneratePortForwardReq(podName interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GeneratePortForwardReq", reflect.TypeOf((*MockClientInterface)(nil).GeneratePortForwardReq), podName) -} - -// GetAllPodsInNamespace mocks base method. -func (m *MockClientInterface) GetAllPodsInNamespace() (*v11.PodList, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetAllPodsInNamespace") - ret0, _ := ret[0].(*v11.PodList) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetAllPodsInNamespace indicates an expected call of GetAllPodsInNamespace. -func (mr *MockClientInterfaceMockRecorder) GetAllPodsInNamespace() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllPodsInNamespace", reflect.TypeOf((*MockClientInterface)(nil).GetAllPodsInNamespace)) -} - -// GetAllResourcesFromSelector mocks base method. -func (m *MockClientInterface) GetAllResourcesFromSelector(selector, ns string) ([]unstructured.Unstructured, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetAllResourcesFromSelector", selector, ns) - ret0, _ := ret[0].([]unstructured.Unstructured) + ret := m.ctrl.Call(m, "ListDynamicResources", namespace, gvr) + ret0, _ := ret[0].(*unstructured.UnstructuredList) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetAllResourcesFromSelector indicates an expected call of GetAllResourcesFromSelector. -func (mr *MockClientInterfaceMockRecorder) GetAllResourcesFromSelector(selector, ns interface{}) *gomock.Call { +// ListDynamicResources indicates an expected call of ListDynamicResources +func (mr *MockClientInterfaceMockRecorder) ListDynamicResources(namespace, gvr interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllResourcesFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetAllResourcesFromSelector), selector, ns) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDynamicResources", reflect.TypeOf((*MockClientInterface)(nil).ListDynamicResources), namespace, gvr) } -// GetBindableKindStatusRestMapping mocks base method. -func (m *MockClientInterface) GetBindableKindStatusRestMapping(bindableKindStatuses []v1alpha10.BindableKindsStatus) ([]*meta.RESTMapping, error) { +// GetDynamicResource mocks base method +func (m *MockClientInterface) GetDynamicResource(gvr schema.GroupVersionResource, name string) (*unstructured.Unstructured, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetBindableKindStatusRestMapping", bindableKindStatuses) - ret0, _ := ret[0].([]*meta.RESTMapping) + ret := m.ctrl.Call(m, "GetDynamicResource", gvr, name) + ret0, _ := ret[0].(*unstructured.Unstructured) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetBindableKindStatusRestMapping indicates an expected call of GetBindableKindStatusRestMapping. -func (mr *MockClientInterfaceMockRecorder) GetBindableKindStatusRestMapping(bindableKindStatuses interface{}) *gomock.Call { +// GetDynamicResource indicates an expected call of GetDynamicResource +func (mr *MockClientInterfaceMockRecorder) GetDynamicResource(gvr, name interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBindableKindStatusRestMapping", reflect.TypeOf((*MockClientInterface)(nil).GetBindableKindStatusRestMapping), bindableKindStatuses) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDynamicResource", reflect.TypeOf((*MockClientInterface)(nil).GetDynamicResource), gvr, name) } -// GetBindableKinds mocks base method. -func (m *MockClientInterface) GetBindableKinds() (v1alpha10.BindableKinds, error) { +// UpdateDynamicResource mocks base method +func (m *MockClientInterface) UpdateDynamicResource(gvr schema.GroupVersionResource, name string, u *unstructured.Unstructured) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetBindableKinds") - ret0, _ := ret[0].(v1alpha10.BindableKinds) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "UpdateDynamicResource", gvr, name, u) + ret0, _ := ret[0].(error) + return ret0 } -// GetBindableKinds indicates an expected call of GetBindableKinds. -func (mr *MockClientInterfaceMockRecorder) GetBindableKinds() *gomock.Call { +// UpdateDynamicResource indicates an expected call of UpdateDynamicResource +func (mr *MockClientInterfaceMockRecorder) UpdateDynamicResource(gvr, name, u interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBindableKinds", reflect.TypeOf((*MockClientInterface)(nil).GetBindableKinds)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDynamicResource", reflect.TypeOf((*MockClientInterface)(nil).UpdateDynamicResource), gvr, name, u) } -// GetBindingServiceBinding mocks base method. -func (m *MockClientInterface) GetBindingServiceBinding(name string) (v1alpha10.ServiceBinding, error) { +// DeleteDynamicResource mocks base method +func (m *MockClientInterface) DeleteDynamicResource(name string, gvr schema.GroupVersionResource, wait bool) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetBindingServiceBinding", name) - ret0, _ := ret[0].(v1alpha10.ServiceBinding) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "DeleteDynamicResource", name, gvr, wait) + ret0, _ := ret[0].(error) + return ret0 } -// GetBindingServiceBinding indicates an expected call of GetBindingServiceBinding. -func (mr *MockClientInterfaceMockRecorder) GetBindingServiceBinding(name interface{}) *gomock.Call { +// DeleteDynamicResource indicates an expected call of DeleteDynamicResource +func (mr *MockClientInterfaceMockRecorder) DeleteDynamicResource(name, gvr, wait interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBindingServiceBinding", reflect.TypeOf((*MockClientInterface)(nil).GetBindingServiceBinding), name) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteDynamicResource", reflect.TypeOf((*MockClientInterface)(nil).DeleteDynamicResource), name, gvr, wait) } -// GetCSVWithCR mocks base method. -func (m *MockClientInterface) GetCSVWithCR(name string) (*v1alpha1.ClusterServiceVersion, error) { +// PodWarningEventWatcher mocks base method +func (m *MockClientInterface) PodWarningEventWatcher(ctx context.Context) (watch.Interface, bool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetCSVWithCR", name) - ret0, _ := ret[0].(*v1alpha1.ClusterServiceVersion) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "PodWarningEventWatcher", ctx) + ret0, _ := ret[0].(watch.Interface) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 } -// GetCSVWithCR indicates an expected call of GetCSVWithCR. -func (mr *MockClientInterfaceMockRecorder) GetCSVWithCR(name interface{}) *gomock.Call { +// PodWarningEventWatcher indicates an expected call of PodWarningEventWatcher +func (mr *MockClientInterfaceMockRecorder) PodWarningEventWatcher(ctx interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCSVWithCR", reflect.TypeOf((*MockClientInterface)(nil).GetCSVWithCR), name) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PodWarningEventWatcher", reflect.TypeOf((*MockClientInterface)(nil).PodWarningEventWatcher), ctx) } -// GetClient mocks base method. +// GetClient mocks base method func (m *MockClientInterface) GetClient() kubernetes.Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetClient") @@ -454,27 +466,13 @@ func (m *MockClientInterface) GetClient() kubernetes.Interface { return ret0 } -// GetClient indicates an expected call of GetClient. +// GetClient indicates an expected call of GetClient func (mr *MockClientInterfaceMockRecorder) GetClient() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetClient", reflect.TypeOf((*MockClientInterface)(nil).GetClient)) } -// GetClientConfig mocks base method. -func (m *MockClientInterface) GetClientConfig() *rest.Config { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetClientConfig") - ret0, _ := ret[0].(*rest.Config) - return ret0 -} - -// GetClientConfig indicates an expected call of GetClientConfig. -func (mr *MockClientInterfaceMockRecorder) GetClientConfig() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetClientConfig", reflect.TypeOf((*MockClientInterface)(nil).GetClientConfig)) -} - -// GetConfig mocks base method. +// GetConfig mocks base method func (m *MockClientInterface) GetConfig() clientcmd.ClientConfig { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetConfig") @@ -482,159 +480,137 @@ func (m *MockClientInterface) GetConfig() clientcmd.ClientConfig { return ret0 } -// GetConfig indicates an expected call of GetConfig. +// GetConfig indicates an expected call of GetConfig func (mr *MockClientInterfaceMockRecorder) GetConfig() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetConfig", reflect.TypeOf((*MockClientInterface)(nil).GetConfig)) } -// GetCurrentNamespace mocks base method. -func (m *MockClientInterface) GetCurrentNamespace() string { +// GetClientConfig mocks base method +func (m *MockClientInterface) GetClientConfig() *rest.Config { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetCurrentNamespace") - ret0, _ := ret[0].(string) + ret := m.ctrl.Call(m, "GetClientConfig") + ret0, _ := ret[0].(*rest.Config) return ret0 } -// GetCurrentNamespace indicates an expected call of GetCurrentNamespace. -func (mr *MockClientInterfaceMockRecorder) GetCurrentNamespace() *gomock.Call { +// GetClientConfig indicates an expected call of GetClientConfig +func (mr *MockClientInterfaceMockRecorder) GetClientConfig() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentNamespace", reflect.TypeOf((*MockClientInterface)(nil).GetCurrentNamespace)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetClientConfig", reflect.TypeOf((*MockClientInterface)(nil).GetClientConfig)) } -// GetCurrentProjectName mocks base method. -func (m *MockClientInterface) GetCurrentProjectName() string { +// GetDynamicClient mocks base method +func (m *MockClientInterface) GetDynamicClient() dynamic.Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetCurrentProjectName") - ret0, _ := ret[0].(string) + ret := m.ctrl.Call(m, "GetDynamicClient") + ret0, _ := ret[0].(dynamic.Interface) return ret0 } -// GetCurrentProjectName indicates an expected call of GetCurrentProjectName. -func (mr *MockClientInterfaceMockRecorder) GetCurrentProjectName() *gomock.Call { +// GetDynamicClient indicates an expected call of GetDynamicClient +func (mr *MockClientInterfaceMockRecorder) GetDynamicClient() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentProjectName", reflect.TypeOf((*MockClientInterface)(nil).GetCurrentProjectName)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDynamicClient", reflect.TypeOf((*MockClientInterface)(nil).GetDynamicClient)) } -// GetCustomResourcesFromCSV mocks base method. -func (m *MockClientInterface) GetCustomResourcesFromCSV(csv *v1alpha1.ClusterServiceVersion) *[]v1alpha1.CRDDescription { +// GeneratePortForwardReq mocks base method +func (m *MockClientInterface) GeneratePortForwardReq(podName string) *rest.Request { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetCustomResourcesFromCSV", csv) - ret0, _ := ret[0].(*[]v1alpha1.CRDDescription) + ret := m.ctrl.Call(m, "GeneratePortForwardReq", podName) + ret0, _ := ret[0].(*rest.Request) return ret0 } -// GetCustomResourcesFromCSV indicates an expected call of GetCustomResourcesFromCSV. -func (mr *MockClientInterfaceMockRecorder) GetCustomResourcesFromCSV(csv interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCustomResourcesFromCSV", reflect.TypeOf((*MockClientInterface)(nil).GetCustomResourcesFromCSV), csv) -} - -// GetDeploymentAPIVersion mocks base method. -func (m *MockClientInterface) GetDeploymentAPIVersion() (schema.GroupVersionKind, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDeploymentAPIVersion") - ret0, _ := ret[0].(schema.GroupVersionKind) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetDeploymentAPIVersion indicates an expected call of GetDeploymentAPIVersion. -func (mr *MockClientInterfaceMockRecorder) GetDeploymentAPIVersion() *gomock.Call { +// GeneratePortForwardReq indicates an expected call of GeneratePortForwardReq +func (mr *MockClientInterfaceMockRecorder) GeneratePortForwardReq(podName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeploymentAPIVersion", reflect.TypeOf((*MockClientInterface)(nil).GetDeploymentAPIVersion)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GeneratePortForwardReq", reflect.TypeOf((*MockClientInterface)(nil).GeneratePortForwardReq), podName) } -// GetDeploymentByName mocks base method. -func (m *MockClientInterface) GetDeploymentByName(name string) (*v10.Deployment, error) { +// SetDiscoveryInterface mocks base method +func (m *MockClientInterface) SetDiscoveryInterface(client discovery.DiscoveryInterface) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDeploymentByName", name) - ret0, _ := ret[0].(*v10.Deployment) - ret1, _ := ret[1].(error) - return ret0, ret1 + m.ctrl.Call(m, "SetDiscoveryInterface", client) } -// GetDeploymentByName indicates an expected call of GetDeploymentByName. -func (mr *MockClientInterfaceMockRecorder) GetDeploymentByName(name interface{}) *gomock.Call { +// SetDiscoveryInterface indicates an expected call of SetDiscoveryInterface +func (mr *MockClientInterfaceMockRecorder) SetDiscoveryInterface(client interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeploymentByName", reflect.TypeOf((*MockClientInterface)(nil).GetDeploymentByName), name) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetDiscoveryInterface", reflect.TypeOf((*MockClientInterface)(nil).SetDiscoveryInterface), client) } -// GetDeploymentFromSelector mocks base method. -func (m *MockClientInterface) GetDeploymentFromSelector(selector string) ([]v10.Deployment, error) { +// IsResourceSupported mocks base method +func (m *MockClientInterface) IsResourceSupported(apiGroup, apiVersion, resourceName string) (bool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDeploymentFromSelector", selector) - ret0, _ := ret[0].([]v10.Deployment) + ret := m.ctrl.Call(m, "IsResourceSupported", apiGroup, apiVersion, resourceName) + ret0, _ := ret[0].(bool) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetDeploymentFromSelector indicates an expected call of GetDeploymentFromSelector. -func (mr *MockClientInterfaceMockRecorder) GetDeploymentFromSelector(selector interface{}) *gomock.Call { +// IsResourceSupported indicates an expected call of IsResourceSupported +func (mr *MockClientInterfaceMockRecorder) IsResourceSupported(apiGroup, apiVersion, resourceName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeploymentFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetDeploymentFromSelector), selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsResourceSupported", reflect.TypeOf((*MockClientInterface)(nil).IsResourceSupported), apiGroup, apiVersion, resourceName) } -// GetDynamicClient mocks base method. -func (m *MockClientInterface) GetDynamicClient() dynamic.Interface { +// IsSSASupported mocks base method +func (m *MockClientInterface) IsSSASupported() bool { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDynamicClient") - ret0, _ := ret[0].(dynamic.Interface) + ret := m.ctrl.Call(m, "IsSSASupported") + ret0, _ := ret[0].(bool) return ret0 } -// GetDynamicClient indicates an expected call of GetDynamicClient. -func (mr *MockClientInterfaceMockRecorder) GetDynamicClient() *gomock.Call { +// IsSSASupported indicates an expected call of IsSSASupported +func (mr *MockClientInterfaceMockRecorder) IsSSASupported() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDynamicClient", reflect.TypeOf((*MockClientInterface)(nil).GetDynamicClient)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsSSASupported", reflect.TypeOf((*MockClientInterface)(nil).IsSSASupported)) } -// GetDynamicResource mocks base method. -func (m *MockClientInterface) GetDynamicResource(gvr schema.GroupVersionResource, name string) (*unstructured.Unstructured, error) { +// GetCurrentNamespace mocks base method +func (m *MockClientInterface) GetCurrentNamespace() string { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDynamicResource", gvr, name) - ret0, _ := ret[0].(*unstructured.Unstructured) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "GetCurrentNamespace") + ret0, _ := ret[0].(string) + return ret0 } -// GetDynamicResource indicates an expected call of GetDynamicResource. -func (mr *MockClientInterfaceMockRecorder) GetDynamicResource(gvr, name interface{}) *gomock.Call { +// GetCurrentNamespace indicates an expected call of GetCurrentNamespace +func (mr *MockClientInterfaceMockRecorder) GetCurrentNamespace() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDynamicResource", reflect.TypeOf((*MockClientInterface)(nil).GetDynamicResource), gvr, name) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentNamespace", reflect.TypeOf((*MockClientInterface)(nil).GetCurrentNamespace)) } -// GetGVKFromGVR mocks base method. -func (m *MockClientInterface) GetGVKFromGVR(gvr schema.GroupVersionResource) (schema.GroupVersionKind, error) { +// SetNamespace mocks base method +func (m *MockClientInterface) SetNamespace(ns string) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetGVKFromGVR", gvr) - ret0, _ := ret[0].(schema.GroupVersionKind) - ret1, _ := ret[1].(error) - return ret0, ret1 + m.ctrl.Call(m, "SetNamespace", ns) } -// GetGVKFromGVR indicates an expected call of GetGVKFromGVR. -func (mr *MockClientInterfaceMockRecorder) GetGVKFromGVR(gvr interface{}) *gomock.Call { +// SetNamespace indicates an expected call of SetNamespace +func (mr *MockClientInterfaceMockRecorder) SetNamespace(ns interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGVKFromGVR", reflect.TypeOf((*MockClientInterface)(nil).GetGVKFromGVR), gvr) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetNamespace", reflect.TypeOf((*MockClientInterface)(nil).SetNamespace), ns) } -// GetGVRFromGVK mocks base method. -func (m *MockClientInterface) GetGVRFromGVK(gvk schema.GroupVersionKind) (schema.GroupVersionResource, error) { +// GetNamespaces mocks base method +func (m *MockClientInterface) GetNamespaces() ([]string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetGVRFromGVK", gvk) - ret0, _ := ret[0].(schema.GroupVersionResource) + ret := m.ctrl.Call(m, "GetNamespaces") + ret0, _ := ret[0].([]string) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetGVRFromGVK indicates an expected call of GetGVRFromGVK. -func (mr *MockClientInterfaceMockRecorder) GetGVRFromGVK(gvk interface{}) *gomock.Call { +// GetNamespaces indicates an expected call of GetNamespaces +func (mr *MockClientInterfaceMockRecorder) GetNamespaces() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGVRFromGVK", reflect.TypeOf((*MockClientInterface)(nil).GetGVRFromGVK), gvk) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNamespaces", reflect.TypeOf((*MockClientInterface)(nil).GetNamespaces)) } -// GetNamespace mocks base method. +// GetNamespace mocks base method func (m *MockClientInterface) GetNamespace(name string) (*v11.Namespace, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetNamespace", name) @@ -643,13 +619,13 @@ func (m *MockClientInterface) GetNamespace(name string) (*v11.Namespace, error) return ret0, ret1 } -// GetNamespace indicates an expected call of GetNamespace. +// GetNamespace indicates an expected call of GetNamespace func (mr *MockClientInterfaceMockRecorder) GetNamespace(name interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNamespace", reflect.TypeOf((*MockClientInterface)(nil).GetNamespace), name) } -// GetNamespaceNormal mocks base method. +// GetNamespaceNormal mocks base method func (m *MockClientInterface) GetNamespaceNormal(name string) (*v11.Namespace, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetNamespaceNormal", name) @@ -658,193 +634,174 @@ func (m *MockClientInterface) GetNamespaceNormal(name string) (*v11.Namespace, e return ret0, ret1 } -// GetNamespaceNormal indicates an expected call of GetNamespaceNormal. +// GetNamespaceNormal indicates an expected call of GetNamespaceNormal func (mr *MockClientInterfaceMockRecorder) GetNamespaceNormal(name interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNamespaceNormal", reflect.TypeOf((*MockClientInterface)(nil).GetNamespaceNormal), name) } -// GetNamespaces mocks base method. -func (m *MockClientInterface) GetNamespaces() ([]string, error) { +// CreateNamespace mocks base method +func (m *MockClientInterface) CreateNamespace(name string) (*v11.Namespace, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetNamespaces") - ret0, _ := ret[0].([]string) + ret := m.ctrl.Call(m, "CreateNamespace", name) + ret0, _ := ret[0].(*v11.Namespace) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetNamespaces indicates an expected call of GetNamespaces. -func (mr *MockClientInterfaceMockRecorder) GetNamespaces() *gomock.Call { +// CreateNamespace indicates an expected call of CreateNamespace +func (mr *MockClientInterfaceMockRecorder) CreateNamespace(name interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNamespaces", reflect.TypeOf((*MockClientInterface)(nil).GetNamespaces)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateNamespace", reflect.TypeOf((*MockClientInterface)(nil).CreateNamespace), name) } -// GetOneDeployment mocks base method. -func (m *MockClientInterface) GetOneDeployment(componentName, appName string) (*v10.Deployment, error) { +// DeleteNamespace mocks base method +func (m *MockClientInterface) DeleteNamespace(name string, wait bool) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOneDeployment", componentName, appName) - ret0, _ := ret[0].(*v10.Deployment) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "DeleteNamespace", name, wait) + ret0, _ := ret[0].(error) + return ret0 } -// GetOneDeployment indicates an expected call of GetOneDeployment. -func (mr *MockClientInterfaceMockRecorder) GetOneDeployment(componentName, appName interface{}) *gomock.Call { +// DeleteNamespace indicates an expected call of DeleteNamespace +func (mr *MockClientInterfaceMockRecorder) DeleteNamespace(name, wait interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOneDeployment", reflect.TypeOf((*MockClientInterface)(nil).GetOneDeployment), componentName, appName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteNamespace", reflect.TypeOf((*MockClientInterface)(nil).DeleteNamespace), name, wait) } -// GetOneDeploymentFromSelector mocks base method. -func (m *MockClientInterface) GetOneDeploymentFromSelector(selector string) (*v10.Deployment, error) { +// SetCurrentNamespace mocks base method +func (m *MockClientInterface) SetCurrentNamespace(namespace string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOneDeploymentFromSelector", selector) - ret0, _ := ret[0].(*v10.Deployment) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "SetCurrentNamespace", namespace) + ret0, _ := ret[0].(error) + return ret0 } -// GetOneDeploymentFromSelector indicates an expected call of GetOneDeploymentFromSelector. -func (mr *MockClientInterfaceMockRecorder) GetOneDeploymentFromSelector(selector interface{}) *gomock.Call { +// SetCurrentNamespace indicates an expected call of SetCurrentNamespace +func (mr *MockClientInterfaceMockRecorder) SetCurrentNamespace(namespace interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOneDeploymentFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetOneDeploymentFromSelector), selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetCurrentNamespace", reflect.TypeOf((*MockClientInterface)(nil).SetCurrentNamespace), namespace) } -// GetOneService mocks base method. -func (m *MockClientInterface) GetOneService(componentName, appName string) (*v11.Service, error) { +// WaitForServiceAccountInNamespace mocks base method +func (m *MockClientInterface) WaitForServiceAccountInNamespace(namespace, serviceAccountName string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOneService", componentName, appName) - ret0, _ := ret[0].(*v11.Service) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetOneService indicates an expected call of GetOneService. -func (mr *MockClientInterfaceMockRecorder) GetOneService(componentName, appName interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOneService", reflect.TypeOf((*MockClientInterface)(nil).GetOneService), componentName, appName) -} - -// GetOneServiceFromSelector mocks base method. -func (m *MockClientInterface) GetOneServiceFromSelector(selector string) (*v11.Service, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOneServiceFromSelector", selector) - ret0, _ := ret[0].(*v11.Service) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "WaitForServiceAccountInNamespace", namespace, serviceAccountName) + ret0, _ := ret[0].(error) + return ret0 } -// GetOneServiceFromSelector indicates an expected call of GetOneServiceFromSelector. -func (mr *MockClientInterfaceMockRecorder) GetOneServiceFromSelector(selector interface{}) *gomock.Call { +// WaitForServiceAccountInNamespace indicates an expected call of WaitForServiceAccountInNamespace +func (mr *MockClientInterfaceMockRecorder) WaitForServiceAccountInNamespace(namespace, serviceAccountName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOneServiceFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetOneServiceFromSelector), selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WaitForServiceAccountInNamespace", reflect.TypeOf((*MockClientInterface)(nil).WaitForServiceAccountInNamespace), namespace, serviceAccountName) } -// GetOperatorGVRList mocks base method. -func (m *MockClientInterface) GetOperatorGVRList() ([]meta.RESTMapping, error) { +// GetServerVersion mocks base method +func (m *MockClientInterface) GetServerVersion(timeout time.Duration) (*ServerInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOperatorGVRList") - ret0, _ := ret[0].([]meta.RESTMapping) + ret := m.ctrl.Call(m, "GetServerVersion", timeout) + ret0, _ := ret[0].(*ServerInfo) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetOperatorGVRList indicates an expected call of GetOperatorGVRList. -func (mr *MockClientInterfaceMockRecorder) GetOperatorGVRList() *gomock.Call { +// GetServerVersion indicates an expected call of GetServerVersion +func (mr *MockClientInterfaceMockRecorder) GetServerVersion(timeout interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorGVRList", reflect.TypeOf((*MockClientInterface)(nil).GetOperatorGVRList)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServerVersion", reflect.TypeOf((*MockClientInterface)(nil).GetServerVersion), timeout) } -// GetPVCFromName mocks base method. -func (m *MockClientInterface) GetPVCFromName(pvcName string) (*v11.PersistentVolumeClaim, error) { +// IsCSVSupported mocks base method +func (m *MockClientInterface) IsCSVSupported() (bool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetPVCFromName", pvcName) - ret0, _ := ret[0].(*v11.PersistentVolumeClaim) + ret := m.ctrl.Call(m, "IsCSVSupported") + ret0, _ := ret[0].(bool) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetPVCFromName indicates an expected call of GetPVCFromName. -func (mr *MockClientInterfaceMockRecorder) GetPVCFromName(pvcName interface{}) *gomock.Call { +// IsCSVSupported indicates an expected call of IsCSVSupported +func (mr *MockClientInterfaceMockRecorder) IsCSVSupported() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPVCFromName", reflect.TypeOf((*MockClientInterface)(nil).GetPVCFromName), pvcName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsCSVSupported", reflect.TypeOf((*MockClientInterface)(nil).IsCSVSupported)) } -// GetPodLogs mocks base method. -func (m *MockClientInterface) GetPodLogs(podName, containerName string, followLog bool) (io.ReadCloser, error) { +// ListClusterServiceVersions mocks base method +func (m *MockClientInterface) ListClusterServiceVersions() (*v1alpha1.ClusterServiceVersionList, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetPodLogs", podName, containerName, followLog) - ret0, _ := ret[0].(io.ReadCloser) + ret := m.ctrl.Call(m, "ListClusterServiceVersions") + ret0, _ := ret[0].(*v1alpha1.ClusterServiceVersionList) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetPodLogs indicates an expected call of GetPodLogs. -func (mr *MockClientInterfaceMockRecorder) GetPodLogs(podName, containerName, followLog interface{}) *gomock.Call { +// ListClusterServiceVersions indicates an expected call of ListClusterServiceVersions +func (mr *MockClientInterfaceMockRecorder) ListClusterServiceVersions() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPodLogs", reflect.TypeOf((*MockClientInterface)(nil).GetPodLogs), podName, containerName, followLog) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListClusterServiceVersions", reflect.TypeOf((*MockClientInterface)(nil).ListClusterServiceVersions)) } -// GetPodUsingComponentName mocks base method. -func (m *MockClientInterface) GetPodUsingComponentName(componentName string) (*v11.Pod, error) { +// GetCustomResourcesFromCSV mocks base method +func (m *MockClientInterface) GetCustomResourcesFromCSV(csv *v1alpha1.ClusterServiceVersion) *[]v1alpha1.CRDDescription { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetPodUsingComponentName", componentName) - ret0, _ := ret[0].(*v11.Pod) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "GetCustomResourcesFromCSV", csv) + ret0, _ := ret[0].(*[]v1alpha1.CRDDescription) + return ret0 } -// GetPodUsingComponentName indicates an expected call of GetPodUsingComponentName. -func (mr *MockClientInterfaceMockRecorder) GetPodUsingComponentName(componentName interface{}) *gomock.Call { +// GetCustomResourcesFromCSV indicates an expected call of GetCustomResourcesFromCSV +func (mr *MockClientInterfaceMockRecorder) GetCustomResourcesFromCSV(csv interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPodUsingComponentName", reflect.TypeOf((*MockClientInterface)(nil).GetPodUsingComponentName), componentName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCustomResourcesFromCSV", reflect.TypeOf((*MockClientInterface)(nil).GetCustomResourcesFromCSV), csv) } -// GetPodsMatchingSelector mocks base method. -func (m *MockClientInterface) GetPodsMatchingSelector(selector string) (*v11.PodList, error) { +// GetCSVWithCR mocks base method +func (m *MockClientInterface) GetCSVWithCR(name string) (*v1alpha1.ClusterServiceVersion, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetPodsMatchingSelector", selector) - ret0, _ := ret[0].(*v11.PodList) + ret := m.ctrl.Call(m, "GetCSVWithCR", name) + ret0, _ := ret[0].(*v1alpha1.ClusterServiceVersion) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetPodsMatchingSelector indicates an expected call of GetPodsMatchingSelector. -func (mr *MockClientInterfaceMockRecorder) GetPodsMatchingSelector(selector interface{}) *gomock.Call { +// GetCSVWithCR indicates an expected call of GetCSVWithCR +func (mr *MockClientInterfaceMockRecorder) GetCSVWithCR(name interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPodsMatchingSelector", reflect.TypeOf((*MockClientInterface)(nil).GetPodsMatchingSelector), selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCSVWithCR", reflect.TypeOf((*MockClientInterface)(nil).GetCSVWithCR), name) } -// GetProject mocks base method. -func (m *MockClientInterface) GetProject(projectName string) (*v1.Project, error) { +// GetResourceSpecDefinition mocks base method +func (m *MockClientInterface) GetResourceSpecDefinition(group, version, kind string) (*spec.Schema, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetProject", projectName) - ret0, _ := ret[0].(*v1.Project) + ret := m.ctrl.Call(m, "GetResourceSpecDefinition", group, version, kind) + ret0, _ := ret[0].(*spec.Schema) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetProject indicates an expected call of GetProject. -func (mr *MockClientInterfaceMockRecorder) GetProject(projectName interface{}) *gomock.Call { +// GetResourceSpecDefinition indicates an expected call of GetResourceSpecDefinition +func (mr *MockClientInterfaceMockRecorder) GetResourceSpecDefinition(group, version, kind interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProject", reflect.TypeOf((*MockClientInterface)(nil).GetProject), projectName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetResourceSpecDefinition", reflect.TypeOf((*MockClientInterface)(nil).GetResourceSpecDefinition), group, version, kind) } -// GetResourceSpecDefinition mocks base method. -func (m *MockClientInterface) GetResourceSpecDefinition(group, version, kind string) (*spec.Schema, error) { +// GetRestMappingFromUnstructured mocks base method +func (m *MockClientInterface) GetRestMappingFromUnstructured(arg0 unstructured.Unstructured) (*meta.RESTMapping, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetResourceSpecDefinition", group, version, kind) - ret0, _ := ret[0].(*spec.Schema) + ret := m.ctrl.Call(m, "GetRestMappingFromUnstructured", arg0) + ret0, _ := ret[0].(*meta.RESTMapping) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetResourceSpecDefinition indicates an expected call of GetResourceSpecDefinition. -func (mr *MockClientInterfaceMockRecorder) GetResourceSpecDefinition(group, version, kind interface{}) *gomock.Call { +// GetRestMappingFromUnstructured indicates an expected call of GetRestMappingFromUnstructured +func (mr *MockClientInterfaceMockRecorder) GetRestMappingFromUnstructured(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetResourceSpecDefinition", reflect.TypeOf((*MockClientInterface)(nil).GetResourceSpecDefinition), group, version, kind) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRestMappingFromUnstructured", reflect.TypeOf((*MockClientInterface)(nil).GetRestMappingFromUnstructured), arg0) } -// GetRestMappingFromGVK mocks base method. +// GetRestMappingFromGVK mocks base method func (m *MockClientInterface) GetRestMappingFromGVK(gvk schema.GroupVersionKind) (*meta.RESTMapping, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetRestMappingFromGVK", gvk) @@ -853,268 +810,291 @@ func (m *MockClientInterface) GetRestMappingFromGVK(gvk schema.GroupVersionKind) return ret0, ret1 } -// GetRestMappingFromGVK indicates an expected call of GetRestMappingFromGVK. +// GetRestMappingFromGVK indicates an expected call of GetRestMappingFromGVK func (mr *MockClientInterfaceMockRecorder) GetRestMappingFromGVK(gvk interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRestMappingFromGVK", reflect.TypeOf((*MockClientInterface)(nil).GetRestMappingFromGVK), gvk) } -// GetRestMappingFromUnstructured mocks base method. -func (m *MockClientInterface) GetRestMappingFromUnstructured(arg0 unstructured.Unstructured) (*meta.RESTMapping, error) { +// GetOperatorGVRList mocks base method +func (m *MockClientInterface) GetOperatorGVRList() ([]meta.RESTMapping, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetRestMappingFromUnstructured", arg0) - ret0, _ := ret[0].(*meta.RESTMapping) + ret := m.ctrl.Call(m, "GetOperatorGVRList") + ret0, _ := ret[0].([]meta.RESTMapping) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetRestMappingFromUnstructured indicates an expected call of GetRestMappingFromUnstructured. -func (mr *MockClientInterfaceMockRecorder) GetRestMappingFromUnstructured(arg0 interface{}) *gomock.Call { +// GetOperatorGVRList indicates an expected call of GetOperatorGVRList +func (mr *MockClientInterfaceMockRecorder) GetOperatorGVRList() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRestMappingFromUnstructured", reflect.TypeOf((*MockClientInterface)(nil).GetRestMappingFromUnstructured), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOperatorGVRList", reflect.TypeOf((*MockClientInterface)(nil).GetOperatorGVRList)) } -// GetRunningPodFromSelector mocks base method. -func (m *MockClientInterface) GetRunningPodFromSelector(selector string) (*v11.Pod, error) { +// GetGVKFromGVR mocks base method +func (m *MockClientInterface) GetGVKFromGVR(gvr schema.GroupVersionResource) (schema.GroupVersionKind, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetRunningPodFromSelector", selector) - ret0, _ := ret[0].(*v11.Pod) + ret := m.ctrl.Call(m, "GetGVKFromGVR", gvr) + ret0, _ := ret[0].(schema.GroupVersionKind) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetRunningPodFromSelector indicates an expected call of GetRunningPodFromSelector. -func (mr *MockClientInterfaceMockRecorder) GetRunningPodFromSelector(selector interface{}) *gomock.Call { +// GetGVKFromGVR indicates an expected call of GetGVKFromGVR +func (mr *MockClientInterfaceMockRecorder) GetGVKFromGVR(gvr interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRunningPodFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetRunningPodFromSelector), selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGVKFromGVR", reflect.TypeOf((*MockClientInterface)(nil).GetGVKFromGVR), gvr) } -// GetSecret mocks base method. -func (m *MockClientInterface) GetSecret(name, namespace string) (*v11.Secret, error) { +// GetGVRFromGVK mocks base method +func (m *MockClientInterface) GetGVRFromGVK(gvk schema.GroupVersionKind) (schema.GroupVersionResource, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetSecret", name, namespace) - ret0, _ := ret[0].(*v11.Secret) + ret := m.ctrl.Call(m, "GetGVRFromGVK", gvk) + ret0, _ := ret[0].(schema.GroupVersionResource) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetSecret indicates an expected call of GetSecret. -func (mr *MockClientInterfaceMockRecorder) GetSecret(name, namespace interface{}) *gomock.Call { +// GetGVRFromGVK indicates an expected call of GetGVRFromGVK +func (mr *MockClientInterfaceMockRecorder) GetGVRFromGVK(gvk interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSecret", reflect.TypeOf((*MockClientInterface)(nil).GetSecret), name, namespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetGVRFromGVK", reflect.TypeOf((*MockClientInterface)(nil).GetGVRFromGVK), gvk) } -// GetServerVersion mocks base method. -func (m *MockClientInterface) GetServerVersion(timeout time.Duration) (*ServerInfo, error) { +// TryWithBlockOwnerDeletion mocks base method +func (m *MockClientInterface) TryWithBlockOwnerDeletion(ownerReference v12.OwnerReference, exec func(v12.OwnerReference) error) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetServerVersion", timeout) - ret0, _ := ret[0].(*ServerInfo) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "TryWithBlockOwnerDeletion", ownerReference, exec) + ret0, _ := ret[0].(error) + return ret0 } -// GetServerVersion indicates an expected call of GetServerVersion. -func (mr *MockClientInterfaceMockRecorder) GetServerVersion(timeout interface{}) *gomock.Call { +// TryWithBlockOwnerDeletion indicates an expected call of TryWithBlockOwnerDeletion +func (mr *MockClientInterfaceMockRecorder) TryWithBlockOwnerDeletion(ownerReference, exec interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServerVersion", reflect.TypeOf((*MockClientInterface)(nil).GetServerVersion), timeout) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryWithBlockOwnerDeletion", reflect.TypeOf((*MockClientInterface)(nil).TryWithBlockOwnerDeletion), ownerReference, exec) } -// GetSpecServiceBinding mocks base method. -func (m *MockClientInterface) GetSpecServiceBinding(name string) (v1alpha3.ServiceBinding, error) { +// ExecCMDInContainer mocks base method +func (m *MockClientInterface) ExecCMDInContainer(containerName, podName string, cmd []string, stdout, stderr io.Writer, stdin io.Reader, tty bool) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetSpecServiceBinding", name) - ret0, _ := ret[0].(v1alpha3.ServiceBinding) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "ExecCMDInContainer", containerName, podName, cmd, stdout, stderr, stdin, tty) + ret0, _ := ret[0].(error) + return ret0 } -// GetSpecServiceBinding indicates an expected call of GetSpecServiceBinding. -func (mr *MockClientInterfaceMockRecorder) GetSpecServiceBinding(name interface{}) *gomock.Call { +// ExecCMDInContainer indicates an expected call of ExecCMDInContainer +func (mr *MockClientInterfaceMockRecorder) ExecCMDInContainer(containerName, podName, cmd, stdout, stderr, stdin, tty interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSpecServiceBinding", reflect.TypeOf((*MockClientInterface)(nil).GetSpecServiceBinding), name) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExecCMDInContainer", reflect.TypeOf((*MockClientInterface)(nil).ExecCMDInContainer), containerName, podName, cmd, stdout, stderr, stdin, tty) } -// GetWorkloadKinds mocks base method. -func (m *MockClientInterface) GetWorkloadKinds() ([]string, []schema.GroupVersionKind, error) { +// ExtractProjectToComponent mocks base method +func (m *MockClientInterface) ExtractProjectToComponent(containerName, podName, targetPath string, stdin io.Reader) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetWorkloadKinds") - ret0, _ := ret[0].([]string) - ret1, _ := ret[1].([]schema.GroupVersionKind) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 + ret := m.ctrl.Call(m, "ExtractProjectToComponent", containerName, podName, targetPath, stdin) + ret0, _ := ret[0].(error) + return ret0 } -// GetWorkloadKinds indicates an expected call of GetWorkloadKinds. -func (mr *MockClientInterfaceMockRecorder) GetWorkloadKinds() *gomock.Call { +// ExtractProjectToComponent indicates an expected call of ExtractProjectToComponent +func (mr *MockClientInterfaceMockRecorder) ExtractProjectToComponent(containerName, podName, targetPath, stdin interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetWorkloadKinds", reflect.TypeOf((*MockClientInterface)(nil).GetWorkloadKinds)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExtractProjectToComponent", reflect.TypeOf((*MockClientInterface)(nil).ExtractProjectToComponent), containerName, podName, targetPath, stdin) } -// IsCSVSupported mocks base method. -func (m *MockClientInterface) IsCSVSupported() (bool, error) { +// GetPodUsingComponentName mocks base method +func (m *MockClientInterface) GetPodUsingComponentName(componentName string) (*v11.Pod, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "IsCSVSupported") - ret0, _ := ret[0].(bool) + ret := m.ctrl.Call(m, "GetPodUsingComponentName", componentName) + ret0, _ := ret[0].(*v11.Pod) ret1, _ := ret[1].(error) return ret0, ret1 } -// IsCSVSupported indicates an expected call of IsCSVSupported. -func (mr *MockClientInterfaceMockRecorder) IsCSVSupported() *gomock.Call { +// GetPodUsingComponentName indicates an expected call of GetPodUsingComponentName +func (mr *MockClientInterfaceMockRecorder) GetPodUsingComponentName(componentName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsCSVSupported", reflect.TypeOf((*MockClientInterface)(nil).IsCSVSupported)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPodUsingComponentName", reflect.TypeOf((*MockClientInterface)(nil).GetPodUsingComponentName), componentName) } -// IsDeploymentExtensionsV1Beta1 mocks base method. -func (m *MockClientInterface) IsDeploymentExtensionsV1Beta1() (bool, error) { +// GetRunningPodFromSelector mocks base method +func (m *MockClientInterface) GetRunningPodFromSelector(selector string) (*v11.Pod, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "IsDeploymentExtensionsV1Beta1") - ret0, _ := ret[0].(bool) + ret := m.ctrl.Call(m, "GetRunningPodFromSelector", selector) + ret0, _ := ret[0].(*v11.Pod) ret1, _ := ret[1].(error) return ret0, ret1 } -// IsDeploymentExtensionsV1Beta1 indicates an expected call of IsDeploymentExtensionsV1Beta1. -func (mr *MockClientInterfaceMockRecorder) IsDeploymentExtensionsV1Beta1() *gomock.Call { +// GetRunningPodFromSelector indicates an expected call of GetRunningPodFromSelector +func (mr *MockClientInterfaceMockRecorder) GetRunningPodFromSelector(selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsDeploymentExtensionsV1Beta1", reflect.TypeOf((*MockClientInterface)(nil).IsDeploymentExtensionsV1Beta1)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRunningPodFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetRunningPodFromSelector), selector) } -// IsPodNameMatchingSelector mocks base method. -func (m *MockClientInterface) IsPodNameMatchingSelector(ctx context.Context, podname, selector string) (bool, error) { +// GetPodLogs mocks base method +func (m *MockClientInterface) GetPodLogs(podName, containerName string, followLog bool) (io.ReadCloser, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "IsPodNameMatchingSelector", ctx, podname, selector) - ret0, _ := ret[0].(bool) + ret := m.ctrl.Call(m, "GetPodLogs", podName, containerName, followLog) + ret0, _ := ret[0].(io.ReadCloser) ret1, _ := ret[1].(error) return ret0, ret1 } -// IsPodNameMatchingSelector indicates an expected call of IsPodNameMatchingSelector. -func (mr *MockClientInterfaceMockRecorder) IsPodNameMatchingSelector(ctx, podname, selector interface{}) *gomock.Call { +// GetPodLogs indicates an expected call of GetPodLogs +func (mr *MockClientInterfaceMockRecorder) GetPodLogs(podName, containerName, followLog interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsPodNameMatchingSelector", reflect.TypeOf((*MockClientInterface)(nil).IsPodNameMatchingSelector), ctx, podname, selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPodLogs", reflect.TypeOf((*MockClientInterface)(nil).GetPodLogs), podName, containerName, followLog) } -// IsProjectSupported mocks base method. -func (m *MockClientInterface) IsProjectSupported() (bool, error) { +// GetAllPodsInNamespace mocks base method +func (m *MockClientInterface) GetAllPodsInNamespace() (*v11.PodList, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "IsProjectSupported") - ret0, _ := ret[0].(bool) + ret := m.ctrl.Call(m, "GetAllPodsInNamespace") + ret0, _ := ret[0].(*v11.PodList) ret1, _ := ret[1].(error) return ret0, ret1 } -// IsProjectSupported indicates an expected call of IsProjectSupported. -func (mr *MockClientInterfaceMockRecorder) IsProjectSupported() *gomock.Call { +// GetAllPodsInNamespace indicates an expected call of GetAllPodsInNamespace +func (mr *MockClientInterfaceMockRecorder) GetAllPodsInNamespace() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsProjectSupported", reflect.TypeOf((*MockClientInterface)(nil).IsProjectSupported)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllPodsInNamespace", reflect.TypeOf((*MockClientInterface)(nil).GetAllPodsInNamespace)) } -// IsResourceSupported mocks base method. -func (m *MockClientInterface) IsResourceSupported(apiGroup, apiVersion, resourceName string) (bool, error) { +// GetPodsMatchingSelector mocks base method +func (m *MockClientInterface) GetPodsMatchingSelector(selector string) (*v11.PodList, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "IsResourceSupported", apiGroup, apiVersion, resourceName) - ret0, _ := ret[0].(bool) + ret := m.ctrl.Call(m, "GetPodsMatchingSelector", selector) + ret0, _ := ret[0].(*v11.PodList) ret1, _ := ret[1].(error) return ret0, ret1 } -// IsResourceSupported indicates an expected call of IsResourceSupported. -func (mr *MockClientInterfaceMockRecorder) IsResourceSupported(apiGroup, apiVersion, resourceName interface{}) *gomock.Call { +// GetPodsMatchingSelector indicates an expected call of GetPodsMatchingSelector +func (mr *MockClientInterfaceMockRecorder) GetPodsMatchingSelector(selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsResourceSupported", reflect.TypeOf((*MockClientInterface)(nil).IsResourceSupported), apiGroup, apiVersion, resourceName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPodsMatchingSelector", reflect.TypeOf((*MockClientInterface)(nil).GetPodsMatchingSelector), selector) } -// IsSSASupported mocks base method. -func (m *MockClientInterface) IsSSASupported() bool { +// PodWatcher mocks base method +func (m *MockClientInterface) PodWatcher(ctx context.Context, selector string) (watch.Interface, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "IsSSASupported") - ret0, _ := ret[0].(bool) - return ret0 + ret := m.ctrl.Call(m, "PodWatcher", ctx, selector) + ret0, _ := ret[0].(watch.Interface) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// IsSSASupported indicates an expected call of IsSSASupported. -func (mr *MockClientInterfaceMockRecorder) IsSSASupported() *gomock.Call { +// PodWatcher indicates an expected call of PodWatcher +func (mr *MockClientInterfaceMockRecorder) PodWatcher(ctx, selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsSSASupported", reflect.TypeOf((*MockClientInterface)(nil).IsSSASupported)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PodWatcher", reflect.TypeOf((*MockClientInterface)(nil).PodWatcher), ctx, selector) } -// IsServiceBindingSupported mocks base method. -func (m *MockClientInterface) IsServiceBindingSupported() (bool, error) { +// IsPodNameMatchingSelector mocks base method +func (m *MockClientInterface) IsPodNameMatchingSelector(ctx context.Context, podname, selector string) (bool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "IsServiceBindingSupported") + ret := m.ctrl.Call(m, "IsPodNameMatchingSelector", ctx, podname, selector) ret0, _ := ret[0].(bool) ret1, _ := ret[1].(error) return ret0, ret1 } -// IsServiceBindingSupported indicates an expected call of IsServiceBindingSupported. -func (mr *MockClientInterfaceMockRecorder) IsServiceBindingSupported() *gomock.Call { +// IsPodNameMatchingSelector indicates an expected call of IsPodNameMatchingSelector +func (mr *MockClientInterfaceMockRecorder) IsPodNameMatchingSelector(ctx, podname, selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsServiceBindingSupported", reflect.TypeOf((*MockClientInterface)(nil).IsServiceBindingSupported)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsPodNameMatchingSelector", reflect.TypeOf((*MockClientInterface)(nil).IsPodNameMatchingSelector), ctx, podname, selector) } -// ListClusterServiceVersions mocks base method. -func (m *MockClientInterface) ListClusterServiceVersions() (*v1alpha1.ClusterServiceVersionList, error) { +// SetupPortForwarding mocks base method +func (m *MockClientInterface) SetupPortForwarding(pod *v11.Pod, portPairs []string, out, errOut io.Writer, stopChan chan struct{}) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListClusterServiceVersions") - ret0, _ := ret[0].(*v1alpha1.ClusterServiceVersionList) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "SetupPortForwarding", pod, portPairs, out, errOut, stopChan) + ret0, _ := ret[0].(error) + return ret0 } -// ListClusterServiceVersions indicates an expected call of ListClusterServiceVersions. -func (mr *MockClientInterfaceMockRecorder) ListClusterServiceVersions() *gomock.Call { +// SetupPortForwarding indicates an expected call of SetupPortForwarding +func (mr *MockClientInterfaceMockRecorder) SetupPortForwarding(pod, portPairs, out, errOut, stopChan interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListClusterServiceVersions", reflect.TypeOf((*MockClientInterface)(nil).ListClusterServiceVersions)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetupPortForwarding", reflect.TypeOf((*MockClientInterface)(nil).SetupPortForwarding), pod, portPairs, out, errOut, stopChan) } -// ListDynamicResources mocks base method. -func (m *MockClientInterface) ListDynamicResources(namespace string, gvr schema.GroupVersionResource) (*unstructured.UnstructuredList, error) { +// CreateNewProject mocks base method +func (m *MockClientInterface) CreateNewProject(projectName string, wait bool) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListDynamicResources", namespace, gvr) - ret0, _ := ret[0].(*unstructured.UnstructuredList) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "CreateNewProject", projectName, wait) + ret0, _ := ret[0].(error) + return ret0 } -// ListDynamicResources indicates an expected call of ListDynamicResources. -func (mr *MockClientInterfaceMockRecorder) ListDynamicResources(namespace, gvr interface{}) *gomock.Call { +// CreateNewProject indicates an expected call of CreateNewProject +func (mr *MockClientInterfaceMockRecorder) CreateNewProject(projectName, wait interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDynamicResources", reflect.TypeOf((*MockClientInterface)(nil).ListDynamicResources), namespace, gvr) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateNewProject", reflect.TypeOf((*MockClientInterface)(nil).CreateNewProject), projectName, wait) } -// ListPVCNames mocks base method. -func (m *MockClientInterface) ListPVCNames(selector string) ([]string, error) { +// DeleteProject mocks base method +func (m *MockClientInterface) DeleteProject(name string, wait bool) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListPVCNames", selector) - ret0, _ := ret[0].([]string) + ret := m.ctrl.Call(m, "DeleteProject", name, wait) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteProject indicates an expected call of DeleteProject +func (mr *MockClientInterfaceMockRecorder) DeleteProject(name, wait interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteProject", reflect.TypeOf((*MockClientInterface)(nil).DeleteProject), name, wait) +} + +// GetCurrentProjectName mocks base method +func (m *MockClientInterface) GetCurrentProjectName() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCurrentProjectName") + ret0, _ := ret[0].(string) + return ret0 +} + +// GetCurrentProjectName indicates an expected call of GetCurrentProjectName +func (mr *MockClientInterfaceMockRecorder) GetCurrentProjectName() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentProjectName", reflect.TypeOf((*MockClientInterface)(nil).GetCurrentProjectName)) +} + +// GetProject mocks base method +func (m *MockClientInterface) GetProject(projectName string) (*v1.Project, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetProject", projectName) + ret0, _ := ret[0].(*v1.Project) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListPVCNames indicates an expected call of ListPVCNames. -func (mr *MockClientInterfaceMockRecorder) ListPVCNames(selector interface{}) *gomock.Call { +// GetProject indicates an expected call of GetProject +func (mr *MockClientInterfaceMockRecorder) GetProject(projectName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListPVCNames", reflect.TypeOf((*MockClientInterface)(nil).ListPVCNames), selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProject", reflect.TypeOf((*MockClientInterface)(nil).GetProject), projectName) } -// ListPVCs mocks base method. -func (m *MockClientInterface) ListPVCs(selector string) ([]v11.PersistentVolumeClaim, error) { +// IsProjectSupported mocks base method +func (m *MockClientInterface) IsProjectSupported() (bool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListPVCs", selector) - ret0, _ := ret[0].([]v11.PersistentVolumeClaim) + ret := m.ctrl.Call(m, "IsProjectSupported") + ret0, _ := ret[0].(bool) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListPVCs indicates an expected call of ListPVCs. -func (mr *MockClientInterfaceMockRecorder) ListPVCs(selector interface{}) *gomock.Call { +// IsProjectSupported indicates an expected call of IsProjectSupported +func (mr *MockClientInterfaceMockRecorder) IsProjectSupported() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListPVCs", reflect.TypeOf((*MockClientInterface)(nil).ListPVCs), selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsProjectSupported", reflect.TypeOf((*MockClientInterface)(nil).IsProjectSupported)) } -// ListProjectNames mocks base method. +// ListProjectNames mocks base method func (m *MockClientInterface) ListProjectNames() ([]string, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ListProjectNames") @@ -1123,316 +1103,335 @@ func (m *MockClientInterface) ListProjectNames() ([]string, error) { return ret0, ret1 } -// ListProjectNames indicates an expected call of ListProjectNames. +// ListProjectNames indicates an expected call of ListProjectNames func (mr *MockClientInterfaceMockRecorder) ListProjectNames() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListProjectNames", reflect.TypeOf((*MockClientInterface)(nil).ListProjectNames)) } -// ListSecrets mocks base method. -func (m *MockClientInterface) ListSecrets(labelSelector string) ([]v11.Secret, error) { +// CreateTLSSecret mocks base method +func (m *MockClientInterface) CreateTLSSecret(tlsCertificate, tlsPrivKey []byte, objectMeta v12.ObjectMeta) (*v11.Secret, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListSecrets", labelSelector) - ret0, _ := ret[0].([]v11.Secret) + ret := m.ctrl.Call(m, "CreateTLSSecret", tlsCertificate, tlsPrivKey, objectMeta) + ret0, _ := ret[0].(*v11.Secret) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListSecrets indicates an expected call of ListSecrets. -func (mr *MockClientInterfaceMockRecorder) ListSecrets(labelSelector interface{}) *gomock.Call { +// CreateTLSSecret indicates an expected call of CreateTLSSecret +func (mr *MockClientInterfaceMockRecorder) CreateTLSSecret(tlsCertificate, tlsPrivKey, objectMeta interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSecrets", reflect.TypeOf((*MockClientInterface)(nil).ListSecrets), labelSelector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateTLSSecret", reflect.TypeOf((*MockClientInterface)(nil).CreateTLSSecret), tlsCertificate, tlsPrivKey, objectMeta) } -// ListServiceBindingsFromAllGroups mocks base method. -func (m *MockClientInterface) ListServiceBindingsFromAllGroups() ([]v1alpha3.ServiceBinding, []v1alpha10.ServiceBinding, error) { +// GetSecret mocks base method +func (m *MockClientInterface) GetSecret(name, namespace string) (*v11.Secret, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListServiceBindingsFromAllGroups") - ret0, _ := ret[0].([]v1alpha3.ServiceBinding) - ret1, _ := ret[1].([]v1alpha10.ServiceBinding) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 + ret := m.ctrl.Call(m, "GetSecret", name, namespace) + ret0, _ := ret[0].(*v11.Secret) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// ListServiceBindingsFromAllGroups indicates an expected call of ListServiceBindingsFromAllGroups. -func (mr *MockClientInterfaceMockRecorder) ListServiceBindingsFromAllGroups() *gomock.Call { +// GetSecret indicates an expected call of GetSecret +func (mr *MockClientInterfaceMockRecorder) GetSecret(name, namespace interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServiceBindingsFromAllGroups", reflect.TypeOf((*MockClientInterface)(nil).ListServiceBindingsFromAllGroups)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSecret", reflect.TypeOf((*MockClientInterface)(nil).GetSecret), name, namespace) } -// ListServices mocks base method. -func (m *MockClientInterface) ListServices(selector string) ([]v11.Service, error) { +// UpdateSecret mocks base method +func (m *MockClientInterface) UpdateSecret(secret *v11.Secret, namespace string) (*v11.Secret, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListServices", selector) - ret0, _ := ret[0].([]v11.Service) + ret := m.ctrl.Call(m, "UpdateSecret", secret, namespace) + ret0, _ := ret[0].(*v11.Secret) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListServices indicates an expected call of ListServices. -func (mr *MockClientInterfaceMockRecorder) ListServices(selector interface{}) *gomock.Call { +// UpdateSecret indicates an expected call of UpdateSecret +func (mr *MockClientInterfaceMockRecorder) UpdateSecret(secret, namespace interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServices", reflect.TypeOf((*MockClientInterface)(nil).ListServices), selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateSecret", reflect.TypeOf((*MockClientInterface)(nil).UpdateSecret), secret, namespace) } -// NewServiceBindingServiceObject mocks base method. -func (m *MockClientInterface) NewServiceBindingServiceObject(serviceNs string, unstructuredService unstructured.Unstructured, bindingName string) (v1alpha10.Service, error) { +// DeleteSecret mocks base method +func (m *MockClientInterface) DeleteSecret(secretName, namespace string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NewServiceBindingServiceObject", serviceNs, unstructuredService, bindingName) - ret0, _ := ret[0].(v1alpha10.Service) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "DeleteSecret", secretName, namespace) + ret0, _ := ret[0].(error) + return ret0 } -// NewServiceBindingServiceObject indicates an expected call of NewServiceBindingServiceObject. -func (mr *MockClientInterfaceMockRecorder) NewServiceBindingServiceObject(serviceNs, unstructuredService, bindingName interface{}) *gomock.Call { +// DeleteSecret indicates an expected call of DeleteSecret +func (mr *MockClientInterfaceMockRecorder) DeleteSecret(secretName, namespace interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewServiceBindingServiceObject", reflect.TypeOf((*MockClientInterface)(nil).NewServiceBindingServiceObject), serviceNs, unstructuredService, bindingName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSecret", reflect.TypeOf((*MockClientInterface)(nil).DeleteSecret), secretName, namespace) } -// PatchDynamicResource mocks base method. -func (m *MockClientInterface) PatchDynamicResource(exampleCustomResource unstructured.Unstructured) (bool, error) { +// CreateSecret mocks base method +func (m *MockClientInterface) CreateSecret(objectMeta v12.ObjectMeta, data map[string]string, ownerReference v12.OwnerReference) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PatchDynamicResource", exampleCustomResource) - ret0, _ := ret[0].(bool) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "CreateSecret", objectMeta, data, ownerReference) + ret0, _ := ret[0].(error) + return ret0 } -// PatchDynamicResource indicates an expected call of PatchDynamicResource. -func (mr *MockClientInterfaceMockRecorder) PatchDynamicResource(exampleCustomResource interface{}) *gomock.Call { +// CreateSecret indicates an expected call of CreateSecret +func (mr *MockClientInterfaceMockRecorder) CreateSecret(objectMeta, data, ownerReference interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PatchDynamicResource", reflect.TypeOf((*MockClientInterface)(nil).PatchDynamicResource), exampleCustomResource) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSecret", reflect.TypeOf((*MockClientInterface)(nil).CreateSecret), objectMeta, data, ownerReference) } -// PodWarningEventWatcher mocks base method. -func (m *MockClientInterface) PodWarningEventWatcher(ctx context.Context) (watch.Interface, bool, error) { +// CreateSecrets mocks base method +func (m *MockClientInterface) CreateSecrets(componentName string, commonObjectMeta v12.ObjectMeta, svc *v11.Service, ownerReference v12.OwnerReference) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PodWarningEventWatcher", ctx) - ret0, _ := ret[0].(watch.Interface) - ret1, _ := ret[1].(bool) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 + ret := m.ctrl.Call(m, "CreateSecrets", componentName, commonObjectMeta, svc, ownerReference) + ret0, _ := ret[0].(error) + return ret0 } -// PodWarningEventWatcher indicates an expected call of PodWarningEventWatcher. -func (mr *MockClientInterfaceMockRecorder) PodWarningEventWatcher(ctx interface{}) *gomock.Call { +// CreateSecrets indicates an expected call of CreateSecrets +func (mr *MockClientInterfaceMockRecorder) CreateSecrets(componentName, commonObjectMeta, svc, ownerReference interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PodWarningEventWatcher", reflect.TypeOf((*MockClientInterface)(nil).PodWarningEventWatcher), ctx) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSecrets", reflect.TypeOf((*MockClientInterface)(nil).CreateSecrets), componentName, commonObjectMeta, svc, ownerReference) } -// PodWatcher mocks base method. -func (m *MockClientInterface) PodWatcher(ctx context.Context, selector string) (watch.Interface, error) { +// ListSecrets mocks base method +func (m *MockClientInterface) ListSecrets(labelSelector string) ([]v11.Secret, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PodWatcher", ctx, selector) - ret0, _ := ret[0].(watch.Interface) + ret := m.ctrl.Call(m, "ListSecrets", labelSelector) + ret0, _ := ret[0].([]v11.Secret) ret1, _ := ret[1].(error) return ret0, ret1 } -// PodWatcher indicates an expected call of PodWatcher. -func (mr *MockClientInterfaceMockRecorder) PodWatcher(ctx, selector interface{}) *gomock.Call { +// ListSecrets indicates an expected call of ListSecrets +func (mr *MockClientInterfaceMockRecorder) ListSecrets(labelSelector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PodWatcher", reflect.TypeOf((*MockClientInterface)(nil).PodWatcher), ctx, selector) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSecrets", reflect.TypeOf((*MockClientInterface)(nil).ListSecrets), labelSelector) } -// RunLogout mocks base method. -func (m *MockClientInterface) RunLogout(stdout io.Writer) error { +// WaitAndGetSecret mocks base method +func (m *MockClientInterface) WaitAndGetSecret(name, namespace string) (*v11.Secret, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RunLogout", stdout) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "WaitAndGetSecret", name, namespace) + ret0, _ := ret[0].(*v11.Secret) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// RunLogout indicates an expected call of RunLogout. -func (mr *MockClientInterfaceMockRecorder) RunLogout(stdout interface{}) *gomock.Call { +// WaitAndGetSecret indicates an expected call of WaitAndGetSecret +func (mr *MockClientInterfaceMockRecorder) WaitAndGetSecret(name, namespace interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RunLogout", reflect.TypeOf((*MockClientInterface)(nil).RunLogout), stdout) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WaitAndGetSecret", reflect.TypeOf((*MockClientInterface)(nil).WaitAndGetSecret), name, namespace) } -// SetCurrentNamespace mocks base method. -func (m *MockClientInterface) SetCurrentNamespace(namespace string) error { +// CreateService mocks base method +func (m *MockClientInterface) CreateService(svc v11.Service) (*v11.Service, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SetCurrentNamespace", namespace) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "CreateService", svc) + ret0, _ := ret[0].(*v11.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// SetCurrentNamespace indicates an expected call of SetCurrentNamespace. -func (mr *MockClientInterfaceMockRecorder) SetCurrentNamespace(namespace interface{}) *gomock.Call { +// CreateService indicates an expected call of CreateService +func (mr *MockClientInterfaceMockRecorder) CreateService(svc interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetCurrentNamespace", reflect.TypeOf((*MockClientInterface)(nil).SetCurrentNamespace), namespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateService", reflect.TypeOf((*MockClientInterface)(nil).CreateService), svc) } -// SetDiscoveryInterface mocks base method. -func (m *MockClientInterface) SetDiscoveryInterface(client discovery.DiscoveryInterface) { +// UpdateService mocks base method +func (m *MockClientInterface) UpdateService(svc v11.Service) (*v11.Service, error) { m.ctrl.T.Helper() - m.ctrl.Call(m, "SetDiscoveryInterface", client) + ret := m.ctrl.Call(m, "UpdateService", svc) + ret0, _ := ret[0].(*v11.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// SetDiscoveryInterface indicates an expected call of SetDiscoveryInterface. -func (mr *MockClientInterfaceMockRecorder) SetDiscoveryInterface(client interface{}) *gomock.Call { +// UpdateService indicates an expected call of UpdateService +func (mr *MockClientInterfaceMockRecorder) UpdateService(svc interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetDiscoveryInterface", reflect.TypeOf((*MockClientInterface)(nil).SetDiscoveryInterface), client) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateService", reflect.TypeOf((*MockClientInterface)(nil).UpdateService), svc) } -// SetNamespace mocks base method. -func (m *MockClientInterface) SetNamespace(ns string) { +// ListServices mocks base method +func (m *MockClientInterface) ListServices(selector string) ([]v11.Service, error) { m.ctrl.T.Helper() - m.ctrl.Call(m, "SetNamespace", ns) + ret := m.ctrl.Call(m, "ListServices", selector) + ret0, _ := ret[0].([]v11.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// SetNamespace indicates an expected call of SetNamespace. -func (mr *MockClientInterfaceMockRecorder) SetNamespace(ns interface{}) *gomock.Call { +// ListServices indicates an expected call of ListServices +func (mr *MockClientInterfaceMockRecorder) ListServices(selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetNamespace", reflect.TypeOf((*MockClientInterface)(nil).SetNamespace), ns) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServices", reflect.TypeOf((*MockClientInterface)(nil).ListServices), selector) } -// SetupPortForwarding mocks base method. -func (m *MockClientInterface) SetupPortForwarding(pod *v11.Pod, portPairs []string, out, errOut io.Writer, stopChan chan struct{}) error { +// DeleteService mocks base method +func (m *MockClientInterface) DeleteService(serviceName string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SetupPortForwarding", pod, portPairs, out, errOut, stopChan) + ret := m.ctrl.Call(m, "DeleteService", serviceName) ret0, _ := ret[0].(error) return ret0 } -// SetupPortForwarding indicates an expected call of SetupPortForwarding. -func (mr *MockClientInterfaceMockRecorder) SetupPortForwarding(pod, portPairs, out, errOut, stopChan interface{}) *gomock.Call { +// DeleteService indicates an expected call of DeleteService +func (mr *MockClientInterfaceMockRecorder) DeleteService(serviceName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetupPortForwarding", reflect.TypeOf((*MockClientInterface)(nil).SetupPortForwarding), pod, portPairs, out, errOut, stopChan) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteService", reflect.TypeOf((*MockClientInterface)(nil).DeleteService), serviceName) } -// TryWithBlockOwnerDeletion mocks base method. -func (m *MockClientInterface) TryWithBlockOwnerDeletion(ownerReference v12.OwnerReference, exec func(v12.OwnerReference) error) error { +// GetOneService mocks base method +func (m *MockClientInterface) GetOneService(componentName, appName string) (*v11.Service, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "TryWithBlockOwnerDeletion", ownerReference, exec) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "GetOneService", componentName, appName) + ret0, _ := ret[0].(*v11.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// TryWithBlockOwnerDeletion indicates an expected call of TryWithBlockOwnerDeletion. -func (mr *MockClientInterfaceMockRecorder) TryWithBlockOwnerDeletion(ownerReference, exec interface{}) *gomock.Call { +// GetOneService indicates an expected call of GetOneService +func (mr *MockClientInterfaceMockRecorder) GetOneService(componentName, appName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TryWithBlockOwnerDeletion", reflect.TypeOf((*MockClientInterface)(nil).TryWithBlockOwnerDeletion), ownerReference, exec) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOneService", reflect.TypeOf((*MockClientInterface)(nil).GetOneService), componentName, appName) } -// UpdateDeployment mocks base method. -func (m *MockClientInterface) UpdateDeployment(deploy v10.Deployment) (*v10.Deployment, error) { +// GetOneServiceFromSelector mocks base method +func (m *MockClientInterface) GetOneServiceFromSelector(selector string) (*v11.Service, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateDeployment", deploy) - ret0, _ := ret[0].(*v10.Deployment) + ret := m.ctrl.Call(m, "GetOneServiceFromSelector", selector) + ret0, _ := ret[0].(*v11.Service) ret1, _ := ret[1].(error) return ret0, ret1 } -// UpdateDeployment indicates an expected call of UpdateDeployment. -func (mr *MockClientInterfaceMockRecorder) UpdateDeployment(deploy interface{}) *gomock.Call { +// GetOneServiceFromSelector indicates an expected call of GetOneServiceFromSelector +func (mr *MockClientInterfaceMockRecorder) GetOneServiceFromSelector(selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDeployment", reflect.TypeOf((*MockClientInterface)(nil).UpdateDeployment), deploy) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOneServiceFromSelector", reflect.TypeOf((*MockClientInterface)(nil).GetOneServiceFromSelector), selector) } -// UpdateDynamicResource mocks base method. -func (m *MockClientInterface) UpdateDynamicResource(gvr schema.GroupVersionResource, name string, u *unstructured.Unstructured) error { +// RunLogout mocks base method +func (m *MockClientInterface) RunLogout(stdout io.Writer) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateDynamicResource", gvr, name, u) + ret := m.ctrl.Call(m, "RunLogout", stdout) ret0, _ := ret[0].(error) return ret0 } -// UpdateDynamicResource indicates an expected call of UpdateDynamicResource. -func (mr *MockClientInterfaceMockRecorder) UpdateDynamicResource(gvr, name, u interface{}) *gomock.Call { +// RunLogout indicates an expected call of RunLogout +func (mr *MockClientInterfaceMockRecorder) RunLogout(stdout interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDynamicResource", reflect.TypeOf((*MockClientInterface)(nil).UpdateDynamicResource), gvr, name, u) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RunLogout", reflect.TypeOf((*MockClientInterface)(nil).RunLogout), stdout) } -// UpdatePVCLabels mocks base method. -func (m *MockClientInterface) UpdatePVCLabels(pvc *v11.PersistentVolumeClaim, labels map[string]string) error { +// CreatePVC mocks base method +func (m *MockClientInterface) CreatePVC(pvc v11.PersistentVolumeClaim) (*v11.PersistentVolumeClaim, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdatePVCLabels", pvc, labels) + ret := m.ctrl.Call(m, "CreatePVC", pvc) + ret0, _ := ret[0].(*v11.PersistentVolumeClaim) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreatePVC indicates an expected call of CreatePVC +func (mr *MockClientInterfaceMockRecorder) CreatePVC(pvc interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePVC", reflect.TypeOf((*MockClientInterface)(nil).CreatePVC), pvc) +} + +// DeletePVC mocks base method +func (m *MockClientInterface) DeletePVC(pvcName string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeletePVC", pvcName) ret0, _ := ret[0].(error) return ret0 } -// UpdatePVCLabels indicates an expected call of UpdatePVCLabels. -func (mr *MockClientInterfaceMockRecorder) UpdatePVCLabels(pvc, labels interface{}) *gomock.Call { +// DeletePVC indicates an expected call of DeletePVC +func (mr *MockClientInterfaceMockRecorder) DeletePVC(pvcName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePVCLabels", reflect.TypeOf((*MockClientInterface)(nil).UpdatePVCLabels), pvc, labels) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePVC", reflect.TypeOf((*MockClientInterface)(nil).DeletePVC), pvcName) } -// UpdateSecret mocks base method. -func (m *MockClientInterface) UpdateSecret(secret *v11.Secret, namespace string) (*v11.Secret, error) { +// ListPVCs mocks base method +func (m *MockClientInterface) ListPVCs(selector string) ([]v11.PersistentVolumeClaim, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateSecret", secret, namespace) - ret0, _ := ret[0].(*v11.Secret) + ret := m.ctrl.Call(m, "ListPVCs", selector) + ret0, _ := ret[0].([]v11.PersistentVolumeClaim) ret1, _ := ret[1].(error) return ret0, ret1 } -// UpdateSecret indicates an expected call of UpdateSecret. -func (mr *MockClientInterfaceMockRecorder) UpdateSecret(secret, namespace interface{}) *gomock.Call { +// ListPVCs indicates an expected call of ListPVCs +func (mr *MockClientInterfaceMockRecorder) ListPVCs(selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateSecret", reflect.TypeOf((*MockClientInterface)(nil).UpdateSecret), secret, namespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListPVCs", reflect.TypeOf((*MockClientInterface)(nil).ListPVCs), selector) } -// UpdateService mocks base method. -func (m *MockClientInterface) UpdateService(svc v11.Service) (*v11.Service, error) { +// ListPVCNames mocks base method +func (m *MockClientInterface) ListPVCNames(selector string) ([]string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateService", svc) - ret0, _ := ret[0].(*v11.Service) + ret := m.ctrl.Call(m, "ListPVCNames", selector) + ret0, _ := ret[0].([]string) ret1, _ := ret[1].(error) return ret0, ret1 } -// UpdateService indicates an expected call of UpdateService. -func (mr *MockClientInterfaceMockRecorder) UpdateService(svc interface{}) *gomock.Call { +// ListPVCNames indicates an expected call of ListPVCNames +func (mr *MockClientInterfaceMockRecorder) ListPVCNames(selector interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateService", reflect.TypeOf((*MockClientInterface)(nil).UpdateService), svc) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListPVCNames", reflect.TypeOf((*MockClientInterface)(nil).ListPVCNames), selector) } -// UpdateStorageOwnerReference mocks base method. -func (m *MockClientInterface) UpdateStorageOwnerReference(pvc *v11.PersistentVolumeClaim, ownerReference ...v12.OwnerReference) error { +// GetPVCFromName mocks base method +func (m *MockClientInterface) GetPVCFromName(pvcName string) (*v11.PersistentVolumeClaim, error) { m.ctrl.T.Helper() - varargs := []interface{}{pvc} - for _, a := range ownerReference { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "UpdateStorageOwnerReference", varargs...) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "GetPVCFromName", pvcName) + ret0, _ := ret[0].(*v11.PersistentVolumeClaim) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// UpdateStorageOwnerReference indicates an expected call of UpdateStorageOwnerReference. -func (mr *MockClientInterfaceMockRecorder) UpdateStorageOwnerReference(pvc interface{}, ownerReference ...interface{}) *gomock.Call { +// GetPVCFromName indicates an expected call of GetPVCFromName +func (mr *MockClientInterfaceMockRecorder) GetPVCFromName(pvcName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{pvc}, ownerReference...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateStorageOwnerReference", reflect.TypeOf((*MockClientInterface)(nil).UpdateStorageOwnerReference), varargs...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPVCFromName", reflect.TypeOf((*MockClientInterface)(nil).GetPVCFromName), pvcName) } -// WaitAndGetSecret mocks base method. -func (m *MockClientInterface) WaitAndGetSecret(name, namespace string) (*v11.Secret, error) { +// UpdatePVCLabels mocks base method +func (m *MockClientInterface) UpdatePVCLabels(pvc *v11.PersistentVolumeClaim, labels map[string]string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "WaitAndGetSecret", name, namespace) - ret0, _ := ret[0].(*v11.Secret) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "UpdatePVCLabels", pvc, labels) + ret0, _ := ret[0].(error) + return ret0 } -// WaitAndGetSecret indicates an expected call of WaitAndGetSecret. -func (mr *MockClientInterfaceMockRecorder) WaitAndGetSecret(name, namespace interface{}) *gomock.Call { +// UpdatePVCLabels indicates an expected call of UpdatePVCLabels +func (mr *MockClientInterfaceMockRecorder) UpdatePVCLabels(pvc, labels interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WaitAndGetSecret", reflect.TypeOf((*MockClientInterface)(nil).WaitAndGetSecret), name, namespace) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePVCLabels", reflect.TypeOf((*MockClientInterface)(nil).UpdatePVCLabels), pvc, labels) } -// WaitForServiceAccountInNamespace mocks base method. -func (m *MockClientInterface) WaitForServiceAccountInNamespace(namespace, serviceAccountName string) error { +// UpdateStorageOwnerReference mocks base method +func (m *MockClientInterface) UpdateStorageOwnerReference(pvc *v11.PersistentVolumeClaim, ownerReference ...v12.OwnerReference) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "WaitForServiceAccountInNamespace", namespace, serviceAccountName) + varargs := []interface{}{pvc} + for _, a := range ownerReference { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "UpdateStorageOwnerReference", varargs...) ret0, _ := ret[0].(error) return ret0 } -// WaitForServiceAccountInNamespace indicates an expected call of WaitForServiceAccountInNamespace. -func (mr *MockClientInterfaceMockRecorder) WaitForServiceAccountInNamespace(namespace, serviceAccountName interface{}) *gomock.Call { +// UpdateStorageOwnerReference indicates an expected call of UpdateStorageOwnerReference +func (mr *MockClientInterfaceMockRecorder) UpdateStorageOwnerReference(pvc interface{}, ownerReference ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WaitForServiceAccountInNamespace", reflect.TypeOf((*MockClientInterface)(nil).WaitForServiceAccountInNamespace), namespace, serviceAccountName) + varargs := append([]interface{}{pvc}, ownerReference...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateStorageOwnerReference", reflect.TypeOf((*MockClientInterface)(nil).UpdateStorageOwnerReference), varargs...) } diff --git a/pkg/kclient/services.go b/pkg/kclient/services.go index 197835723a0..5e25e60a969 100644 --- a/pkg/kclient/services.go +++ b/pkg/kclient/services.go @@ -4,9 +4,10 @@ import ( "context" "fmt" - odolabels "github.com/redhat-developer/odo/pkg/labels" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + odolabels "github.com/redhat-developer/odo/pkg/labels" ) // CreateService generates and creates the service @@ -52,7 +53,7 @@ func (c *Client) DeleteService(serviceName string) error { // GetOneService retrieves the service with the given component and app name // An error is thrown when exactly one service is not found for the selector. func (c *Client) GetOneService(componentName, appName string) (*corev1.Service, error) { - selector := odolabels.GetSelector(componentName, appName, odolabels.ComponentDevMode) + selector := odolabels.GetSelector(componentName, appName, odolabels.ComponentDevMode, false) return c.GetOneServiceFromSelector(selector) } diff --git a/pkg/kclient/services_test.go b/pkg/kclient/services_test.go index e66cffab06a..00599f3dc81 100644 --- a/pkg/kclient/services_test.go +++ b/pkg/kclient/services_test.go @@ -12,12 +12,13 @@ import ( devfileParser "github.com/devfile/library/pkg/devfile/parser" parsercommon "github.com/devfile/library/pkg/devfile/parser/data/v2/common" "github.com/devfile/library/pkg/testingutil" - odolabels "github.com/redhat-developer/odo/pkg/labels" - odoTestingUtil "github.com/redhat-developer/odo/pkg/testingutil" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + odolabels "github.com/redhat-developer/odo/pkg/labels" + odoTestingUtil "github.com/redhat-developer/odo/pkg/testingutil" + ktesting "k8s.io/client-go/testing" ) @@ -211,7 +212,7 @@ func TestListServices(t *testing.T) { { name: "case 1: returned 3 services", args: args{ - selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode), + selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode, false), }, returnedServices: corev1.ServiceList{ Items: odoTestingUtil.FakeKubeServices("nodejs"), @@ -221,7 +222,7 @@ func TestListServices(t *testing.T) { { name: "case 2: no service returned", args: args{ - selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode), + selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode, false), }, returnedServices: corev1.ServiceList{ Items: nil, @@ -268,7 +269,7 @@ func TestClient_GetOneServiceFromSelector(t *testing.T) { { name: "case 1: returned the correct service", args: args{ - selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode), + selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode, false), }, returnedServices: corev1.ServiceList{ Items: []corev1.Service{ @@ -280,7 +281,7 @@ func TestClient_GetOneServiceFromSelector(t *testing.T) { { name: "case 2: no service returned", args: args{ - selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode), + selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode, false), }, returnedServices: corev1.ServiceList{ Items: nil, @@ -290,7 +291,7 @@ func TestClient_GetOneServiceFromSelector(t *testing.T) { { name: "case 3: more than one service returned", args: args{ - selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode), + selector: odolabels.GetSelector("nodejs", "app", odolabels.ComponentDevMode, false), }, returnedServices: corev1.ServiceList{ Items: odoTestingUtil.FakeKubeServices("nodejs"), diff --git a/pkg/kclient/volumes_test.go b/pkg/kclient/volumes_test.go index 6ef8c8bc7ee..058fa7c35be 100644 --- a/pkg/kclient/volumes_test.go +++ b/pkg/kclient/volumes_test.go @@ -16,6 +16,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "github.com/devfile/library/pkg/devfile/generator" + "github.com/redhat-developer/odo/pkg/util" ) @@ -140,7 +141,7 @@ func TestDeletePVC(t *testing.T) { err := fakeClient.DeletePVC(tt.pvcName) - //Checks for error in positive cases + // Checks for error in positive cases if !tt.wantErr == (err != nil) { t.Errorf(" client.DeletePVC(name) unexpected error %v, wantErr %v", err, tt.wantErr) } @@ -270,7 +271,7 @@ func TestGetPVCFromName(t *testing.T) { returnPVC, err := fakeClient.GetPVCFromName(tt.pvcName) - //Checks for error in positive cases + // Checks for error in positive cases if !tt.wantErr == (err != nil) { t.Errorf(" client.GetPVCFromName(name) unexpected error %v, wantErr %v", err, tt.wantErr) } diff --git a/pkg/labels/constants.go b/pkg/labels/constants.go index bfc12eb9018..901a06c0617 100644 --- a/pkg/labels/constants.go +++ b/pkg/labels/constants.go @@ -23,7 +23,7 @@ const ( // odoModeLabel indicates which command were used to create the component, either dev or deploy odoModeLabel = "odo.dev/mode" - // odoProjectTypeAnnotation indicates the project type fohe component + // odoProjectTypeAnnotation indicates the project type of the component odoProjectTypeAnnotation = "odo.dev/project-type" appLabel = "app" @@ -43,7 +43,7 @@ const ( // ComponentDeployMode indicates the resource is deployed using deploy command ComponentDeployMode = "Deploy" - // ComponentAnyMode is used to search resources deployed using either dev or deploy comamnd + // ComponentAnyMode is used to search resources deployed using either dev or deploy command ComponentAnyMode = "" // odoManager is the value of the manager when a component is managed by odo diff --git a/pkg/labels/labels.go b/pkg/labels/labels.go index e6c929dbe86..9efd4f8987e 100644 --- a/pkg/labels/labels.go +++ b/pkg/labels/labels.go @@ -3,14 +3,17 @@ package labels import ( "errors" - "github.com/redhat-developer/odo/pkg/version" "k8s.io/apimachinery/pkg/labels" + + "github.com/redhat-developer/odo/pkg/version" ) // GetLabels return labels that should be applied to every object for given component in active application // if you need labels to filter component then use GetSelector instead -func GetLabels(componentName string, applicationName string, mode string) map[string]string { - labels := getLabels(componentName, applicationName, mode, true) +// Note: isPartOfComponent denotes if the label is required for a core resource(deployment, svc, pvc, pv) of a given component deployed with `odo dev`; +// it is the only thing that sets it apart from the resources created via other ways (`odo deploy`, deploying resource with apply command during `odo dev`) +func GetLabels(componentName string, applicationName string, mode string, isPartOfComponent bool) map[string]string { + labels := getLabels(componentName, applicationName, mode, true, isPartOfComponent) return labels } @@ -73,25 +76,32 @@ func SetProjectType(annotations map[string]string, value string) { } // GetSelector returns a selector string used for selection of resources which are part of the given component in given mode -func GetSelector(componentName string, applicationName string, mode string) string { - labels := getLabels(componentName, applicationName, mode, false) +// Note: isPartOfComponent denotes if the selector is required for a core resource(deployment, svc, pvc, pv) of a given component deployed with `odo dev` +// it is the only thing that sets it apart from the resources created via other ways (`odo deploy`, deploying resource with apply command during `odo dev`) +func GetSelector(componentName string, applicationName string, mode string, isPartOfComponent bool) string { + labels := getLabels(componentName, applicationName, mode, false, isPartOfComponent) return labels.String() } -// GetLabels return labels that should be applied to every object for given component in active application +// getLabels return labels that should be applied to every object for given component in active application // additional labels are used only for creating object // if you are creating something use additional=true // if you need labels to filter component then use additional=false -func getLabels(componentName string, applicationName string, mode string, additional bool) labels.Set { +// isPartOfComponent denotes if the label is required for a core resource(deployment, svc, pvc, pv) of a given component deployed with `odo dev` +// it is the only thing that sets it apart from the resources created via other ways (`odo deploy`, deploying resource with apply command during `odo dev`) +func getLabels(componentName string, applicationName string, mode string, additional bool, isPartOfComponent bool) labels.Set { labels := getApplicationLabels(applicationName, additional) labels[kubernetesInstanceLabel] = componentName if mode != ComponentAnyMode { labels[odoModeLabel] = mode } + if isPartOfComponent { + labels[componentLabel] = componentName + } return labels } -// GetLabels return labels that identifies given application +// getApplicationLabels return labels that identifies given application // additional labels are used only when creating object // if you are creating something use additional=true // if you need labels to filter component then use additional=false diff --git a/pkg/labels/labels_test.go b/pkg/labels/labels_test.go index d5a512f6d2f..911dcade6f4 100644 --- a/pkg/labels/labels_test.go +++ b/pkg/labels/labels_test.go @@ -4,15 +4,17 @@ import ( "reflect" "testing" - "github.com/redhat-developer/odo/pkg/version" "k8s.io/apimachinery/pkg/labels" + + "github.com/redhat-developer/odo/pkg/version" ) func Test_getLabels(t *testing.T) { type args struct { - componentName string - applicationName string - additional bool + componentName string + applicationName string + additional bool + isPartOfComponent bool } tests := []struct { name string @@ -48,10 +50,25 @@ func Test_getLabels(t *testing.T) { "odo.dev/mode": "Dev", }, }, + { + name: "everything with isPartOfComponent", + args: args{ + componentName: "componentname", + applicationName: "applicationname", + isPartOfComponent: true, + }, + want: labels.Set{ + kubernetesManagedByLabel: "odo", + kubernetesPartOfLabel: "applicationname", + kubernetesInstanceLabel: "componentname", + "odo.dev/mode": "Dev", + componentLabel: "componentname", + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := getLabels(tt.args.componentName, tt.args.applicationName, ComponentDevMode, tt.args.additional); !reflect.DeepEqual(got, tt.want) { + if got := getLabels(tt.args.componentName, tt.args.applicationName, ComponentDevMode, tt.args.additional, tt.args.isPartOfComponent); !reflect.DeepEqual(got, tt.want) { t.Errorf("GetLabels() = %v, want %v", got, tt.want) } }) diff --git a/pkg/logs/logs.go b/pkg/logs/logs.go index 18fdb8b9100..249fb94502c 100644 --- a/pkg/logs/logs.go +++ b/pkg/logs/logs.go @@ -3,14 +3,16 @@ package logs import ( "fmt" "io" + "k8s.io/apimachinery/pkg/runtime/schema" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + corev1 "k8s.io/api/core/v1" + "github.com/redhat-developer/odo/pkg/kclient" odolabels "github.com/redhat-developer/odo/pkg/labels" - corev1 "k8s.io/api/core/v1" ) type LogsClient struct { @@ -90,14 +92,14 @@ func (o *LogsClient) getLogsForMode( }() if mode == odolabels.ComponentDevMode || mode == odolabels.ComponentAnyMode { - selector = odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode) + selector = odolabels.GetSelector(componentName, "app", odolabels.ComponentDevMode, false) err := o.getPodsForSelector(selector, namespace, podChan) if err != nil { errChan <- err } } if mode == odolabels.ComponentDeployMode || mode == odolabels.ComponentAnyMode { - selector = odolabels.GetSelector(componentName, "app", odolabels.ComponentDeployMode) + selector = odolabels.GetSelector(componentName, "app", odolabels.ComponentDeployMode, false) err := o.getPodsForSelector(selector, namespace, podChan) if err != nil { errChan <- err diff --git a/pkg/odo/cli/dev/dev.go b/pkg/odo/cli/dev/dev.go index a5d7d3a9c20..bc55de87d8e 100644 --- a/pkg/odo/cli/dev/dev.go +++ b/pkg/odo/cli/dev/dev.go @@ -234,7 +234,7 @@ func (o *DevOptions) Run(ctx context.Context) (err error) { o.ignorePaths = ignores log.Section("Deploying to the cluster in developer mode") - componentStatus, err := o.clientset.DevClient.Start(devFileObj, namespace, o.ignorePaths, path, o.debugFlag, o.buildCommandFlag, o.runCommandFlag, o.randomPortsFlag, o.errOut) + componentStatus, err := o.clientset.DevClient.Start(devFileObj, namespace, o.ignorePaths, path, o.debugFlag, o.buildCommandFlag, o.runCommandFlag, o.randomPortsFlag, o.errOut, o.clientset.FS) if err != nil { return err } @@ -302,6 +302,7 @@ func (o *Handler) regenerateComponentAdapterFromWatchParams(parameters watch.Wat Context: parameters.Path, AppName: parameters.ApplicationName, Devfile: devObj, + FS: o.clientset.FS, }, parameters.EnvSpecificInfo.GetNamespace(), ), nil diff --git a/pkg/service/link.go b/pkg/service/link.go index a73ee2bb1c7..130709ee3e0 100644 --- a/pkg/service/link.go +++ b/pkg/service/link.go @@ -6,13 +6,13 @@ import ( "strings" "github.com/devfile/library/pkg/devfile/parser" + "github.com/redhat-developer/odo/pkg/libdevfile" devfile "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2" "github.com/devfile/library/pkg/devfile/generator" devfilefs "github.com/devfile/library/pkg/testingutil/filesystem" "github.com/ghodss/yaml" - odolabels "github.com/redhat-developer/odo/pkg/labels" v1 "k8s.io/api/apps/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -22,6 +22,8 @@ import ( "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" + odolabels "github.com/redhat-developer/odo/pkg/labels" + "github.com/redhat-developer/odo/pkg/kclient" sboApi "github.com/redhat-developer/service-binding-operator/apis/binding/v1alpha1" @@ -122,7 +124,7 @@ func pushLinksWithoutOperator(client kclient.ClientInterface, devfileObj parser. return err } - secrets, err := client.ListSecrets(odolabels.GetSelector(odolabels.GetComponentName(labels), odolabels.GetAppName(labels), odolabels.ComponentAnyMode)) + secrets, err := client.ListSecrets(odolabels.GetSelector(odolabels.GetComponentName(labels), odolabels.GetAppName(labels), odolabels.ComponentAnyMode, false)) if err != nil { return err } diff --git a/pkg/service/service.go b/pkg/service/service.go index 696c2fabd8f..27a5ea902db 100644 --- a/pkg/service/service.go +++ b/pkg/service/service.go @@ -391,45 +391,3 @@ func updateOperatorService(client kclient.ClientInterface, u unstructured.Unstru } return updated, err } - -// ValidateResourcesExist validates if the Kubernetes inlined components are installed on the cluster -func ValidateResourcesExist(client kclient.ClientInterface, devfileObj parser.DevfileObj, k8sComponents []devfile.Component, context string) error { - if len(k8sComponents) == 0 { - return nil - } - - var unsupportedResources []string - for _, c := range k8sComponents { - kindErr, err := ValidateResourceExist(client, devfileObj, c, context) - if err != nil { - if kindErr != "" { - unsupportedResources = append(unsupportedResources, kindErr) - } else { - return err - } - } - } - - if len(unsupportedResources) > 0 { - // tell the user about all the unsupported resources in one message - return fmt.Errorf("following resource(s) in the devfile are not supported by your cluster; please install corresponding Operator(s) before doing \"odo dev\": %s", strings.Join(unsupportedResources, ", ")) - } - return nil -} - -func ValidateResourceExist(client kclient.ClientInterface, devfileObj parser.DevfileObj, k8sComponent devfile.Component, context string) (kindErr string, err error) { - // get the string representation of the YAML definition of a CRD - u, err := libdevfile.GetK8sComponentAsUnstructured(devfileObj, k8sComponent.Name, context, devfilefs.DefaultFs{}) - if err != nil { - return "", err - } - - _, err = client.GetRestMappingFromUnstructured(u) - if err != nil && u.GetKind() != "ServiceBinding" { - // getting a RestMapping would fail if there are no matches for the Kind field on the cluster; - // but if it's a "ServiceBinding" resource, we don't add it to unsupported list because odo can create links - // without having SBO installed - return u.GetKind(), errors.New("resource not supported") - } - return "", nil -} diff --git a/pkg/storage/kubernetes.go b/pkg/storage/kubernetes.go index 79b932768dd..9468c295f90 100644 --- a/pkg/storage/kubernetes.go +++ b/pkg/storage/kubernetes.go @@ -41,7 +41,7 @@ func (k kubernetesClient) Create(storage Storage) error { return err } - labels := odolabels.GetLabels(k.componentName, k.appName, odolabels.ComponentDevMode) + labels := odolabels.GetLabels(k.componentName, k.appName, odolabels.ComponentDevMode, false) odolabels.AddStorageInfo(labels, storage.Name, strings.Contains(storage.Name, OdoSourceVolume)) objectMeta := generator.GetObjectMeta(pvcName, k.client.GetCurrentNamespace(), labels, nil) @@ -86,7 +86,8 @@ func (k kubernetesClient) Delete(name string) error { func (k kubernetesClient) List() (StorageList, error) { if k.deployment == nil { var err error - k.deployment, err = k.client.GetOneDeployment(k.componentName, k.appName) + selector := odolabels.GetSelector(k.componentName, k.appName, odolabels.ComponentAnyMode, true) + k.deployment, err = k.client.GetOneDeploymentFromSelector(selector) if err != nil { if _, ok := err.(*kclient.DeploymentNotFoundError); ok { return StorageList{}, nil diff --git a/pkg/storage/kubernetes_test.go b/pkg/storage/kubernetes_test.go index cdac4d8b878..d92b016ec84 100644 --- a/pkg/storage/kubernetes_test.go +++ b/pkg/storage/kubernetes_test.go @@ -42,8 +42,8 @@ func Test_kubernetesClient_List(t *testing.T) { }, returnedDeployments: &appsv1.DeploymentList{ Items: []appsv1.Deployment{ - *testingutil.CreateFakeDeployment("nodejs"), - *testingutil.CreateFakeDeployment("nodejs"), + *testingutil.CreateFakeDeployment("nodejs", true), + *testingutil.CreateFakeDeployment("nodejs", true), }, }, wantErr: true, @@ -72,7 +72,7 @@ func Test_kubernetesClient_List(t *testing.T) { }, returnedDeployments: &appsv1.DeploymentList{ Items: []appsv1.Deployment{ - *testingutil.CreateFakeDeployment("nodejs"), + *testingutil.CreateFakeDeployment("nodejs", true), }, }, want: StorageList{}, @@ -93,7 +93,7 @@ func Test_kubernetesClient_List(t *testing.T) { {Name: "volume-0-vol", MountPath: "/data"}, {Name: "volume-1-vol", MountPath: "/path"}, }), - }, []corev1.Container{}), + }, []corev1.Container{}, true), }, }, returnedPVCs: &corev1.PersistentVolumeClaimList{ @@ -128,7 +128,7 @@ func Test_kubernetesClient_List(t *testing.T) { testingutil.CreateFakeContainerWithVolumeMounts("container-1", []corev1.VolumeMount{ {Name: "volume-1-vol", MountPath: "/path"}, }), - }, []corev1.Container{}), + }, []corev1.Container{}, true), }, }, returnedPVCs: &corev1.PersistentVolumeClaimList{ @@ -161,7 +161,7 @@ func Test_kubernetesClient_List(t *testing.T) { {Name: "volume-0-vol", MountPath: "/data"}, }), testingutil.CreateFakeContainer("container-1"), - }, []corev1.Container{}), + }, []corev1.Container{}, true), }, }, returnedPVCs: &corev1.PersistentVolumeClaimList{ @@ -186,7 +186,7 @@ func Test_kubernetesClient_List(t *testing.T) { testingutil.CreateFakeContainerWithVolumeMounts("container-0", []corev1.VolumeMount{ {Name: "volume-0-nodejs-vol", MountPath: "/data"}, }), - }, []corev1.Container{}), + }, []corev1.Container{}, true), }, }, returnedPVCs: &corev1.PersistentVolumeClaimList{ @@ -220,7 +220,7 @@ func Test_kubernetesClient_List(t *testing.T) { {Name: "volume-1-vol", MountPath: "/path"}, {Name: "volume-vol", MountPath: "/path1"}, }), - }, []corev1.Container{}), + }, []corev1.Container{}, true), }, }, returnedPVCs: &corev1.PersistentVolumeClaimList{ @@ -251,7 +251,7 @@ func Test_kubernetesClient_List(t *testing.T) { {Name: "volume-1-vol", MountPath: "/path"}, {Name: OdoSourceVolume, MountPath: "/path1"}, }), - }, []corev1.Container{}), + }, []corev1.Container{}, true), }, }, returnedPVCs: &corev1.PersistentVolumeClaimList{ @@ -430,7 +430,7 @@ func Test_kubernetesClient_Create(t *testing.T) { t.Errorf("failed to create quantity by calling resource.ParseQuantity(%v)", tt.args.storage.Spec.Size) } - wantLabels := odolabels.GetLabels(tt.fields.generic.componentName, tt.fields.generic.appName, odolabels.ComponentDevMode) + wantLabels := odolabels.GetLabels(tt.fields.generic.componentName, tt.fields.generic.appName, odolabels.ComponentDevMode, false) odolabels.AddStorageInfo(wantLabels, tt.args.storage.Name, strings.Contains(tt.args.storage.Name, OdoSourceVolume)) // created PVC should be labeled with labels passed to CreatePVC diff --git a/pkg/storage/storage_test.go b/pkg/storage/storage_test.go index 5e9f8faf254..6a769b7b174 100644 --- a/pkg/storage/storage_test.go +++ b/pkg/storage/storage_test.go @@ -12,7 +12,7 @@ import ( ) func getStorageLabels(storageName, componentName, applicationName string) map[string]string { - labels := odolabels.GetLabels(componentName, applicationName, odolabels.ComponentDevMode) + labels := odolabels.GetLabels(componentName, applicationName, odolabels.ComponentDevMode, false) odolabels.AddStorageInfo(labels, storageName, false) return labels } diff --git a/pkg/testingutil/deployments.go b/pkg/testingutil/deployments.go index 888999f8ecf..f430231c060 100644 --- a/pkg/testingutil/deployments.go +++ b/pkg/testingutil/deployments.go @@ -1,32 +1,36 @@ package testingutil import ( - odolabels "github.com/redhat-developer/odo/pkg/labels" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + + odolabels "github.com/redhat-developer/odo/pkg/labels" ) // CreateFakeDeployment creates a fake deployment with the given pod name and labels -func CreateFakeDeployment(podName string) *appsv1.Deployment { +// isPartOfComponent bool decides if the deployment is supposed to be a part of the core resources deployed by `odo dev` +func CreateFakeDeployment(podName string, isPartOfComponent bool) *appsv1.Deployment { fakeUID := types.UID("12345") - + labels := odolabels.Builder(). + WithApp("app"). + WithAppName("app"). + WithComponentName(podName). + WithManager("odo"). + WithMode(odolabels.ComponentDevMode) + if isPartOfComponent { + labels = labels.WithComponent(podName) + } deployment := appsv1.Deployment{ TypeMeta: metav1.TypeMeta{ Kind: "Deployment", APIVersion: "apps/v1", }, ObjectMeta: metav1.ObjectMeta{ - Name: podName, - UID: fakeUID, - Labels: odolabels.Builder(). - WithApp("app"). - WithAppName("app"). - WithComponentName(podName). - WithManager("odo"). - WithMode(odolabels.ComponentDevMode). - Labels(), + Name: podName, + UID: fakeUID, + Labels: labels.Labels(), Annotations: odolabels.Builder().WithProjectType(podName).Labels(), }, } @@ -34,8 +38,9 @@ func CreateFakeDeployment(podName string) *appsv1.Deployment { } // CreateFakeDeploymentsWithContainers creates a fake pod with the given pod name, container name and containers -func CreateFakeDeploymentsWithContainers(podName string, containers []corev1.Container, initContainers []corev1.Container) *appsv1.Deployment { - fakeDeployment := CreateFakeDeployment(podName) +// isPartOfComponent bool decides if the deployment is supposed to be a part of the core resources deployed by `odo dev` +func CreateFakeDeploymentsWithContainers(podName string, containers []corev1.Container, initContainers []corev1.Container, isPartOfComponent bool) *appsv1.Deployment { + fakeDeployment := CreateFakeDeployment(podName, isPartOfComponent) fakeDeployment.Spec.Template.Spec.Containers = containers fakeDeployment.Spec.Template.Spec.InitContainers = initContainers return fakeDeployment diff --git a/pkg/testingutil/pods.go b/pkg/testingutil/pods.go index 6e88a84aae3..2b0938d60cf 100644 --- a/pkg/testingutil/pods.go +++ b/pkg/testingutil/pods.go @@ -1,9 +1,10 @@ package testingutil import ( - odolabels "github.com/redhat-developer/odo/pkg/labels" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + odolabels "github.com/redhat-developer/odo/pkg/labels" ) // CreateFakePod creates a fake pod with the given pod name and component name @@ -11,7 +12,7 @@ func CreateFakePod(componentName, podName string) *corev1.Pod { fakePod := &corev1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: podName, - Labels: odolabels.GetLabels(componentName, "app", odolabels.ComponentDevMode), + Labels: odolabels.GetLabels(componentName, "app", odolabels.ComponentDevMode, false), }, Status: corev1.PodStatus{ Phase: corev1.PodRunning, diff --git a/pkg/testingutil/services.go b/pkg/testingutil/services.go index 9b1ae98941f..4a669e3dd01 100644 --- a/pkg/testingutil/services.go +++ b/pkg/testingutil/services.go @@ -1,13 +1,14 @@ package testingutil import ( - odolabels "github.com/redhat-developer/odo/pkg/labels" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + odolabels "github.com/redhat-developer/odo/pkg/labels" ) func FakeKubeService(componentName, serviceName string) corev1.Service { - labels := odolabels.GetLabels(componentName, "app", odolabels.ComponentDevMode) + labels := odolabels.GetLabels(componentName, "app", odolabels.ComponentDevMode, false) return corev1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: serviceName, diff --git a/pkg/watch/watch.go b/pkg/watch/watch.go index bdf0f69adf0..43105260a3b 100644 --- a/pkg/watch/watch.go +++ b/pkg/watch/watch.go @@ -11,6 +11,7 @@ import ( "time" "github.com/devfile/library/pkg/devfile/parser" + _delete "github.com/redhat-developer/odo/pkg/component/delete" "github.com/redhat-developer/odo/pkg/devfile/adapters" "github.com/redhat-developer/odo/pkg/kclient" @@ -232,7 +233,7 @@ func (o *WatchClient) WatchAndPush(out io.Writer, parameters WatchParameters, ct } defer sourcesWatcher.Close() - selector := labels.GetSelector(parameters.ComponentName, parameters.ApplicationName, labels.ComponentDevMode) + selector := labels.GetSelector(parameters.ComponentName, parameters.ApplicationName, labels.ComponentDevMode, true) deploymentWatcher, err := o.kubeClient.DeploymentWatcher(ctx, selector) if err != nil { return fmt.Errorf("error watching deployment: %v", err) @@ -428,7 +429,7 @@ func (o *WatchClient) eventWatcher(ctx context.Context, sourcesWatcher *fsnotify switch kevent := ev.Object.(type) { case *corev1.Event: podName := kevent.InvolvedObject.Name - selector := labels.GetSelector(parameters.ComponentName, parameters.ApplicationName, labels.ComponentDevMode) + selector := labels.GetSelector(parameters.ComponentName, parameters.ApplicationName, labels.ComponentDevMode, true) matching, err := o.kubeClient.IsPodNameMatchingSelector(ctx, podName, selector) if err != nil { return err diff --git a/tests/e2escenarios/e2e_devfile_test.go b/tests/e2escenarios/e2e_devfile_test.go index 0668b8cbe2e..fb5b41716d9 100644 --- a/tests/e2escenarios/e2e_devfile_test.go +++ b/tests/e2escenarios/e2e_devfile_test.go @@ -42,7 +42,7 @@ var _ = Describe("odo devfile supported tests", func() { defer helper.Chdir(workingDir) helper.Chdir(projectDirPath) helper.Cmd("odo", "init", "--name", componentName, "--devfile", component, "--starter", starter).ShouldPass() - session, _, _, _, err := helper.StartDevMode() + session, _, _, _, err := helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) session.Stop() session.WaitEnd() diff --git a/tests/e2escenarios/e2e_test.go b/tests/e2escenarios/e2e_test.go index 5a4a565dac4..8096f669006 100644 --- a/tests/e2escenarios/e2e_test.go +++ b/tests/e2escenarios/e2e_test.go @@ -13,6 +13,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "github.com/redhat-developer/odo/tests/helper" ) @@ -75,7 +76,7 @@ var _ = Describe("E2E Test", func() { var devSession helper.DevSession var ports map[string]string - devSession, _, _, ports, err = helper.StartDevMode() + devSession, _, _, ports, err = helper.StartDevMode(nil) helper.ReplaceString(filepath.Join(commonVar.Context, "server.js"), "from Node.js", "from updated Node.js") Expect(err).ToNot(HaveOccurred()) _, _, _, err = devSession.WaitSync() @@ -118,7 +119,7 @@ var _ = Describe("E2E Test", func() { helper.MatchAllInOutput(stdout, []string{componentName, "nodejs", "Deploy"}) // start dev mode again - devSession, _, _, ports, err = helper.StartDevMode() + devSession, _, _, ports, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) // making changes to the project again @@ -192,7 +193,7 @@ var _ = Describe("E2E Test", func() { var devSession helper.DevSession var ports map[string]string - devSession, _, _, ports, err = helper.StartDevMode() + devSession, _, _, ports, err = helper.StartDevMode(nil) helper.ReplaceString(filepath.Join(commonVar.Context, "server.js"), "from Node.js", "from updated Node.js") Expect(err).ToNot(HaveOccurred()) @@ -238,7 +239,7 @@ var _ = Describe("E2E Test", func() { helper.MatchAllInOutput(stdout, []string{componentName, "nodejs", "Deploy"}) // start dev mode again - devSession, _, _, ports, err = helper.StartDevMode() + devSession, _, _, ports, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) // making changes to the project again diff --git a/tests/helper/helper_dev.go b/tests/helper/helper_dev.go index 0cd1536e8cd..3ec06998d25 100644 --- a/tests/helper/helper_dev.go +++ b/tests/helper/helper_dev.go @@ -24,7 +24,7 @@ import ( var outContents []byte var errContents []byte BeforeEach(func() { - devSession, outContents, errContents = helper.StartDevMode() + devSession, outContents, errContents = helper.StartDevMode(nil) }) AfterEach(func() { devSession.Stop() @@ -48,7 +48,7 @@ import ( var outContents []byte var errContents []byte BeforeEach(func() { - devSession, outContents, errContents = helper.StartDevMode() + devSession, outContents, errContents = helper.StartDevMode(nil) defer devSession.Stop() [...] }) @@ -71,7 +71,7 @@ import ( var outContents []byte var errContents []byte BeforeEach(func() { - devSession, outContents, errContents = helper.StartDevMode() + devSession, outContents, errContents = helper.StartDevMode(nil) defer devSession.Kill() [...] }) @@ -115,9 +115,10 @@ type DevSession struct { // It returns a session structure, the contents of the standard and error outputs // and the redirections endpoints to access ports opened by component // when the dev mode is completely started -func StartDevMode(opts ...string) (DevSession, []byte, []byte, map[string]string, error) { +func StartDevMode(envvars []string, opts ...string) (DevSession, []byte, []byte, map[string]string, error) { args := []string{"dev", "--random-ports"} args = append(args, opts...) + // session := Cmd("odo", args...).AddEnv(envvars...).Runner().session session := CmdRunner("odo", args...) WaitForOutputToContain("Press Ctrl+c to exit `odo dev` and delete resources from the cluster", 360, 10, session) result := DevSession{ @@ -156,7 +157,7 @@ func (o DevSession) WaitEnd() { o.session.Wait(3 * time.Minute) } -// WaitSync waits for the synchronization of files to be finished +// WaitSync waits for the synchronization of files to be finished // It returns the contents of the standard and error outputs // and the list of forwarded ports // since the end of the dev mode or the last time WaitSync/GetInfo has been called @@ -192,8 +193,8 @@ func (o DevSession) CheckNotSynced(timeout time.Duration) { // RunDevMode runs a dev session and executes the `inside` code when the dev mode is completely started // The inside handler is passed the internal session pointer, the contents of the standard and error outputs, // and a slice of strings - ports - giving the redirections in the form localhost: to access ports opened by component -func RunDevMode(additionalOpts []string, inside func(session *gexec.Session, outContents []byte, errContents []byte, ports map[string]string)) error { - session, outContents, errContents, urls, err := StartDevMode(additionalOpts...) +func RunDevMode(additionalOpts []string, envvars []string, inside func(session *gexec.Session, outContents []byte, errContents []byte, ports map[string]string)) error { + session, outContents, errContents, urls, err := StartDevMode(envvars, additionalOpts...) if err != nil { return err } diff --git a/tests/integration/cmd_add_binding_test.go b/tests/integration/cmd_add_binding_test.go index a312e0a586c..3877ae65614 100644 --- a/tests/integration/cmd_add_binding_test.go +++ b/tests/integration/cmd_add_binding_test.go @@ -242,7 +242,7 @@ status: When("odo dev is run", func() { BeforeEach(func() { - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { diff --git a/tests/integration/cmd_delete_test.go b/tests/integration/cmd_delete_test.go index c12aa977c9c..7c04a75d758 100644 --- a/tests/integration/cmd_delete_test.go +++ b/tests/integration/cmd_delete_test.go @@ -113,7 +113,7 @@ ComponentSettings: var devSession helper.DevSession BeforeEach(func() { var err error - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) defer func() { devSession.Kill() diff --git a/tests/integration/cmd_describe_component_test.go b/tests/integration/cmd_describe_component_test.go index 58173b5a118..c94839f1c0d 100644 --- a/tests/integration/cmd_describe_component_test.go +++ b/tests/integration/cmd_describe_component_test.go @@ -171,7 +171,7 @@ var _ = Describe("odo describe component command tests", func() { BeforeEach(func() { var err error - devSession, _, _, ports, err = helper.StartDevMode() + devSession, _, _, ports, err = helper.StartDevMode(nil) Expect(err).NotTo(HaveOccurred()) }) diff --git a/tests/integration/cmd_describe_list_binding_test.go b/tests/integration/cmd_describe_list_binding_test.go index 59fff7c1db5..87c60b4bf88 100644 --- a/tests/integration/cmd_describe_list_binding_test.go +++ b/tests/integration/cmd_describe_list_binding_test.go @@ -523,7 +523,7 @@ var _ = Describe("odo describe/list binding command tests", func() { var session helper.DevSession BeforeEach(func() { var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) diff --git a/tests/integration/cmd_dev_debug_test.go b/tests/integration/cmd_dev_debug_test.go index e8c0dc9d485..9abbc42203e 100644 --- a/tests/integration/cmd_dev_debug_test.go +++ b/tests/integration/cmd_dev_debug_test.go @@ -40,7 +40,7 @@ var _ = Describe("odo dev debug command tests", func() { var ports map[string]string BeforeEach(func() { var err error - devSession, _, _, ports, err = helper.StartDevMode("--debug") + devSession, _, _, ports, err = helper.StartDevMode(nil, "--debug") Expect(err).ToNot(HaveOccurred()) }) @@ -66,7 +66,7 @@ var _ = Describe("odo dev debug command tests", func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfileCompositeRunAndDebug.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) var err error - session, stdout, stderr, ports, err = helper.StartDevMode("--debug") + session, stdout, stderr, ports, err = helper.StartDevMode(nil, "--debug") Expect(err).ToNot(HaveOccurred()) }) @@ -135,7 +135,7 @@ var _ = Describe("odo dev debug command tests", func() { filepath.Join(commonVar.Context, "devfile.yaml")) helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) var err error - session, stdout, stderr, ports, err = helper.StartDevMode("--debug") + session, stdout, stderr, ports, err = helper.StartDevMode(nil, "--debug") Expect(err).ToNot(HaveOccurred()) }) diff --git a/tests/integration/cmd_dev_test.go b/tests/integration/cmd_dev_test.go index 0f073ece38b..5ab957482a9 100644 --- a/tests/integration/cmd_dev_test.go +++ b/tests/integration/cmd_dev_test.go @@ -61,7 +61,7 @@ var _ = Describe("odo dev command tests", func() { Expect(helper.VerifyFileExists(".odo/env/env.yaml")).To(BeFalse()) }) It("should show validation errors if the devfile is incorrect", func() { - err := helper.RunDevMode(nil, func(session *gexec.Session, outContents, errContents []byte, ports map[string]string) { + err := helper.RunDevMode(nil, nil, func(session *gexec.Session, outContents, errContents []byte, ports map[string]string) { helper.ReplaceString(filepath.Join(commonVar.Context, "devfile.yaml"), "kind: run", "kind: build") helper.WaitForOutputToContain("Error occurred on Push", 180, 10, session) }) @@ -71,7 +71,7 @@ var _ = Describe("odo dev command tests", func() { // Create a new file A fileAPath, fileAText := helper.CreateSimpleFile(commonVar.Context, "my-file-", ".txt") // watch that project - err := helper.RunDevMode(nil, func(session *gexec.Session, outContents, errContents []byte, ports map[string]string) { + err := helper.RunDevMode(nil, nil, func(session *gexec.Session, outContents, errContents []byte, ports map[string]string) { // Change some other file B helper.ReplaceString(filepath.Join(commonVar.Context, "server.js"), "App started", "App is super started") @@ -83,7 +83,7 @@ var _ = Describe("odo dev command tests", func() { Expect(err).ToNot(HaveOccurred()) }) It("ensure that index information is updated", func() { - err := helper.RunDevMode(nil, func(session *gexec.Session, outContents, errContents []byte, ports map[string]string) { + err := helper.RunDevMode(nil, nil, func(session *gexec.Session, outContents, errContents []byte, ports map[string]string) { indexAfterPush, err := util.ReadFileIndex(filepath.Join(commonVar.Context, ".odo", "odo-file-index.json")) Expect(err).ToNot(HaveOccurred()) @@ -188,7 +188,7 @@ var _ = Describe("odo dev command tests", func() { When("recording telemetry data", func() { BeforeEach(func() { helper.EnableTelemetryDebug() - session, _, _, _, _ := helper.StartDevMode() + session, _, _, _, _ := helper.StartDevMode(nil) session.Stop() session.WaitEnd() }) @@ -212,7 +212,7 @@ var _ = Describe("odo dev command tests", func() { BeforeEach(func() { var err error - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) // An ENV file should have been created indicating current namespace Expect(helper.VerifyFileExists(".odo/env/env.yaml")).To(BeTrue()) @@ -237,7 +237,7 @@ var _ = Describe("odo dev command tests", func() { }) It("should run odo dev on initial namespace", func() { - err := helper.RunDevMode(nil, func(session *gexec.Session, outContents, errContents []byte, ports map[string]string) { + err := helper.RunDevMode(nil, nil, func(session *gexec.Session, outContents, errContents []byte, ports map[string]string) { output := commonVar.CliRunner.Run("get", "deployment").Err.Contents() Expect(string(output)).To(ContainSubstring("No resources found in " + otherNS + " namespace.")) @@ -267,7 +267,7 @@ var _ = Describe("odo dev command tests", func() { BeforeEach(func() { helper.Cmd("odo", "preference", "set", "-f", "Ephemeral", "false").ShouldPass() var err error - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) // An ENV file should have been created indicating current namespace Expect(helper.VerifyFileExists(".odo/env/env.yaml")).To(BeTrue()) @@ -363,7 +363,7 @@ var _ = Describe("odo dev command tests", func() { BeforeEach(func() { var err error - devSession, _, _, _, err = helper.StartDevMode("--no-watch") + devSession, _, _, _, err = helper.StartDevMode(nil, "--no-watch") Expect(err).ToNot(HaveOccurred()) // An ENV file should have been created indicating current namespace Expect(helper.VerifyFileExists(".odo/env/env.yaml")).To(BeTrue()) @@ -396,7 +396,7 @@ var _ = Describe("odo dev command tests", func() { helper.ReplaceString(filepath.Join(commonVar.Context, "devfile.yaml"), "npm start", "sleep 20 ; npm start") var err error - devSession, _, _, ports, err = helper.StartDevMode() + devSession, _, _, ports, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) @@ -442,7 +442,7 @@ var _ = Describe("odo dev command tests", func() { var ports map[string]string BeforeEach(func() { var err error - devSession, _, _, ports, err = helper.StartDevMode() + devSession, _, _, ports, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) @@ -507,7 +507,7 @@ var _ = Describe("odo dev command tests", func() { var ports map[string]string BeforeEach(func() { var err error - devSession, _, _, ports, err = helper.StartDevMode() + devSession, _, _, ports, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) @@ -614,7 +614,7 @@ var _ = Describe("odo dev command tests", func() { var session helper.DevSession BeforeEach(func() { var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -633,7 +633,7 @@ var _ = Describe("odo dev command tests", func() { var session helper.DevSession BeforeEach(func() { var err error - session, _, _, _, err = helper.StartDevMode("--var", "VALUE_TEST=baz") + session, _, _, _, err = helper.StartDevMode(nil, "--var", "VALUE_TEST=baz") Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -655,7 +655,7 @@ var _ = Describe("odo dev command tests", func() { var err error err = helper.CreateFileWithContent(varfilename, "VALUE_TEST=baz") Expect(err).ToNot(HaveOccurred()) - session, _, _, _, err = helper.StartDevMode("--var-file", "vars.txt") + session, _, _, _, err = helper.StartDevMode(nil, "--var-file", "vars.txt") Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -679,7 +679,7 @@ var _ = Describe("odo dev command tests", func() { _ = os.Setenv("VALUE_TEST", "baz") err = helper.CreateFileWithContent(varfilename, "VALUE_TEST") Expect(err).ToNot(HaveOccurred()) - session, _, _, _, err = helper.StartDevMode("--var-file", "vars.txt") + session, _, _, _, err = helper.StartDevMode(nil, "--var-file", "vars.txt") Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -705,7 +705,7 @@ var _ = Describe("odo dev command tests", func() { }) It("should be able to exec command", func() { - err := helper.RunDevMode(nil, func(session *gexec.Session, out, err []byte, ports map[string]string) { + err := helper.RunDevMode(nil, nil, func(session *gexec.Session, out, err []byte, ports map[string]string) { podName := commonVar.CliRunner.GetRunningPodNameByComponent(devfileCmpName, commonVar.Project) output := commonVar.CliRunner.ExecListDir(podName, commonVar.Project, "/projects") helper.MatchAllInOutput(output, []string{"test_env_variable", "test_build_env_variable"}) @@ -722,7 +722,7 @@ var _ = Describe("odo dev command tests", func() { }) It("should be able to exec command", func() { - err := helper.RunDevMode(nil, func(session *gexec.Session, out, err []byte, ports map[string]string) { + err := helper.RunDevMode(nil, nil, func(session *gexec.Session, out, err []byte, ports map[string]string) { podName := commonVar.CliRunner.GetRunningPodNameByComponent(devfileCmpName, commonVar.Project) output := commonVar.CliRunner.ExecListDir(podName, commonVar.Project, "/projects") helper.MatchAllInOutput(output, []string{"test_build_env_variable1", "test_build_env_variable2", "test_env_variable1", "test_env_variable2"}) @@ -739,7 +739,7 @@ var _ = Describe("odo dev command tests", func() { }) It("should be able to exec command", func() { - err := helper.RunDevMode(nil, func(session *gexec.Session, out, err []byte, ports map[string]string) { + err := helper.RunDevMode(nil, nil, func(session *gexec.Session, out, err []byte, ports map[string]string) { podName := commonVar.CliRunner.GetRunningPodNameByComponent(devfileCmpName, commonVar.Project) output := commonVar.CliRunner.ExecListDir(podName, commonVar.Project, "/projects") helper.MatchAllInOutput(output, []string{"build env variable with space", "env with space"}) @@ -764,7 +764,7 @@ var _ = Describe("odo dev command tests", func() { // Create a new directory helper.MakeDir(newDirPath) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) @@ -831,7 +831,7 @@ var _ = Describe("odo dev command tests", func() { // Create a new directory helper.MakeDir(newDirPath) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) @@ -895,7 +895,7 @@ var _ = Describe("odo dev command tests", func() { fmt.Printf("the .gitignore file was not created, reason %v", err.Error()) } var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -957,7 +957,7 @@ var _ = Describe("odo dev command tests", func() { helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfileSourceMapping.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) @@ -993,7 +993,7 @@ var _ = Describe("odo dev command tests", func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfile-with-projects.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1025,7 +1025,7 @@ var _ = Describe("odo dev command tests", func() { // reset clonePath and change the workdir accordingly, it should sync to project name helper.ReplaceString(filepath.Join(commonVar.Context, "devfile.yaml"), "clonePath: webapp/", "# clonePath: webapp/") var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1050,7 +1050,7 @@ var _ = Describe("odo dev command tests", func() { helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfile-with-multiple-projects.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1077,7 +1077,7 @@ var _ = Describe("odo dev command tests", func() { helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfile.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1102,7 +1102,7 @@ var _ = Describe("odo dev command tests", func() { BeforeEach(func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfile-with-volumes.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1170,7 +1170,7 @@ var _ = Describe("odo dev command tests", func() { helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfile-with-volume-components.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1198,7 +1198,7 @@ var _ = Describe("odo dev command tests", func() { BeforeEach(func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfileCompositeCommands.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1206,7 +1206,7 @@ var _ = Describe("odo dev command tests", func() { session.WaitEnd() }) - It("should execute all commands in composite commmand", func() { + It("should execute all commands in composite command", func() { // Verify the command executed successfully var statErr error podName := commonVar.CliRunner.GetRunningPodNameByComponent(devfileCmpName, commonVar.Project) @@ -1230,7 +1230,7 @@ var _ = Describe("odo dev command tests", func() { BeforeEach(func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfileCompositeCommandsParallel.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1262,7 +1262,7 @@ var _ = Describe("odo dev command tests", func() { BeforeEach(func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfileNestedCompCommands.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1297,7 +1297,7 @@ var _ = Describe("odo dev command tests", func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfileCompositeRunAndDebug.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) var err error - session, stdout, stderr, _, err = helper.StartDevMode() + session, stdout, stderr, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) @@ -1358,7 +1358,7 @@ var _ = Describe("odo dev command tests", func() { filepath.Join(commonVar.Context, "devfile.yaml")) helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) var err error - session, stdout, stderr, _, err = helper.StartDevMode() + session, stdout, stderr, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) @@ -1433,7 +1433,7 @@ var _ = Describe("odo dev command tests", func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfile.yaml"), filepath.Join(commonVar.Context, "devfile.yaml")) helper.ReplaceString(filepath.Join(commonVar.Context, "devfile.yaml"), "npm start", "npm starts") var err error - session, _, initErr, _, err = helper.StartDevMode() + session, _, initErr, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1473,7 +1473,7 @@ var _ = Describe("odo dev command tests", func() { helper.Cmd("odo", "init", "--name", devfileCmpName, "--devfile-path", helper.GetExamplePath("source", "devfiles", "springboot", "devfile.yaml")).ShouldPass() helper.CopyExample(filepath.Join("source", "devfiles", "springboot", "project"), commonVar.Context) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1516,7 +1516,7 @@ var _ = Describe("odo dev command tests", func() { }) It("should create vcs-uri annotation for the deployment when running odo dev", func() { - err := helper.RunDevMode(nil, func(session *gexec.Session, outContents []byte, errContents []byte, ports map[string]string) { + err := helper.RunDevMode(nil, nil, func(session *gexec.Session, outContents []byte, errContents []byte, ports map[string]string) { annotations := commonVar.CliRunner.GetAnnotationsDeployment(devfileCmpName, "app", commonVar.Project) var valueFound bool for key, value := range annotations { @@ -1540,7 +1540,7 @@ var _ = Describe("odo dev command tests", func() { checkFunc func(stdout, stderr string) } testForCmd := func(tt testCase) { - err := helper.RunDevMode(tt.devAdditionalOpts, func(session *gexec.Session, outContents []byte, errContents []byte, ports map[string]string) { + err := helper.RunDevMode(tt.devAdditionalOpts, nil, func(session *gexec.Session, outContents []byte, errContents []byte, ports map[string]string) { stdout := string(outContents) stderr := string(errContents) @@ -1606,7 +1606,7 @@ var _ = Describe("odo dev command tests", func() { }) It("should error out if called with a command of another kind", func() { - //devrun is a valid run command, not a build command + // devrun is a valid run command, not a build command output := helper.Cmd("odo", "dev", "--random-ports", "--build-command", "devrun").ShouldFail().Err() Expect(output).To(ContainSubstring("no build command with name \"devrun\" found in Devfile")) }) @@ -1626,7 +1626,7 @@ var _ = Describe("odo dev command tests", func() { }) It("should execute the default build command successfully if specified explicitly", func() { - //devbuild is the default build command + // devbuild is the default build command buildCmdTestFunc("devbuild", func(stdout, stderr string) { By("checking that it did not execute the custom build command", func() { helper.DontMatchAllInOutput(stdout, []string{ @@ -1655,7 +1655,7 @@ var _ = Describe("odo dev command tests", func() { }) It("should error out if called with a command of another kind", func() { - //devbuild is a valid build command, not a run command + // devbuild is a valid build command, not a run command output := helper.Cmd("odo", "dev", "--random-ports", "--run-command", "devbuild").ShouldFail().Err() Expect(output).To(ContainSubstring("no run command with name \"devbuild\" found in Devfile")) }) @@ -1675,7 +1675,7 @@ var _ = Describe("odo dev command tests", func() { }) It("should execute the default run command successfully if specified explicitly", func() { - //devrun is the default run command + // devrun is the default run command runCmdTestFunc("devrun", func(stdout, stderr string) { By("checking that it did not execute the custom run command", func() { helper.DontMatchAllInOutput(stdout, []string{ @@ -1723,7 +1723,7 @@ var _ = Describe("odo dev command tests", func() { helper.Cmd("odo", "init", "--name", cmpName, "--devfile-path", helper.GetExamplePath("source", "devfiles", "springboot", "devfile-registry.yaml")).ShouldPass() helper.CopyExample(filepath.Join("source", "devfiles", "springboot", "project"), commonVar.Context) var err error - session, _, _, _, err = helper.StartDevMode("-v", "4") + session, _, _, _, err = helper.StartDevMode(nil, "-v", "4") Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1830,7 +1830,7 @@ var _ = Describe("odo dev command tests", func() { helper.Cmd("odo", "init", "--name", cmpName, "--devfile-path", helper.GetExamplePath("source", "devfiles", "nodejs", "devfile-with-MR-CL-CR.yaml")).ShouldPass() helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1869,7 +1869,7 @@ var _ = Describe("odo dev command tests", func() { helper.ReplaceString("package.json", "node server.js", "node server/server.js") var err error - session, _, _, _, err = helper.StartDevMode() + session, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -1900,7 +1900,7 @@ var _ = Describe("odo dev command tests", func() { helper.Cmd("odo", "init", "--name", cmpName, "--devfile-path", helper.GetExamplePath("source", "devfiles", "nodejs", "devfile.yaml")).ShouldPass() helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) - session, _, errContents, _, err := helper.StartDevMode() + session, _, errContents, _, err := helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) defer func() { session.Stop() @@ -1922,7 +1922,7 @@ var _ = Describe("odo dev command tests", func() { helper.Cmd("odo", "init", "--name", cmpName, "--devfile-path", helper.GetExamplePath("source", "devfiles", "nodejs", "devfile.yaml")).ShouldPass() helper.CopyExample(filepath.Join("source", "devfiles", "nodejs", "project"), commonVar.Context) - session, _, errContents, err := helper.StartDevMode() + session, _, errContents, err := helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) defer session.Stop() helper.MatchAllInOutput(string(errContents), []string{"odo may not work as expected in the default project"}) @@ -1930,7 +1930,7 @@ var _ = Describe("odo dev command tests", func() { }) */ - //Test reused and adapted from the now-removed `cmd_devfile_delete_test.go`. + // Test reused and adapted from the now-removed `cmd_devfile_delete_test.go`. // cf. https://github.com/redhat-developer/odo/blob/24fd02673d25eb4c7bb166ec3369554a8e64b59c/tests/integration/devfile/cmd_devfile_delete_test.go#L172-L238 When("a component with endpoints is bootstrapped and pushed", func() { @@ -1943,7 +1943,7 @@ var _ = Describe("odo dev command tests", func() { helper.GetExamplePath("source", "devfiles", "nodejs", "devfile-with-multiple-endpoints.yaml")).ShouldPass() var err error - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ShouldNot(HaveOccurred()) }) @@ -1992,14 +1992,14 @@ var _ = Describe("odo dev command tests", func() { }) It("should run odo dev successfully (#5620)", func() { - devSession, stdoutBytes, stderrBytes, _, err := helper.StartDevMode() + devSession, stdoutBytes, stderrBytes, _, err := helper.StartDevMode(nil) Expect(err).ShouldNot(HaveOccurred()) defer devSession.Stop() const errorMessage = "Failed to create the component:" helper.DontMatchAllInOutput(string(stdoutBytes), []string{errorMessage}) helper.DontMatchAllInOutput(string(stderrBytes), []string{errorMessage}) - //the command has been started directly in the background. Check the PID stored in a specific file. + // the command has been started directly in the background. Check the PID stored in a specific file. commonVar.CliRunner.CheckCmdOpInRemoteDevfilePod( commonVar.CliRunner.GetRunningPodNameByComponent(devfileCmpName, commonVar.Project), "runtime", @@ -2026,7 +2026,7 @@ var _ = Describe("odo dev command tests", func() { helper.Cmd("odo", "init", "--name", cmpName, "--devfile-path", helper.GetExamplePath("source", "devfiles", "nodejs", "devfile-with-multiple-endpoints.yaml")).ShouldPass() Expect(helper.VerifyFileExists(".odo/devstate.json")).To(BeFalse()) var err error - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) @@ -2072,7 +2072,7 @@ var _ = Describe("odo dev command tests", func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfile-parent.yaml"), filepath.Join(commonVar.Context, "devfile-parent.yaml")) helper.CopyExample(filepath.Join("source", "nodejs"), commonVar.Context) var err error - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) gitignorePath := filepath.Join(commonVar.Context, ".gitignore") diff --git a/tests/integration/cmd_devfile_deploy_test.go b/tests/integration/cmd_devfile_deploy_test.go index 3ce828d05d0..a1997713d91 100644 --- a/tests/integration/cmd_devfile_deploy_test.go +++ b/tests/integration/cmd_devfile_deploy_test.go @@ -102,7 +102,7 @@ var _ = Describe("odo devfile deploy command tests", func() { }) It("should run odo dev successfully", func() { - session, _, _, _, err := helper.StartDevMode() + session, _, _, _, err := helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) session.Kill() session.WaitEnd() @@ -138,7 +138,7 @@ var _ = Describe("odo devfile deploy command tests", func() { When("running and stopping odo dev", func() { BeforeEach(func() { - session, _, _, _, err := helper.StartDevMode() + session, _, _, _, err := helper.StartDevMode(nil) Expect(err).ShouldNot(HaveOccurred()) session.Stop() session.WaitEnd() diff --git a/tests/integration/cmd_devfile_list_test.go b/tests/integration/cmd_devfile_list_test.go index 1776871be89..552cd6e62e2 100644 --- a/tests/integration/cmd_devfile_list_test.go +++ b/tests/integration/cmd_devfile_list_test.go @@ -99,7 +99,7 @@ var _ = Describe("odo list with devfile", func() { helper.CopyExampleDevFile(filepath.Join("source", "devfiles", "nodejs", "devfile-deploy.yaml"), path.Join(commonVar.Context, "devfile.yaml")) helper.Chdir(commonVar.Context) var err error - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -210,7 +210,7 @@ var _ = Describe("odo list with devfile", func() { var devSession helper.DevSession BeforeEach(func() { var err error - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { @@ -237,7 +237,7 @@ var _ = Describe("odo list with devfile", func() { var devSession helper.DevSession BeforeEach(func() { var err error - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) }) AfterEach(func() { diff --git a/tests/integration/cmd_logs_test.go b/tests/integration/cmd_logs_test.go index 26e44e9937a..594032f308d 100644 --- a/tests/integration/cmd_logs_test.go +++ b/tests/integration/cmd_logs_test.go @@ -7,6 +7,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "github.com/redhat-developer/odo/tests/helper" ) @@ -76,7 +77,7 @@ var _ = Describe("odo logs command tests", func() { var err error BeforeEach(func() { - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) // We need to wait for the pod deployed as a Kubernetes component Eventually(func() bool { @@ -174,7 +175,7 @@ var _ = Describe("odo logs command tests", func() { var devSession helper.DevSession var err error BeforeEach(func() { - devSession, _, _, _, err = helper.StartDevMode() + devSession, _, _, _, err = helper.StartDevMode(nil) Expect(err).ToNot(HaveOccurred()) helper.Cmd("odo", "deploy").AddEnv("PODMAN_CMD=echo").ShouldPass() Eventually(func() bool {