code: func NewPublisher(cmInformer coreinformers.ConfigMapInformer, nsInformer coreinformers.NamespaceInformer, cl clientset.Interface, rootCA []byte) (*Publisher, error) {
  	e := &Publisher{
  		client: cl,
  		rootCA: rootCA,
  		queue:  workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "root_ca_cert_publisher"),
  	}
  	if cl.CoreV1().RESTClient().GetRateLimiter() != nil {
  		if err := metrics.RegisterMetricAndTrackRateLimiterUsage("root_ca_cert_publisher", cl.CoreV1().RESTClient().GetRateLimiter()); err != nil {
  			return nil, err
  		}
  	}
  
  	cmInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
  		DeleteFunc: e.configMapDeleted,
  		UpdateFunc: e.configMapUpdated,
  	})
  	e.cmLister = cmInformer.Lister()
  	e.cmListerSynced = cmInformer.Informer().HasSynced
  
  	nsInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
  		AddFunc:    e.namespaceAdded,
  		UpdateFunc: e.namespaceUpdated,
  	})
  	e.nsListerSynced = nsInformer.Informer().HasSynced
  
  	e.syncHandler = e.syncNamespace
  
  	return e, nil
  
  }
docs: // NewPublisher construct a new controller which would manage the configmap
  // which stores certificates in each namespace. It will make sure certificate
  // configmap exists in each namespace.