in internal/components/setup/kind.go [563:608]
func exposePerContainerLog(clientGetter *util.K8sClusterInfo, pod *v1.Pod, timeout time.Duration) error {
if pod.Status.Phase != v1.PodRunning {
return nil
}
file := filepath.Join(pod.Namespace, fmt.Sprintf("%s.log", pod.Name))
// check is followed
if logFollower.IsFollowed(file) {
return nil
}
logOptions := &v1.PodLogOptions{
Follow: true,
}
data, err := polymorphichelpers.LogsForObjectFn(clientGetter, pod, logOptions, timeout, true)
if err != nil {
return err
}
writer, err := logFollower.BuildLogWriter(file)
if err != nil {
return err
}
wg := &sync.WaitGroup{}
wg.Add(len(data))
// following each container
for _, resp := range data {
stream, err := resp.Stream(logFollower.Ctx)
if err != nil {
return err
}
go func() {
if finish := logFollower.ConsumeLog(writer, stream); finish != nil {
<-finish
}
wg.Done()
}()
}
go func() {
wg.Wait()
writer.Close()
}()
return nil
}