func NewAPIFactory()

in pkg/client/apifactory.go [83:138]


func NewAPIFactory(scheduler api.SchedulerAPI, informerFactory informers.SharedInformerFactory, configs *conf.SchedulerConf, testMode bool) *APIFactory {
	kubeClient := NewKubeClient(configs.KubeConfig)

	// init informers
	// volume informers are also used to get the Listers for the predicates
	nodeInformer := informerFactory.Core().V1().Nodes()
	podInformer := informerFactory.Core().V1().Pods()
	configMapInformer := informerFactory.Core().V1().ConfigMaps()
	storageInformer := informerFactory.Storage().V1().StorageClasses()
	csiNodeInformer := informerFactory.Storage().V1().CSINodes()
	pvInformer := informerFactory.Core().V1().PersistentVolumes()
	pvcInformer := informerFactory.Core().V1().PersistentVolumeClaims()
	namespaceInformer := informerFactory.Core().V1().Namespaces()
	priorityClassInformer := informerFactory.Scheduling().V1().PriorityClasses()

	var capacityCheck volumebinding.CapacityCheck
	if utilfeature.DefaultFeatureGate.Enabled(features.CSIStorageCapacity) {
		capacityCheck = volumebinding.CapacityCheck{
			CSIDriverInformer:          informerFactory.Storage().V1().CSIDrivers(),
			CSIStorageCapacityInformer: informerFactory.Storage().V1().CSIStorageCapacities(),
		}
	}

	// create a volume binder (needs the informers)
	volumeBinder := volumebinding.NewVolumeBinder(
		kubeClient.GetClientSet(),
		podInformer,
		nodeInformer,
		csiNodeInformer,
		pvcInformer,
		pvInformer,
		storageInformer,
		capacityCheck,
		configs.VolumeBindTimeout)

	return &APIFactory{
		clients: &Clients{
			conf:                  configs,
			KubeClient:            kubeClient,
			SchedulerAPI:          scheduler,
			InformerFactory:       informerFactory,
			PodInformer:           podInformer,
			NodeInformer:          nodeInformer,
			ConfigMapInformer:     configMapInformer,
			PVInformer:            pvInformer,
			PVCInformer:           pvcInformer,
			NamespaceInformer:     namespaceInformer,
			StorageInformer:       storageInformer,
			PriorityClassInformer: priorityClassInformer,
			VolumeBinder:          volumeBinder,
		},
		testMode: testMode,
		stopChan: make(chan struct{}),
		lock:     &sync.RWMutex{},
	}
}