func exposePerContainerLog()

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
}