Describe non-odo component (#6615)

* Do not add odo/app on selector for named describe

* Display route

* Add integration tests

* Fix unit test
This commit is contained in:
Philippe Martin
2023-02-27 13:41:45 +01:00
committed by GitHub
parent b817365d5b
commit 79504e3663
6 changed files with 113 additions and 12 deletions

View File

@@ -20,7 +20,6 @@ import (
"github.com/redhat-developer/odo/pkg/kclient"
odolabels "github.com/redhat-developer/odo/pkg/labels"
"github.com/redhat-developer/odo/pkg/odo/commonflags"
odocontext "github.com/redhat-developer/odo/pkg/odo/context"
"github.com/redhat-developer/odo/pkg/platform"
"github.com/redhat-developer/odo/pkg/podman"
"github.com/redhat-developer/odo/pkg/util"
@@ -256,7 +255,7 @@ func getResourcesForComponent(
name string,
namespace string,
) ([]unstructured.Unstructured, error) {
selector := odolabels.GetSelector(name, odocontext.GetApplication(ctx), odolabels.ComponentAnyMode, false)
selector := odolabels.GetNameSelector(name)
resourceList, err := client.GetAllResourcesFromSelector(selector, namespace)
if err != nil {
return nil, err
@@ -470,7 +469,7 @@ func ListRoutesAndIngresses(client kclient.ClientInterface, componentName, appNa
return nil, nil, nil
}
selector := odolabels.GetSelector(componentName, appName, odolabels.ComponentDeployMode, false)
selector := odolabels.GetNameSelector(componentName)
k8sIngresses, err := client.ListIngresses(client.GetCurrentNamespace(), selector)
if err != nil {

View File

@@ -608,7 +608,7 @@ func TestListRoutesAndIngresses(t *testing.T) {
label := labels.GetLabels(componentName, "app", "", labels.ComponentDeployMode, false)
// cannot use default label to selector converter; it does not return expected result
selector := labels.GetSelector(componentName, "app", labels.ComponentDeployMode, false)
selector := labels.GetNameSelector(componentName)
// create ingress object
devfileObjWithIngress := testingutil.GetTestDevfileObjFromFile("devfile-deploy-ingress.yaml")
@@ -898,7 +898,7 @@ func TestGetDevfileInfo(t *testing.T) {
Labels())
c := kclient.NewMockClientInterface(ctrl)
c.EXPECT().GetCurrentNamespace().Return(kubeNs).AnyTimes()
selector := labels.GetSelector(componentName, odocontext.GetApplication(ctx), labels.ComponentAnyMode, false)
selector := labels.GetNameSelector(componentName)
c.EXPECT().GetAllResourcesFromSelector(gomock.Eq(selector), gomock.Eq(kubeNs)).
Return([]unstructured.Unstructured{u1, packageManifestResource, u2}, nil)
return c
@@ -911,7 +911,7 @@ func TestGetDevfileInfo(t *testing.T) {
WithProjectType("quarkus").
Labels())
c := podman.NewMockClient(ctrl)
selector := labels.GetSelector(componentName, odocontext.GetApplication(ctx), labels.ComponentAnyMode, false)
selector := labels.GetNameSelector(componentName)
c.EXPECT().GetAllResourcesFromSelector(gomock.Eq(selector), gomock.Eq("")).
Return([]unstructured.Unstructured{u1}, nil)
return c
@@ -935,14 +935,14 @@ func TestGetDevfileInfo(t *testing.T) {
Labels())
c := kclient.NewMockClientInterface(ctrl)
c.EXPECT().GetCurrentNamespace().Return(kubeNs).AnyTimes()
selector := labels.GetSelector(componentName, odocontext.GetApplication(ctx), labels.ComponentAnyMode, false)
selector := labels.GetNameSelector(componentName)
c.EXPECT().GetAllResourcesFromSelector(gomock.Eq(selector), gomock.Eq(kubeNs)).
Return([]unstructured.Unstructured{u1}, nil)
return c
},
podmanClient: func(ctx context.Context, ctrl *gomock.Controller, componentName string) podman.Client {
c := podman.NewMockClient(ctrl)
selector := labels.GetSelector(componentName, odocontext.GetApplication(ctx), labels.ComponentAnyMode, false)
selector := labels.GetNameSelector(componentName)
c.EXPECT().GetAllResourcesFromSelector(gomock.Eq(selector), gomock.Eq("")).Return(nil, nil)
return c
},
@@ -973,7 +973,7 @@ func TestGetDevfileInfo(t *testing.T) {
kubeClient: func(ctx context.Context, ctrl *gomock.Controller, componentName string) kclient.ClientInterface {
c := kclient.NewMockClientInterface(ctrl)
c.EXPECT().GetCurrentNamespace().Return(kubeNs).AnyTimes()
selector := labels.GetSelector(componentName, odocontext.GetApplication(ctx), labels.ComponentAnyMode, false)
selector := labels.GetNameSelector(componentName)
c.EXPECT().GetAllResourcesFromSelector(gomock.Eq(selector), gomock.Eq(kubeNs)).
Return(nil, nil)
return c
@@ -986,7 +986,7 @@ func TestGetDevfileInfo(t *testing.T) {
WithProjectType("quarkus").
Labels())
c := podman.NewMockClient(ctrl)
selector := labels.GetSelector(componentName, odocontext.GetApplication(ctx), labels.ComponentAnyMode, false)
selector := labels.GetNameSelector(componentName)
c.EXPECT().GetAllResourcesFromSelector(gomock.Eq(selector), gomock.Eq("")).Return(
[]unstructured.Unstructured{u1}, nil)
return c
@@ -1024,7 +1024,7 @@ func TestGetDevfileInfo(t *testing.T) {
Labels())
c := kclient.NewMockClientInterface(ctrl)
c.EXPECT().GetCurrentNamespace().Return(kubeNs).AnyTimes()
selector := labels.GetSelector(componentName, odocontext.GetApplication(ctx), labels.ComponentAnyMode, false)
selector := labels.GetNameSelector(componentName)
c.EXPECT().GetAllResourcesFromSelector(gomock.Eq(selector), gomock.Eq(kubeNs)).
Return([]unstructured.Unstructured{u1}, nil)
return c
@@ -1037,7 +1037,7 @@ func TestGetDevfileInfo(t *testing.T) {
WithProjectType("nodejs").
Labels())
c := podman.NewMockClient(ctrl)
selector := labels.GetSelector(componentName, odocontext.GetApplication(ctx), labels.ComponentAnyMode, false)
selector := labels.GetNameSelector(componentName)
c.EXPECT().GetAllResourcesFromSelector(gomock.Eq(selector), gomock.Eq("")).Return(
[]unstructured.Unstructured{u1}, nil)
return c

View File

@@ -215,6 +215,13 @@ func GetSelector(componentName string, applicationName string, mode string, isPa
return labels.String()
}
func GetNameSelector(componentName string) string {
labels := k8slabels.Set{
kubernetesInstanceLabel: componentName,
}
return labels.String()
}
// IsCoreComponent determines if a resource is core component (created in Dev mode and includes deployment, svc, pv, pvc, etc.)
// by checking for 'component' label key.
func IsCoreComponent(labels map[string]string) bool {

View File

@@ -0,0 +1,30 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-deployment
labels:
app: app
app.kubernetes.io/component: example-deployment
app.kubernetes.io/instance: example-deployment
app.kubernetes.io/name: example-deployment
app.kubernetes.io/part-of: app
app.openshift.io/runtime: example-deployment
spec:
rules:
- host: example-deployment.example.com
http:
paths:
- path: "/"
pathType: Prefix
backend:
service:
name: example-deployment
port:
number: 8080
- path: "/foo"
pathType: Prefix
backend:
service:
name: example-deployment
port:
number: 8080

View File

@@ -0,0 +1,21 @@
apiVersion: route.openshift.io/v1
kind: Route
metadata:
annotations:
isFromDevfile: "true"
labels:
app: app
app.kubernetes.io/component: example-deployment
app.kubernetes.io/instance: example-deployment
app.kubernetes.io/name: example-deployment
app.kubernetes.io/part-of: app
app.openshift.io/runtime: example-deployment
name: example-deployment
spec:
port:
targetPort: "3001"
to:
kind: Service
name: example-deployment
weight: 100
wildcardPolicy: None

View File

@@ -744,4 +744,48 @@ var _ = Describe("odo describe component command tests", func() {
}
}
})
When("a non-odo application is present on the cluster", func() {
var (
// From manifests
componentName = "example-deployment"
ingressDomain = "example-deployment.example.com/"
)
BeforeEach(func() {
commonVar.CliRunner.Run("create", "-f", helper.GetExamplePath("manifests", "deployment-app-label.yaml"))
if helper.IsKubernetesCluster() {
commonVar.CliRunner.Run("create", "-f", helper.GetExamplePath("manifests", "ingress-app-label.yaml"))
} else {
commonVar.CliRunner.Run("create", "-f", helper.GetExamplePath("manifests", "route-app-label.yaml"))
}
})
AfterEach(func() {
if helper.IsKubernetesCluster() {
commonVar.CliRunner.Run("delete", "-f", helper.GetExamplePath("manifests", "ingress-app-label.yaml"))
} else {
commonVar.CliRunner.Run("delete", "-f", helper.GetExamplePath("manifests", "route-app-label.yaml"))
}
commonVar.CliRunner.Run("delete", "-f", helper.GetExamplePath("manifests", "deployment-app-label.yaml"))
})
It("should describe the component", func() {
output := helper.Cmd("odo", "describe", "component", "--name", componentName).ShouldPass().Out()
Expect(output).To(ContainSubstring("Name: " + componentName))
if helper.IsKubernetesCluster() {
helper.MatchAllInOutput(output, []string{
"Kubernetes Ingresses",
componentName + ": " + ingressDomain,
})
} else {
helper.MatchAllInOutput(output, []string{
"OpenShift Routes",
componentName + ": ",
})
}
})
})
})