mirror of
https://github.com/redhat-developer/odo.git
synced 2025-10-19 03:06:19 +03:00
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:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
30
tests/examples/manifests/ingress-app-label.yaml
Normal file
30
tests/examples/manifests/ingress-app-label.yaml
Normal 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
|
||||
21
tests/examples/manifests/route-app-label.yaml
Normal file
21
tests/examples/manifests/route-app-label.yaml
Normal 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
|
||||
@@ -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 + ": ",
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user