diff --git a/pkg/cli/admin/inspect/pod.go b/pkg/cli/admin/inspect/pod.go index 2e08514a82..81e28c588b 100644 --- a/pkg/cli/admin/inspect/pod.go +++ b/pkg/cli/admin/inspect/pod.go @@ -7,10 +7,11 @@ import ( "os" "path" "strings" + "sync" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/util/errors" + utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/client-go/rest" "k8s.io/klog" ) @@ -56,7 +57,7 @@ func (o *InspectOptions) gatherPodData(destDir, namespace string, pod *corev1.Po } if len(errs) > 0 { - return fmt.Errorf("one or more errors ocurred while gathering container data for pod %s:\n\n %v", pod.Name, errors.NewAggregate(errs)) + return fmt.Errorf("one or more errors ocurred while gathering container data for pod %s:\n\n %v", pod.Name, utilerrors.NewAggregate(errs)) } return nil } @@ -94,7 +95,7 @@ func (o *InspectOptions) gatherContainerAllLogs(destDir string, pod *corev1.Pod, } if len(errs) > 0 { - return errors.NewAggregate(errs) + return utilerrors.NewAggregate(errs) } return nil } @@ -120,7 +121,7 @@ func (o *InspectOptions) gatherContainerEndpoints(destDir string, pod *corev1.Po } if len(errs) > 0 { - return errors.NewAggregate(errs) + return utilerrors.NewAggregate(errs) } return nil } @@ -283,26 +284,69 @@ func (o *InspectOptions) gatherContainerLogs(destDir string, pod *corev1.Pod, co if err := os.MkdirAll(destDir, os.ModePerm); err != nil { return err } + errs := []error{} + wg := sync.WaitGroup{} + errLock := sync.Mutex{} + + go func() { + wg.Add(1) + defer wg.Done() + + innerErrs := []error{} + logOptions := &corev1.PodLogOptions{ + Container: container.Name, + Follow: false, + Previous: false, + Timestamps: true, + } + filename := "current.log" + logsReq := o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { + innerErrs = append(innerErrs, err) + + // if we had an error, we will try again with an insecure backendproxy flag set + logOptions.InsecureSkipTLSVerifyBackend = true + logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + filename = "current.insecure.log" + if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { + innerErrs = append(innerErrs, err) + } + } - logOptions := &corev1.PodLogOptions{ - Container: container.Name, - Follow: false, - Previous: false, - Timestamps: true, - } - // first, retrieve current logs - logsReq := o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) - - filename := fmt.Sprintf("%s.log", "current") - - if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { - return err - } + errLock.Lock() + defer errLock.Unlock() + errs = append(errs, innerErrs...) + }() + + go func() { + wg.Add(1) + defer wg.Done() + + innerErrs := []error{} + logOptions := &corev1.PodLogOptions{ + Container: container.Name, + Follow: false, + Previous: true, + Timestamps: true, + } + logsReq := o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + filename := "previous.log" + if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { + innerErrs = append(innerErrs, err) + + // if we had an error, we will try again with an insecure backendproxy flag set + logOptions.InsecureSkipTLSVerifyBackend = true + logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + filename = "previous.insecure.log" + if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { + innerErrs = append(innerErrs, err) + } + } - // then, retrieve previous logs - logOptions.Previous = true - logsReqPrevious := o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + errLock.Lock() + defer errLock.Unlock() + errs = append(errs, innerErrs...) + }() - filename = fmt.Sprintf("%s.log", "previous") - return o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReqPrevious) + return utilerrors.NewAggregate(errs) }