diff --git a/cli/cmd/logs.go b/cli/cmd/logs.go index 16c626f33..3309f86fd 100644 --- a/cli/cmd/logs.go +++ b/cli/cmd/logs.go @@ -32,7 +32,7 @@ var logsCmd = &cobra.Command{ logger.Log.Debugf("Using file path %s", config.Config.Logs.FilePath()) - if dumpLogsErr := fsUtils.DumpLogs(kubernetesProvider, ctx, config.Config.Logs.FilePath()); dumpLogsErr != nil { + if dumpLogsErr := fsUtils.DumpLogs(ctx, kubernetesProvider, config.Config.Logs.FilePath()); dumpLogsErr != nil { logger.Log.Errorf("Failed dump logs %v", dumpLogsErr) } diff --git a/cli/cmd/tapRunner.go b/cli/cmd/tapRunner.go index 535bbacb1..4f4ce6d37 100644 --- a/cli/cmd/tapRunner.go +++ b/cli/cmd/tapRunner.go @@ -8,6 +8,10 @@ import ( "strings" "time" + "gopkg.in/yaml.v3" + core "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/wait" + "github.com/up9inc/mizu/cli/apiserver" "github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config/configStructs" @@ -22,9 +26,6 @@ import ( "github.com/up9inc/mizu/shared" "github.com/up9inc/mizu/shared/debounce" "github.com/up9inc/mizu/tap/api" - yaml "gopkg.in/yaml.v3" - core "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/util/wait" ) const ( @@ -36,7 +37,6 @@ type tapState struct { apiServerService *core.Service currentlyTappedPods []core.Pod mizuServiceAccountExists bool - doNotRemoveConfigMap bool } var state tapState @@ -150,9 +150,6 @@ func createMizuResources(ctx context.Context, kubernetesProvider *kubernetes.Pro if err := createMizuConfigmap(ctx, kubernetesProvider, mizuValidationRules); err != nil { logger.Log.Warningf(uiUtils.Warning, fmt.Sprintf("Failed to create resources required for policy validation. Mizu will not validate policy rules. error: %v\n", errormessage.FormatError(err))) - state.doNotRemoveConfigMap = true - } else if mizuValidationRules == "" { - state.doNotRemoveConfigMap = true } return nil @@ -268,75 +265,108 @@ func finishMizuExecution(kubernetesProvider *kubernetes.Provider) { telemetry.ReportAPICalls() removalCtx, cancel := context.WithTimeout(context.Background(), cleanupTimeout) defer cancel() - dumpLogsIfNeeded(kubernetesProvider, removalCtx) - cleanUpMizuResources(kubernetesProvider, removalCtx, cancel) + dumpLogsIfNeeded(removalCtx, kubernetesProvider) + cleanUpMizuResources(removalCtx, cancel, kubernetesProvider) } -func dumpLogsIfNeeded(kubernetesProvider *kubernetes.Provider, removalCtx context.Context) { +func dumpLogsIfNeeded(ctx context.Context, kubernetesProvider *kubernetes.Provider) { if !config.Config.DumpLogs { return } mizuDir := mizu.GetMizuFolderPath() filePath := path.Join(mizuDir, fmt.Sprintf("mizu_logs_%s.zip", time.Now().Format("2006_01_02__15_04_05"))) - if err := fsUtils.DumpLogs(kubernetesProvider, removalCtx, filePath); err != nil { + if err := fsUtils.DumpLogs(ctx, kubernetesProvider, filePath); err != nil { logger.Log.Errorf("Failed dump logs %v", err) } } -func cleanUpMizuResources(kubernetesProvider *kubernetes.Provider, removalCtx context.Context, cancel context.CancelFunc) { +func cleanUpMizuResources(ctx context.Context, cancel context.CancelFunc, kubernetesProvider *kubernetes.Provider) { logger.Log.Infof("\nRemoving mizu resources\n") - if !config.Config.IsNsRestrictedMode() { - if err := kubernetesProvider.RemoveNamespace(removalCtx, config.Config.MizuResourcesNamespace); err != nil { - logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error removing Namespace %s: %v", config.Config.MizuResourcesNamespace, errormessage.FormatError(err))) - return - } + var leftoverResources []string + + if config.Config.IsNsRestrictedMode() { + leftoverResources = cleanUpRestrictedMode(ctx, kubernetesProvider) } else { - if err := kubernetesProvider.RemovePod(removalCtx, config.Config.MizuResourcesNamespace, mizu.ApiServerPodName); err != nil { - logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error removing Pod %s in namespace %s: %v", mizu.ApiServerPodName, config.Config.MizuResourcesNamespace, errormessage.FormatError(err))) - } - - if err := kubernetesProvider.RemoveService(removalCtx, config.Config.MizuResourcesNamespace, mizu.ApiServerPodName); err != nil { - logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error removing Service %s in namespace %s: %v", mizu.ApiServerPodName, config.Config.MizuResourcesNamespace, errormessage.FormatError(err))) - } - - if err := kubernetesProvider.RemoveDaemonSet(removalCtx, config.Config.MizuResourcesNamespace, mizu.TapperDaemonSetName); err != nil { - logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error removing DaemonSet %s in namespace %s: %v", mizu.TapperDaemonSetName, config.Config.MizuResourcesNamespace, errormessage.FormatError(err))) - } - - if !state.doNotRemoveConfigMap { - if err := kubernetesProvider.RemoveConfigMap(removalCtx, config.Config.MizuResourcesNamespace, mizu.ConfigMapName); err != nil { - logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error removing ConfigMap %s in namespace %s: %v", mizu.ConfigMapName, config.Config.MizuResourcesNamespace, errormessage.FormatError(err))) - } - } - + leftoverResources = cleanUpNonRestrictedMode(ctx, cancel, kubernetesProvider) } - if state.mizuServiceAccountExists { - if !config.Config.IsNsRestrictedMode() { - if err := kubernetesProvider.RemoveNonNamespacedResources(removalCtx, mizu.ClusterRoleName, mizu.ClusterRoleBindingName); err != nil { - logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error removing non-namespaced resources: %v", errormessage.FormatError(err))) - return - } - } else { - if err := kubernetesProvider.RemoveServicAccount(removalCtx, config.Config.MizuResourcesNamespace, mizu.ServiceAccountName); err != nil { - logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error removing Service Account %s in namespace %s: %v", mizu.ServiceAccountName, config.Config.MizuResourcesNamespace, errormessage.FormatError(err))) - return - } - - if err := kubernetesProvider.RemoveRole(removalCtx, config.Config.MizuResourcesNamespace, mizu.RoleName); err != nil { - logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error removing Role %s in namespace %s: %v", mizu.RoleName, config.Config.MizuResourcesNamespace, errormessage.FormatError(err))) - } - - if err := kubernetesProvider.RemoveRoleBinding(removalCtx, config.Config.MizuResourcesNamespace, mizu.RoleBindingName); err != nil { - logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Error removing RoleBinding %s in namespace %s: %v", mizu.RoleBindingName, config.Config.MizuResourcesNamespace, errormessage.FormatError(err))) - } + if len(leftoverResources) > 0 { + errMsg := fmt.Sprintf("Failed to remove the following resources, for more info check logs at %s:", logger.GetLogFilePath()) + for _, resource := range leftoverResources { + errMsg += "\n- " + resource } + logger.Log.Errorf(uiUtils.Error, errMsg) + } +} + +func cleanUpRestrictedMode(ctx context.Context, kubernetesProvider *kubernetes.Provider) []string { + leftoverResources := make([]string, 0) + + if err := kubernetesProvider.RemovePod(ctx, config.Config.MizuResourcesNamespace, mizu.ApiServerPodName); err != nil { + resourceDesc := fmt.Sprintf("Pod %s in namespace %s", mizu.ApiServerPodName, config.Config.MizuResourcesNamespace) + handleDeletionError(err, resourceDesc, &leftoverResources) } - if !config.Config.IsNsRestrictedMode() { - waitUntilNamespaceDeleted(removalCtx, cancel, kubernetesProvider) + if err := kubernetesProvider.RemoveService(ctx, config.Config.MizuResourcesNamespace, mizu.ApiServerPodName); err != nil { + resourceDesc := fmt.Sprintf("Service %s in namespace %s", mizu.ApiServerPodName, config.Config.MizuResourcesNamespace) + handleDeletionError(err, resourceDesc, &leftoverResources) } + + if err := kubernetesProvider.RemoveDaemonSet(ctx, config.Config.MizuResourcesNamespace, mizu.TapperDaemonSetName); err != nil { + resourceDesc := fmt.Sprintf("DaemonSet %s in namespace %s", mizu.TapperDaemonSetName, config.Config.MizuResourcesNamespace) + handleDeletionError(err, resourceDesc, &leftoverResources) + } + + if err := kubernetesProvider.RemoveConfigMap(ctx, config.Config.MizuResourcesNamespace, mizu.ConfigMapName); err != nil { + resourceDesc := fmt.Sprintf("ConfigMap %s in namespace %s", mizu.ConfigMapName, config.Config.MizuResourcesNamespace) + handleDeletionError(err, resourceDesc, &leftoverResources) + } + + if err := kubernetesProvider.RemoveServicAccount(ctx, config.Config.MizuResourcesNamespace, mizu.ServiceAccountName); err != nil { + resourceDesc := fmt.Sprintf("Service Account %s in namespace %s", mizu.ServiceAccountName, config.Config.MizuResourcesNamespace) + handleDeletionError(err, resourceDesc, &leftoverResources) + } + + if err := kubernetesProvider.RemoveRole(ctx, config.Config.MizuResourcesNamespace, mizu.RoleName); err != nil { + resourceDesc := fmt.Sprintf("Role %s in namespace %s", mizu.RoleName, config.Config.MizuResourcesNamespace) + handleDeletionError(err, resourceDesc, &leftoverResources) + } + + if err := kubernetesProvider.RemoveRoleBinding(ctx, config.Config.MizuResourcesNamespace, mizu.RoleBindingName); err != nil { + resourceDesc := fmt.Sprintf("RoleBinding %s in namespace %s", mizu.RoleBindingName, config.Config.MizuResourcesNamespace) + handleDeletionError(err, resourceDesc, &leftoverResources) + } + + return leftoverResources +} + +func cleanUpNonRestrictedMode(ctx context.Context, cancel context.CancelFunc, kubernetesProvider *kubernetes.Provider) []string { + leftoverResources := make([]string, 0) + + if err := kubernetesProvider.RemoveNamespace(ctx, config.Config.MizuResourcesNamespace); err != nil { + resourceDesc := fmt.Sprintf("Namespace %s", config.Config.MizuResourcesNamespace) + handleDeletionError(err, resourceDesc, &leftoverResources) + } else { + defer waitUntilNamespaceDeleted(ctx, cancel, kubernetesProvider) + } + + if err := kubernetesProvider.RemoveClusterRole(ctx, mizu.ClusterRoleName); err != nil { + resourceDesc := fmt.Sprintf("ClusterRole %s", mizu.ClusterRoleName) + handleDeletionError(err, resourceDesc, &leftoverResources) + } + + if err := kubernetesProvider.RemoveClusterRoleBinding(ctx, mizu.ClusterRoleBindingName); err != nil { + resourceDesc := fmt.Sprintf("ClusterRoleBinding %s", mizu.ClusterRoleBindingName) + handleDeletionError(err, resourceDesc, &leftoverResources) + } + + return leftoverResources +} + +func handleDeletionError(err error, resourceDesc string, leftoverResources *[]string) { + logger.Log.Debugf("Error removing %s: %v", resourceDesc, errormessage.FormatError(err)) + *leftoverResources = append(*leftoverResources, resourceDesc) } func waitUntilNamespaceDeleted(ctx context.Context, cancel context.CancelFunc, kubernetesProvider *kubernetes.Provider) { @@ -536,7 +566,7 @@ func watchApiServerPod(ctx context.Context, kubernetesProvider *kubernetes.Provi url := GetApiServerUrl() if err := apiserver.Provider.InitAndTestConnection(url); err != nil { - logger.Log.Errorf(uiUtils.Error, "Couldn't connect to API server, check logs") + logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Couldn't connect to API server, for more info check logs at %s", logger.GetLogFilePath())) cancel() break } diff --git a/cli/cmd/viewRunner.go b/cli/cmd/viewRunner.go index 3fc50161b..7938d62ee 100644 --- a/cli/cmd/viewRunner.go +++ b/cli/cmd/viewRunner.go @@ -47,7 +47,7 @@ func runMizuView() { go startProxyReportErrorIfAny(kubernetesProvider, cancel) if err := apiserver.Provider.InitAndTestConnection(GetApiServerUrl()); err != nil { - logger.Log.Errorf(uiUtils.Error, "Couldn't connect to API server, check logs") + logger.Log.Errorf(uiUtils.Error, fmt.Sprintf("Couldn't connect to API server, for more info check logs at %s", logger.GetLogFilePath())) return } diff --git a/cli/kubernetes/provider.go b/cli/kubernetes/provider.go index f05764b53..bc0463791 100644 --- a/cli/kubernetes/provider.go +++ b/cli/kubernetes/provider.go @@ -268,67 +268,21 @@ func (provider *Provider) CreateService(ctx context.Context, namespace string, s return provider.clientSet.CoreV1().Services(namespace).Create(ctx, &service, metav1.CreateOptions{}) } -func (provider *Provider) DoesServiceAccountExist(ctx context.Context, namespace string, serviceAccountName string) (bool, error) { - serviceAccount, err := provider.clientSet.CoreV1().ServiceAccounts(namespace).Get(ctx, serviceAccountName, metav1.GetOptions{}) - return provider.doesResourceExist(serviceAccount, err) -} - -func (provider *Provider) DoesConfigMapExist(ctx context.Context, namespace string, name string) (bool, error) { - resource, err := provider.clientSet.CoreV1().ConfigMaps(namespace).Get(ctx, name, metav1.GetOptions{}) - return provider.doesResourceExist(resource, err) -} - func (provider *Provider) DoesServicesExist(ctx context.Context, namespace string, name string) (bool, error) { resource, err := provider.clientSet.CoreV1().Services(namespace).Get(ctx, name, metav1.GetOptions{}) return provider.doesResourceExist(resource, err) } -func (provider *Provider) DoesNamespaceExist(ctx context.Context, name string) (bool, error) { - resource, err := provider.clientSet.CoreV1().Namespaces().Get(ctx, name, metav1.GetOptions{}) - return provider.doesResourceExist(resource, err) -} - -func (provider *Provider) DoesClusterRoleExist(ctx context.Context, name string) (bool, error) { - resource, err := provider.clientSet.RbacV1().ClusterRoles().Get(ctx, name, metav1.GetOptions{}) - return provider.doesResourceExist(resource, err) -} - -func (provider *Provider) DoesClusterRoleBindingExist(ctx context.Context, name string) (bool, error) { - resource, err := provider.clientSet.RbacV1().ClusterRoleBindings().Get(ctx, name, metav1.GetOptions{}) - return provider.doesResourceExist(resource, err) -} - -func (provider *Provider) DoesRoleExist(ctx context.Context, namespace string, name string) (bool, error) { - resource, err := provider.clientSet.RbacV1().Roles(namespace).Get(ctx, name, metav1.GetOptions{}) - return provider.doesResourceExist(resource, err) -} - -func (provider *Provider) DoesRoleBindingExist(ctx context.Context, namespace string, name string) (bool, error) { - resource, err := provider.clientSet.RbacV1().RoleBindings(namespace).Get(ctx, name, metav1.GetOptions{}) - return provider.doesResourceExist(resource, err) -} - -func (provider *Provider) DoesPodExist(ctx context.Context, namespace string, name string) (bool, error) { - resource, err := provider.clientSet.CoreV1().Pods(namespace).Get(ctx, name, metav1.GetOptions{}) - return provider.doesResourceExist(resource, err) -} - -func (provider *Provider) DoesDaemonSetExist(ctx context.Context, namespace string, name string) (bool, error) { - resource, err := provider.clientSet.AppsV1().DaemonSets(namespace).Get(ctx, name, metav1.GetOptions{}) - return provider.doesResourceExist(resource, err) -} - func (provider *Provider) doesResourceExist(resource interface{}, err error) (bool, error) { - var statusError *k8serrors.StatusError - if errors.As(err, &statusError) { - // expected behavior when resource does not exist - if statusError.ErrStatus.Reason == metav1.StatusReasonNotFound { - return false, nil - } + // Getting NotFound error is the expected behavior when a resource does not exist. + if k8serrors.IsNotFound(err) { + return false, nil } + if err != nil { return false, err } + return resource != nil, nil } @@ -441,115 +395,63 @@ func (provider *Provider) CreateMizuRBACNamespaceRestricted(ctx context.Context, } func (provider *Provider) RemoveNamespace(ctx context.Context, name string) error { - if isFound, err := provider.DoesNamespaceExist(ctx, name); err != nil { - return err - } else if !isFound { - return nil - } - - return provider.clientSet.CoreV1().Namespaces().Delete(ctx, name, metav1.DeleteOptions{}) -} - -func (provider *Provider) RemoveNonNamespacedResources(ctx context.Context, clusterRoleName string, clusterRoleBindingName string) error { - if err := provider.RemoveClusterRole(ctx, clusterRoleName); err != nil { - return err - } - - if err := provider.RemoveClusterRoleBinding(ctx, clusterRoleBindingName); err != nil { - return err - } - - return nil + err := provider.clientSet.CoreV1().Namespaces().Delete(ctx, name, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) } func (provider *Provider) RemoveClusterRole(ctx context.Context, name string) error { - if isFound, err := provider.DoesClusterRoleExist(ctx, name); err != nil { - return err - } else if !isFound { - return nil - } - - return provider.clientSet.RbacV1().ClusterRoles().Delete(ctx, name, metav1.DeleteOptions{}) + err := provider.clientSet.RbacV1().ClusterRoles().Delete(ctx, name, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) } func (provider *Provider) RemoveClusterRoleBinding(ctx context.Context, name string) error { - if isFound, err := provider.DoesClusterRoleBindingExist(ctx, name); err != nil { - return err - } else if !isFound { - return nil - } - - return provider.clientSet.RbacV1().ClusterRoleBindings().Delete(ctx, name, metav1.DeleteOptions{}) + err := provider.clientSet.RbacV1().ClusterRoleBindings().Delete(ctx, name, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) } func (provider *Provider) RemoveRoleBinding(ctx context.Context, namespace string, name string) error { - if isFound, err := provider.DoesRoleBindingExist(ctx, namespace, name); err != nil { - return err - } else if !isFound { - return nil - } - - return provider.clientSet.RbacV1().RoleBindings(namespace).Delete(ctx, name, metav1.DeleteOptions{}) + err := provider.clientSet.RbacV1().RoleBindings(namespace).Delete(ctx, name, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) } func (provider *Provider) RemoveRole(ctx context.Context, namespace string, name string) error { - if isFound, err := provider.DoesRoleExist(ctx, namespace, name); err != nil { - return err - } else if !isFound { - return nil - } - - return provider.clientSet.RbacV1().Roles(namespace).Delete(ctx, name, metav1.DeleteOptions{}) + err := provider.clientSet.RbacV1().Roles(namespace).Delete(ctx, name, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) } func (provider *Provider) RemoveServicAccount(ctx context.Context, namespace string, name string) error { - if isFound, err := provider.DoesServiceAccountExist(ctx, namespace, name); err != nil { - return err - } else if !isFound { - return nil - } - - return provider.clientSet.CoreV1().ServiceAccounts(namespace).Delete(ctx, name, metav1.DeleteOptions{}) + err := provider.clientSet.CoreV1().ServiceAccounts(namespace).Delete(ctx, name, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) } func (provider *Provider) RemovePod(ctx context.Context, namespace string, podName string) error { - if isFound, err := provider.DoesPodExist(ctx, namespace, podName); err != nil { - return err - } else if !isFound { - return nil - } - - return provider.clientSet.CoreV1().Pods(namespace).Delete(ctx, podName, metav1.DeleteOptions{}) + err := provider.clientSet.CoreV1().Pods(namespace).Delete(ctx, podName, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) } func (provider *Provider) RemoveConfigMap(ctx context.Context, namespace string, configMapName string) error { - if isFound, err := provider.DoesConfigMapExist(ctx, namespace, configMapName); err != nil { - return err - } else if !isFound { - return nil - } - - return provider.clientSet.CoreV1().ConfigMaps(namespace).Delete(ctx, configMapName, metav1.DeleteOptions{}) + err := provider.clientSet.CoreV1().ConfigMaps(namespace).Delete(ctx, configMapName, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) } func (provider *Provider) RemoveService(ctx context.Context, namespace string, serviceName string) error { - if isFound, err := provider.DoesServicesExist(ctx, namespace, serviceName); err != nil { - return err - } else if !isFound { - return nil - } - - return provider.clientSet.CoreV1().Services(namespace).Delete(ctx, serviceName, metav1.DeleteOptions{}) + err := provider.clientSet.CoreV1().Services(namespace).Delete(ctx, serviceName, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) } func (provider *Provider) RemoveDaemonSet(ctx context.Context, namespace string, daemonSetName string) error { - if isFound, err := provider.DoesDaemonSetExist(ctx, namespace, daemonSetName); err != nil { - return err - } else if !isFound { + err := provider.clientSet.AppsV1().DaemonSets(namespace).Delete(ctx, daemonSetName, metav1.DeleteOptions{}) + return provider.handleRemovalError(err) +} + +func (provider *Provider) handleRemovalError(err error) error { + // Ignore NotFound - There is nothing to delete. + // Ignore Forbidden - Assume that a user could not have created the resource in the first place. + if k8serrors.IsNotFound(err) || k8serrors.IsForbidden(err){ return nil } - return provider.clientSet.AppsV1().DaemonSets(namespace).Delete(ctx, daemonSetName, metav1.DeleteOptions{}) + return err } func (provider *Provider) CreateConfigMap(ctx context.Context, namespace string, configMapName string, data string) error { @@ -731,7 +633,7 @@ func (provider *Provider) ListAllRunningPodsMatchingRegex(ctx context.Context, r return matchingPods, nil } -func (provider *Provider) GetPodLogs(namespace string, podName string, ctx context.Context) (string, error) { +func (provider *Provider) GetPodLogs(ctx context.Context, namespace string, podName string) (string, error) { podLogOpts := core.PodLogOptions{} req := provider.clientSet.CoreV1().Pods(namespace).GetLogs(podName, &podLogOpts) podLogs, err := req.Stream(ctx) @@ -747,7 +649,7 @@ func (provider *Provider) GetPodLogs(namespace string, podName string, ctx conte return str, nil } -func (provider *Provider) GetNamespaceEvents(namespace string, ctx context.Context) (string, error) { +func (provider *Provider) GetNamespaceEvents(ctx context.Context, namespace string) (string, error) { eventsOpts := metav1.ListOptions{} eventList, err := provider.clientSet.CoreV1().Events(namespace).List(ctx, eventsOpts) if err != nil { diff --git a/cli/mizu/fsUtils/mizuLogsUtils.go b/cli/mizu/fsUtils/mizuLogsUtils.go index 54ab05d28..2f3605709 100644 --- a/cli/mizu/fsUtils/mizuLogsUtils.go +++ b/cli/mizu/fsUtils/mizuLogsUtils.go @@ -12,7 +12,7 @@ import ( "regexp" ) -func DumpLogs(provider *kubernetes.Provider, ctx context.Context, filePath string) error { +func DumpLogs(ctx context.Context, provider *kubernetes.Provider, filePath string) error { podExactRegex := regexp.MustCompile("^" + mizu.MizuResourcesPrefix) pods, err := provider.ListAllPodsMatchingRegex(ctx, podExactRegex, []string{config.Config.MizuResourcesNamespace}) if err != nil { @@ -32,7 +32,7 @@ func DumpLogs(provider *kubernetes.Provider, ctx context.Context, filePath strin defer zipWriter.Close() for _, pod := range pods { - logs, err := provider.GetPodLogs(pod.Namespace, pod.Name, ctx) + logs, err := provider.GetPodLogs(ctx, pod.Namespace, pod.Name) if err != nil { logger.Log.Errorf("Failed to get logs, %v", err) continue @@ -47,7 +47,7 @@ func DumpLogs(provider *kubernetes.Provider, ctx context.Context, filePath strin } } - events, err := provider.GetNamespaceEvents(config.Config.MizuResourcesNamespace, ctx) + events, err := provider.GetNamespaceEvents(ctx, config.Config.MizuResourcesNamespace) if err != nil { logger.Log.Debugf("Failed to get k8b events, %v", err) } else {