in internal/components/setup/kind_listener.go [53:95]
func (c *KindContainerListener) Listen(consumer func(pod *v1.Pod)) error {
result := c.buildSearchResult()
runtimeObject, err := result.Object()
if err != nil {
return err
}
watchVersion, err := meta.NewAccessor().ResourceVersion(runtimeObject)
if err != nil {
return err
}
watcher, err := result.Watch(watchVersion)
if err != nil {
return err
}
go func() {
for {
select {
case event := <-watcher.ResultChan():
switch event.Type {
case watch.Added, watch.Modified:
pod, err := c.unstructuredToPod(event.Object.(*unstructured.Unstructured))
if err != nil {
continue
}
consumer(pod)
case watch.Error:
errObject := apierrors.FromObject(event.Object)
statusErr := errObject.(*apierrors.StatusError)
logger.Log.Warnf("watch kubernetes pod error, %v", statusErr)
}
case <-c.ctx.Done():
watcher.Stop()
c.ctxCancel()
return
}
}
}()
return nil
}