From 63d31646e97324643d64f7637afd54e5ed95fa18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20L=C3=B3pez=20Barba?= Date: Mon, 15 Nov 2021 11:01:41 +0100 Subject: [PATCH] Jlopezbarb/fix stack endpoints (#1961) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Retrieve endpoints from ingresses Signed-off-by: Javier López Barba * Run in vanilla clusters Signed-off-by: Javier López Barba * Not show anything if no endpoints available Signed-off-by: Javier López Barba --- cmd/stack/deploy.go | 7 ++----- pkg/cmd/stack/endpoints.go | 39 ++++++++++++++------------------------ pkg/k8s/ingresses/crud.go | 31 ++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 30 deletions(-) diff --git a/cmd/stack/deploy.go b/cmd/stack/deploy.go index c940038602f3..d77315f8367c 100644 --- a/cmd/stack/deploy.go +++ b/cmd/stack/deploy.go @@ -23,7 +23,6 @@ import ( "github.com/okteto/okteto/pkg/cmd/stack" "github.com/okteto/okteto/pkg/log" "github.com/okteto/okteto/pkg/model" - "github.com/okteto/okteto/pkg/okteto" "github.com/spf13/cobra" ) @@ -65,10 +64,8 @@ func Deploy(ctx context.Context) *cobra.Command { if err == nil { log.Success("Stack '%s' successfully deployed", s.Name) } - if okteto.Context().IsOkteto { - if err := stack.ListEndpoints(ctx, s, ""); err != nil { - return err - } + if err := stack.ListEndpoints(ctx, s, ""); err != nil { + return err } return err diff --git a/pkg/cmd/stack/endpoints.go b/pkg/cmd/stack/endpoints.go index 397e87fd482c..a39f38246566 100644 --- a/pkg/cmd/stack/endpoints.go +++ b/pkg/cmd/stack/endpoints.go @@ -15,46 +15,35 @@ package stack import ( "context" - "encoding/json" "fmt" "sort" "strings" + "github.com/okteto/okteto/pkg/k8s/ingresses" "github.com/okteto/okteto/pkg/log" "github.com/okteto/okteto/pkg/model" "github.com/okteto/okteto/pkg/okteto" ) func ListEndpoints(ctx context.Context, stack *model.Stack, output string) error { - oktetoClient, err := okteto.NewOktetoClient() + c, _, err := okteto.GetK8sClient() if err != nil { - return err + return fmt.Errorf("failed to load your local Kubeconfig: %s", err) } - endpointList, err := oktetoClient.ListStackEndpoints(ctx, stack) + iClient, err := ingresses.GetClient(ctx, c) if err != nil { - return fmt.Errorf("failed to get preview environments: %s", err) + return err } - switch output { - case "json": - bytes, err := json.MarshalIndent(endpointList, "", " ") - if err != nil { - return err - } - fmt.Println(string(bytes)) - default: - if len(endpointList) == 0 { - log.Information("There are no available endpoints for stack '%s'\n", stack.Name) - } else { - endpoints := make([]string, 0) - for _, endpoint := range endpointList { - endpoints = append(endpoints, endpoint.URL) - } - sort.Slice(endpoints, func(i, j int) bool { - return len(endpoints[i]) < len(endpoints[j]) - }) - log.Information("Endpoints available:\n - %s\n", strings.Join(endpoints, "\n - ")) - } + endpointList, err := iClient.GetEndpointsBySelector(ctx, stack.Namespace, fmt.Sprintf("%s=%s", model.StackNameLabel, stack.Name)) + if err != nil { + return err + } + if len(endpointList) > 0 { + sort.Slice(endpointList, func(i, j int) bool { + return len(endpointList[i]) < len(endpointList[j]) + }) + log.Information("Endpoints available:\n - %s\n", strings.Join(endpointList, "\n - ")) } return nil } diff --git a/pkg/k8s/ingresses/crud.go b/pkg/k8s/ingresses/crud.go index c81331d8a09f..ae97d6785f0c 100644 --- a/pkg/k8s/ingresses/crud.go +++ b/pkg/k8s/ingresses/crud.go @@ -133,3 +133,34 @@ func (iClient *Client) Destroy(ctx context.Context, name, namespace string) erro } return nil } + +func (iClient *Client) GetEndpointsBySelector(ctx context.Context, namespace, labels string) ([]string, error) { + result := make([]string, 0) + if iClient.isV1 { + iList, err := iClient.c.NetworkingV1().Ingresses(namespace).List(ctx, metav1.ListOptions{LabelSelector: labels}) + if err != nil { + return nil, err + } + for i := range iList.Items { + for _, rule := range iList.Items[i].Spec.Rules { + for _, path := range rule.IngressRuleValue.HTTP.Paths { + result = append(result, fmt.Sprintf("https://%s%s", rule.Host, path.Path)) + } + } + } + return result, nil + } + + iList, err := iClient.c.NetworkingV1beta1().Ingresses(namespace).List(ctx, metav1.ListOptions{LabelSelector: labels}) + if err != nil { + return nil, err + } + for i := range iList.Items { + for _, rule := range iList.Items[i].Spec.Rules { + for _, path := range rule.IngressRuleValue.HTTP.Paths { + result = append(result, fmt.Sprintf("https://%s%s", rule.Host, path.Path)) + } + } + } + return result, nil +}