in cmd/gcp-controller-manager/main.go [191:271]
func run(s *controllerManager) error {
ctx := context.Background()
informerClientBuilder := clientbuilder.SimpleControllerClientBuilder{ClientConfig: s.informerKubeconfig}
informerClient := informerClientBuilder.ClientOrDie("gcp-controller-manager-shared-informer")
sharedInformers := informers.NewSharedInformerFactory(informerClient, time.Duration(12)*time.Hour)
s.healthz.Checks["shared informers"] = informersCheck(sharedInformers)
controllerClientBuilder := clientbuilder.SimpleControllerClientBuilder{ClientConfig: s.controllerKubeconfig}
eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartLogging(klog.Infof)
eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{
Interface: v1core.New(controllerClientBuilder.ClientOrDie("gcp-controller-manager").CoreV1().RESTClient()).Events(""),
})
verifiedSAs := newSAMap()
startControllers := func(ctx context.Context) {
for name, loop := range loops() {
if !s.isEnabled(name) {
continue
}
name = "gcp-" + name
loopClient, err := controllerClientBuilder.Client(name)
if err != nil {
klog.Fatalf("failed to start client for %q: %v", name, err)
}
if err := loop(&controllerContext{
client: loopClient,
sharedInformers: sharedInformers,
recorder: eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.EventSource{
Component: name,
}),
gcpCfg: s.gcpConfig,
clusterSigningGKEKubeconfig: s.clusterSigningGKEKubeconfig,
csrApproverVerifyClusterMembership: s.csrApproverVerifyClusterMembership,
csrApproverAllowLegacyKubelet: s.csrApproverAllowLegacyKubelet,
verifiedSAs: verifiedSAs,
done: ctx.Done(),
hmsAuthorizeSAMappingURL: s.hmsAuthorizeSAMappingURL,
hmsSyncNodeURL: s.hmsSyncNodeURL,
delayDirectPathGSARemove: s.delayDirectPathGSARemove,
}); err != nil {
klog.Fatalf("Failed to start %q: %v", name, err)
}
}
sharedInformers.Start(ctx.Done())
<-ctx.Done()
}
if s.leaderElectionConfig.LeaderElect {
leaderElectionClient, err := clientset.NewForConfig(restclient.AddUserAgent(s.informerKubeconfig, "leader-election"))
if err != nil {
return err
}
leaderElectionConfig, err := makeLeaderElectionConfig(s.leaderElectionConfig, leaderElectionClient, eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.EventSource{
Component: "gcp-controller-manager-leader-election",
}))
if err != nil {
return err
}
leaderElectionConfig.Callbacks = leaderelection.LeaderCallbacks{
OnStartedLeading: startControllers,
OnStoppedLeading: func() {
klog.Fatalf("lost leader election, exiting")
},
}
leaderElector, err := leaderelection.NewLeaderElector(*leaderElectionConfig)
if err != nil {
return err
}
s.healthz.Checks["leader election"] = leaderElectorCheck(leaderElector)
leaderElector.Run(ctx)
return fmt.Errorf("should never reach this point")
}
startControllers(ctx)
return fmt.Errorf("should never reach this point")
}