func()

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
}