From 36077a9985ad8c7b431d695f02a34de9d09577d7 Mon Sep 17 00:00:00 2001 From: RamiBerm <54766858+RamiBerm@users.noreply.github.com> Date: Tue, 16 Nov 2021 17:53:38 +0200 Subject: [PATCH] TRA-3903 - display targetted pods before waiting for all daemon resources to be created (#475) * WIP * Update tapRunner.go * Update tapRunner.go --- cli/cmd/tapRunner.go | 45 ++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/cli/cmd/tapRunner.go b/cli/cmd/tapRunner.go index b66f11bbd..4fd9d09c7 100644 --- a/cli/cmd/tapRunner.go +++ b/cli/cmd/tapRunner.go @@ -119,6 +119,9 @@ func RunMizuTap() { logger.Log.Infof("Tapping pods in %s", namespacesStr) if config.Config.Tap.DryRun { + if err := printTappedPodsPreview(ctx, kubernetesProvider, targetNamespaces); err != nil { + logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error listing pods: %v", errormessage.FormatError(err))) + } return } @@ -134,7 +137,7 @@ func RunMizuTap() { return } if config.Config.Tap.DaemonMode { - if err := handleDaemonModePostCreation(cancel, kubernetesProvider); err != nil { + if err := handleDaemonModePostCreation(ctx, cancel, kubernetesProvider, targetNamespaces); err != nil { defer finishMizuExecution(kubernetesProvider, apiProvider) cancel() } else { @@ -156,28 +159,38 @@ func RunMizuTap() { } } -func handleDaemonModePostCreation(cancel context.CancelFunc, kubernetesProvider *kubernetes.Provider) error { +func handleDaemonModePostCreation(ctx context.Context, cancel context.CancelFunc, kubernetesProvider *kubernetes.Provider, namespaces []string) error { + if err := printTappedPodsPreview(ctx, kubernetesProvider, namespaces); err != nil { + return err + } + apiProvider := apiserver.NewProvider(GetApiServerUrl(), 90, 1*time.Second) if err := waitForDaemonModeToBeReady(cancel, kubernetesProvider, apiProvider); err != nil { return err } - if err := printDaemonModeTappedPods(apiProvider); err != nil { - return err - } return nil } -func printDaemonModeTappedPods(apiProvider *apiserver.Provider) error { - if healthStatus, err := apiProvider.GetHealthStatus(); err != nil { +/* +this function is a bit problematic as it might be detached from the actual pods the mizu api server will tap. +The alternative would be to wait for api server to be ready and then query it for the pods it listens to, this has +the arguably worse drawback of taking a relatively very long time before the user sees which pods are targeted, if any. +*/ +func printTappedPodsPreview(ctx context.Context, kubernetesProvider *kubernetes.Provider, namespaces []string) error { + if matchingPods, err := kubernetesProvider.ListAllRunningPodsMatchingRegex(ctx, config.Config.Tap.PodRegex(), namespaces); err != nil { return err } else { - for _, tappedPod := range healthStatus.TapStatus.Pods { + if len(matchingPods) == 0 { + printNoPodsFoundSuggestion(namespaces) + } + logger.Log.Info("Pods that match regex at this instant:") + for _, tappedPod := range matchingPods { logger.Log.Infof(uiUtils.Green, fmt.Sprintf("+%s", tappedPod.Name)) } + return nil } - return nil } func waitForDaemonModeToBeReady(cancel context.CancelFunc, kubernetesProvider *kubernetes.Provider, apiProvider *apiserver.Provider) error { @@ -215,11 +228,7 @@ func startTapperSyncer(ctx context.Context, cancel context.CancelFunc, provider } if len(tapperSyncer.CurrentlyTappedPods) == 0 { - var suggestionStr string - if !shared.Contains(targetNamespaces, kubernetes.K8sAllNamespaces) { - suggestionStr = ". Select a different namespace with -n or tap all namespaces with -A" - } - logger.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Did not find any pods matching the regex argument%s", suggestionStr)) + printNoPodsFoundSuggestion(targetNamespaces) } go func() { @@ -252,6 +261,14 @@ func startTapperSyncer(ctx context.Context, cancel context.CancelFunc, provider return nil } +func printNoPodsFoundSuggestion(targetNamespaces []string) { + var suggestionStr string + if !shared.Contains(targetNamespaces, kubernetes.K8sAllNamespaces) { + suggestionStr = ". You can also try selecting a different namespace with -n or tap all namespaces with -A" + } + logger.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Did not find any currently running pods that match the regex argument, mizu will automatically tap matching pods if any are created later%s", suggestionStr)) +} + func getErrorDisplayTextForK8sTapManagerError(err kubernetes.K8sTapManagerError) string { switch err.TapManagerReason { case kubernetes.TapManagerPodListError: