func NewAPIFactory()

in pkg/client/apifactory.go [92:159]


func NewAPIFactory(scheduler api.SchedulerAPI, informerFactory informers.SharedInformerFactory, configs *conf.SchedulerConf, testMode bool) *APIFactory {
	kubeClient := NewKubeClient(configs.KubeConfig)
	namespaceInformerFactory := informers.NewSharedInformerFactoryWithOptions(kubeClient.GetClientSet(), 0, informers.WithNamespace(configs.Namespace))
	// init informers
	// volume informers are also used to get the Listers for the predicates
	podInformer := informerFactory.Core().V1().Pods()
	nodeInformer := informerFactory.Core().V1().Nodes()
	configMapInformer := namespaceInformerFactory.Core().V1().ConfigMaps()
	pvInformer := informerFactory.Core().V1().PersistentVolumes()
	pvcInformer := informerFactory.Core().V1().PersistentVolumeClaims()
	storageInformer := informerFactory.Storage().V1().StorageClasses()
	csiNodeInformer := informerFactory.Storage().V1().CSINodes()
	csiDriverInformer := informerFactory.Storage().V1().CSIDrivers()
	csiStorageCapacityInformer := informerFactory.Storage().V1().CSIStorageCapacities()
	namespaceInformer := informerFactory.Core().V1().Namespaces()
	priorityClassInformer := informerFactory.Scheduling().V1().PriorityClasses()
	serviceInformer := informerFactory.Core().V1().Services()
	replicationControllerInformer := informerFactory.Core().V1().ReplicationControllers()
	replicaSetInformer := informerFactory.Apps().V1().ReplicaSets()
	statefulSetInformer := informerFactory.Apps().V1().StatefulSets()
	volumeAttachmentInformer := informerFactory.Storage().V1().VolumeAttachments()

	var capacityCheck = volumebinding.CapacityCheck{
		CSIDriverInformer:          informerFactory.Storage().V1().CSIDrivers(),
		CSIStorageCapacityInformer: informerFactory.Storage().V1().CSIStorageCapacities(),
	}

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

	return &APIFactory{
		clients: &Clients{
			KubeClient:                    kubeClient,
			SchedulerAPI:                  scheduler,
			InformerFactory:               informerFactory,
			PodInformer:                   podInformer,
			NodeInformer:                  nodeInformer,
			ConfigMapInformer:             configMapInformer,
			PVInformer:                    pvInformer,
			PVCInformer:                   pvcInformer,
			StorageClassInformer:          storageInformer,
			CSINodeInformer:               csiNodeInformer,
			CSIDriverInformer:             csiDriverInformer,
			CSIStorageCapacityInformer:    csiStorageCapacityInformer,
			NamespaceInformer:             namespaceInformer,
			PriorityClassInformer:         priorityClassInformer,
			ServiceInformer:               serviceInformer,
			ReplicationControllerInformer: replicationControllerInformer,
			ReplicaSetInformer:            replicaSetInformer,
			StatefulSetInformer:           statefulSetInformer,
			VolumeAttachmentInformer:      volumeAttachmentInformer,
			VolumeBinder:                  volumeBinder,
		},
		testMode: testMode,
		stopChan: make(chan struct{}),
		lock:     &locking.RWMutex{},
	}
}