code: func startControllers(c *cloudcontrollerconfig.CompletedConfig, stopCh <-chan struct{}, cloud cloudprovider.Interface, controllers map[string]initFunc) error {
  	// Initialize the cloud provider with a reference to the clientBuilder
  	cloud.Initialize(c.ClientBuilder, stopCh)
  	// Set the informer on the user cloud object
  	if informerUserCloud, ok := cloud.(cloudprovider.InformerUser); ok {
  		informerUserCloud.SetInformers(c.SharedInformers)
  	}
  
  	for controllerName, initFn := range controllers {
  		if !genericcontrollermanager.IsControllerEnabled(controllerName, ControllersDisabledByDefault, c.ComponentConfig.Generic.Controllers) {
  			klog.Warningf("%q is disabled", controllerName)
  			continue
  		}
  
  		klog.V(1).Infof("Starting %q", controllerName)
  		_, started, err := initFn(c, cloud, stopCh)
  		if err != nil {
  			klog.Errorf("Error starting %q", controllerName)
  			return err
  		}
  		if !started {
  			klog.Warningf("Skipping %q", controllerName)
  			continue
  		}
  		klog.Infof("Started %q", controllerName)
  
  		time.Sleep(wait.Jitter(c.ComponentConfig.Generic.ControllerStartInterval.Duration, ControllerStartJitter))
  	}
  
  	// If apiserver is not running we should wait for some time and fail only then. This is particularly
  	// important when we start apiserver and controller manager at the same time.
  	if err := genericcontrollermanager.WaitForAPIServer(c.VersionedClient, 10*time.Second); err != nil {
  		klog.Fatalf("Failed to wait for apiserver being healthy: %v", err)
  	}
  
  	c.SharedInformers.Start(stopCh)
  
  	select {}
  }
docs: // startControllers starts the cloud specific controller loops.