code: func NewDiscoverer(config *common.RuntimeConfig, cleanupTracker *deleter.CleanupStatusTracker) (*Discoverer, error) {
  	sharedInformer := config.InformerFactory.Storage().V1().StorageClasses()
  	sharedInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
  		// We don't need an actual event handler for StorageClasses,
  		// but we must pass a non-nil one to cache.NewInformer()
  		AddFunc:    nil,
  		UpdateFunc: nil,
  		DeleteFunc: nil,
  	})
  
  	labelMap := make(map[string]string)
  	for _, labelName := range config.NodeLabelsForPV {
  		labelVal, ok := config.Node.Labels[labelName]
  		if ok {
  			labelMap[labelName] = labelVal
  		}
  	}
  
  	if config.UseAlphaAPI {
  		nodeAffinity, err := generateNodeAffinity(config.Node)
  		if err != nil {
  			return nil, fmt.Errorf("Failed to generate node affinity: %v", err)
  		}
  		tmpAnnotations := map[string]string{}
  		err = StorageNodeAffinityToAlphaAnnotation(tmpAnnotations, nodeAffinity)
  		if err != nil {
  			return nil, fmt.Errorf("Failed to convert node affinity to alpha annotation: %v", err)
  		}
  		return &Discoverer{
  			RuntimeConfig:   config,
  			Labels:          labelMap,
  			CleanupTracker:  cleanupTracker,
  			classLister:     sharedInformer.Lister(),
  			nodeAffinityAnn: tmpAnnotations[common.AlphaStorageNodeAffinityAnnotation]}, nil
  	}
  
  	volumeNodeAffinity, err := generateVolumeNodeAffinity(config.Node)
  	if err != nil {
  		return nil, fmt.Errorf("Failed to generate volume node affinity: %v", err)
  	}
  
  	return &Discoverer{
  		RuntimeConfig:  config,
  		Labels:         labelMap,
  		CleanupTracker: cleanupTracker,
  		classLister:    sharedInformer.Lister(),
  		nodeAffinity:   volumeNodeAffinity}, nil
  }
docs: // NewDiscoverer creates a Discoverer object that will scan through
  // the configured directories and create local PVs for any new directories found