From 81e830dd1880176c7525d95bc31931b124cc6d15 Mon Sep 17 00:00:00 2001 From: Igor Gov Date: Thu, 10 Feb 2022 16:00:33 +0200 Subject: [PATCH] Check that API server and tappers are running in check cmd (#789) * Check if API server and tapper are running in check cmd --- cli/cmd/checkRunner.go | 50 ++++++++++++++++++++++++++++++----- shared/kubernetes/provider.go | 4 +-- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/cli/cmd/checkRunner.go b/cli/cmd/checkRunner.go index 3def562e9..4583a86e2 100644 --- a/cli/cmd/checkRunner.go +++ b/cli/cmd/checkRunner.go @@ -31,7 +31,7 @@ func runMizuCheck() { } if checkPassed { - checkPassed = checkAllResourcesExist(ctx, kubernetesProvider, isInstallCommand) + checkPassed = checkK8sResources(ctx, kubernetesProvider, isInstallCommand) } if checkPassed { @@ -66,7 +66,7 @@ func checkKubernetesApi() (*kubernetes.Provider, *semver.SemVersion, bool) { } func checkMizuMode(ctx context.Context, kubernetesProvider *kubernetes.Provider) (bool, bool) { - logger.Log.Infof("\nmizu-mode\n--------------------") + logger.Log.Infof("\nmode\n--------------------") if exist, err := kubernetesProvider.DoesDeploymentExist(ctx, config.Config.MizuResourcesNamespace, kubernetes.ApiServerPodName); err != nil { logger.Log.Errorf("%v can't check mizu command, err: %v", fmt.Sprintf(uiUtils.Red, "✗"), err) @@ -79,7 +79,7 @@ func checkMizuMode(ctx context.Context, kubernetesProvider *kubernetes.Provider) return false, false } else if exist { logger.Log.Infof("%v mizu running with tap command", fmt.Sprintf(uiUtils.Green, "√")) - return true, true + return true, false } else { logger.Log.Infof("%v mizu is not running", fmt.Sprintf(uiUtils.Red, "✗")) return false, false @@ -99,7 +99,7 @@ func checkKubernetesVersion(kubernetesVersion *semver.SemVersion) bool { } func checkServerConnection(kubernetesProvider *kubernetes.Provider) bool { - logger.Log.Infof("\nmizu-connectivity\n--------------------") + logger.Log.Infof("\nAPI-server-connectivity\n--------------------") serverUrl := GetApiServerUrl() @@ -169,8 +169,8 @@ func checkPortForward(serverUrl string, kubernetesProvider *kubernetes.Provider) return nil } -func checkAllResourcesExist(ctx context.Context, kubernetesProvider *kubernetes.Provider, isInstallCommand bool) bool { - logger.Log.Infof("\nmizu-existence\n--------------------") +func checkK8sResources(ctx context.Context, kubernetesProvider *kubernetes.Provider, isInstallCommand bool) bool { + logger.Log.Infof("\nk8s-components\n--------------------") exist, err := kubernetesProvider.DoesNamespaceExist(ctx, config.Config.MizuResourcesNamespace) allResourcesExist := checkResourceExist(config.Config.MizuResourcesNamespace, "namespace", exist, err) @@ -227,7 +227,43 @@ func checkTapResourcesExist(ctx context.Context, kubernetesProvider *kubernetes. exist, err := kubernetesProvider.DoesPodExist(ctx, config.Config.MizuResourcesNamespace, kubernetes.ApiServerPodName) tapResourcesExist := checkResourceExist(kubernetes.ApiServerPodName, "pod", exist, err) - return tapResourcesExist + if !tapResourcesExist { + return false + } + + if pod, err := kubernetesProvider.GetPod(ctx, config.Config.MizuResourcesNamespace, kubernetes.ApiServerPodName); err != nil { + logger.Log.Errorf("%v error checking if '%v' pod exists, err: %v", fmt.Sprintf(uiUtils.Red, "✗"), kubernetes.ApiServerPodName, err) + return false + } else if kubernetes.IsPodRunning(pod) { + logger.Log.Infof("%v '%v' pod running", fmt.Sprintf(uiUtils.Green, "√"), kubernetes.ApiServerPodName) + } else { + logger.Log.Errorf("%v '%v' pod not running", fmt.Sprintf(uiUtils.Red, "✗"), kubernetes.ApiServerPodName) + return false + } + + tapperRegex := regexp.MustCompile(fmt.Sprintf("^%s.*", kubernetes.TapperPodName)) + if pods, err := kubernetesProvider.ListAllPodsMatchingRegex(ctx, tapperRegex, []string{config.Config.MizuResourcesNamespace}); err != nil { + logger.Log.Errorf("%v error listing '%v' pods, err: %v", fmt.Sprintf(uiUtils.Red, "✗"), kubernetes.TapperPodName, err) + return false + } else { + tappers := 0 + notRunningTappers := 0 + + for _, pod := range pods { + tappers += 1 + if !kubernetes.IsPodRunning(&pod) { + notRunningTappers += 1 + } + } + + if tappers != notRunningTappers { + logger.Log.Errorf("%v '%v' %v/%v pods are not running", fmt.Sprintf(uiUtils.Red, "✗"), kubernetes.TapperPodName, notRunningTappers, tappers) + return false + } + + logger.Log.Infof("%v '%v' %v pods running", fmt.Sprintf(uiUtils.Green, "√"), kubernetes.TapperPodName, tappers) + return true + } } func checkResourceExist(resourceName string, resourceType string, exist bool, err error) bool { diff --git a/shared/kubernetes/provider.go b/shared/kubernetes/provider.go index e0b5277f0..fbb74df05 100644 --- a/shared/kubernetes/provider.go +++ b/shared/kubernetes/provider.go @@ -1000,7 +1000,7 @@ func (provider *Provider) ListAllRunningPodsMatchingRegex(ctx context.Context, r matchingPods := make([]core.Pod, 0) for _, pod := range pods { - if isPodRunning(&pod) { + if IsPodRunning(&pod) { matchingPods = append(matchingPods, pod) } } @@ -1190,6 +1190,6 @@ func loadKubernetesConfiguration(kubeConfigPath string) clientcmd.ClientConfig { ) } -func isPodRunning(pod *core.Pod) bool { +func IsPodRunning(pod *core.Pod) bool { return pod.Status.Phase == core.PodRunning }