in watcher/watcher.go [123:162]
func (w *Watcher) inNamespacesWatchFor(h EventHandler, c cache.Getter,
namespaces []string, fieldSelector fields.Selector, objType pkgruntime.Object,
resyncPeriod time.Duration) error {
if len(namespaces) == 0 {
log.Panicln("inNamespacesWatchFor must have at least 1 namespace")
}
syncFuncs := make([]cache.InformerSynced, len(namespaces))
for i, ns := range namespaces {
factory := informers.NewSharedInformerFactoryWithOptions(w.Cs, resyncPeriod, informers.WithNamespace(ns))
var sharedInformer cache.SharedIndexInformer
switch objType.(type) {
case *v1.Endpoints:
sharedInformer = factory.Core().V1().Endpoints().Informer()
case *nv1.Ingress:
sharedInformer = factory.Networking().V1().Ingresses().Informer()
case *v1.ConfigMap:
sharedInformer = factory.Core().V1().ConfigMaps().Informer()
}
_, err := sharedInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: h.Add,
UpdateFunc: h.Update,
DeleteFunc: h.Delete,
})
if err != nil {
return err
}
go sharedInformer.Run(w.StopChan)
syncFuncs[i] = sharedInformer.HasSynced
}
if !cache.WaitForCacheSync(w.StopChan, syncFuncs...) {
s := fmt.Sprintf("Timed out waiting for %s caches to sync", h.GetResourceName())
utilruntime.HandleError(errors.New(s))
return errors.New(s)
}
return nil
}