in pkg/controller/controller.go [206:266]
func NewFrameworkController() *FrameworkController {
klog.Infof("Initializing " + ci.ComponentName)
cConfig := ci.NewConfig()
klog.Infof("With Config: \n%v", common.ToYaml(cConfig))
ci.AppendCompletionCodeInfos(cConfig.PodFailureSpec)
kConfig := ci.BuildKubeConfig(cConfig)
kClient, fClient := internal.CreateClients(kConfig)
// Informer resync will periodically replay the event of all objects stored in its cache.
// However, by design, Informer and Controller should not miss any event.
// So, we should disable resync to avoid hiding missing event bugs inside Controller.
cmListerInformer := kubeInformer.NewSharedInformerFactory(kClient, 0).Core().V1().ConfigMaps()
podListerInformer := kubeInformer.NewSharedInformerFactory(kClient, 0).Core().V1().Pods()
fListerInformer := frameworkInformer.NewSharedInformerFactory(fClient, 0).Frameworkcontroller().V1().Frameworks()
cmInformer := cmListerInformer.Informer()
podInformer := podListerInformer.Informer()
fInformer := fListerInformer.Informer()
cmLister := cmListerInformer.Lister()
podLister := podListerInformer.Lister()
fLister := fListerInformer.Lister()
// Using DefaultControllerRateLimiter to rate limit on both particular items and overall items.
fQueue := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())
c := &FrameworkController{
kConfig: kConfig,
cConfig: cConfig,
kClient: kClient,
fClient: fClient,
cmInformer: cmInformer,
podInformer: podInformer,
fInformer: fInformer,
cmLister: cmLister,
podLister: podLister,
fLister: fLister,
fQueue: fQueue,
fExpectedStatusInfos: &sync.Map{},
}
fInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: c.addFrameworkObj,
UpdateFunc: c.updateFrameworkObj,
DeleteFunc: c.deleteFrameworkObj,
})
cmInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: c.addConfigMapObj,
UpdateFunc: c.updateConfigMapObj,
DeleteFunc: c.deleteConfigMapObj,
})
podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: c.addPodObj,
UpdateFunc: c.updatePodObj,
DeleteFunc: c.deletePodObj,
})
return c
}