Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 67 additions & 23 deletions pkg/cli/admin/inspect/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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
}
Expand All @@ -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
}
Expand Down Expand Up @@ -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)
}