func NewFrameworkController()

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
}