@@ -351,6 +351,42 @@ func (cm *controllerManager) Start(ctx context.Context) (err error) {
351
351
// Initialize the internal context.
352
352
cm .internalCtx , cm .internalCancel = context .WithCancel (ctx )
353
353
354
+ var leaderElector * leaderelection.LeaderElector
355
+ if cm .resourceLock != nil {
356
+ leaderElector , err = leaderelection .NewLeaderElector (leaderelection.LeaderElectionConfig {
357
+ Lock : cm .resourceLock ,
358
+ LeaseDuration : cm .leaseDuration ,
359
+ RenewDeadline : cm .renewDeadline ,
360
+ RetryPeriod : cm .retryPeriod ,
361
+ Callbacks : leaderelection.LeaderCallbacks {
362
+ OnStartedLeading : func (_ context.Context ) {
363
+ if err := cm .startLeaderElectionRunnables (); err != nil {
364
+ cm .errChan <- err
365
+ return
366
+ }
367
+ close (cm .elected )
368
+ },
369
+ OnStoppedLeading : func () {
370
+ if cm .onStoppedLeading != nil {
371
+ cm .onStoppedLeading ()
372
+ }
373
+ // Make sure graceful shutdown is skipped if we lost the leader lock without
374
+ // intending to.
375
+ cm .gracefulShutdownTimeout = time .Duration (0 )
376
+ // Most implementations of leader election log.Fatal() here.
377
+ // Since Start is wrapped in log.Fatal when called, we can just return
378
+ // an error here which will cause the program to exit.
379
+ cm .errChan <- errors .New ("leader election lost" )
380
+ },
381
+ },
382
+ ReleaseOnCancel : cm .leaderElectionReleaseOnCancel ,
383
+ Name : cm .leaderElectionID ,
384
+ })
385
+ if err != nil {
386
+ return fmt .Errorf ("failed during initialization leader election process: %w" , err )
387
+ }
388
+ }
389
+
354
390
// This chan indicates that stop is complete, in other words all runnables have returned or timeout on stop request
355
391
stopComplete := make (chan struct {})
356
392
defer close (stopComplete )
@@ -433,40 +469,7 @@ func (cm *controllerManager) Start(ctx context.Context) (err error) {
433
469
{
434
470
ctx , cancel := context .WithCancel (context .Background ())
435
471
cm .leaderElectionCancel = cancel
436
- if cm .resourceLock != nil {
437
- leaderElector , err := leaderelection .NewLeaderElector (leaderelection.LeaderElectionConfig {
438
- Lock : cm .resourceLock ,
439
- LeaseDuration : cm .leaseDuration ,
440
- RenewDeadline : cm .renewDeadline ,
441
- RetryPeriod : cm .retryPeriod ,
442
- Callbacks : leaderelection.LeaderCallbacks {
443
- OnStartedLeading : func (_ context.Context ) {
444
- if err := cm .startLeaderElectionRunnables (); err != nil {
445
- cm .errChan <- err
446
- return
447
- }
448
- close (cm .elected )
449
- },
450
- OnStoppedLeading : func () {
451
- if cm .onStoppedLeading != nil {
452
- cm .onStoppedLeading ()
453
- }
454
- // Make sure graceful shutdown is skipped if we lost the leader lock without
455
- // intending to.
456
- cm .gracefulShutdownTimeout = time .Duration (0 )
457
- // Most implementations of leader election log.Fatal() here.
458
- // Since Start is wrapped in log.Fatal when called, we can just return
459
- // an error here which will cause the program to exit.
460
- cm .errChan <- errors .New ("leader election lost" )
461
- },
462
- },
463
- ReleaseOnCancel : cm .leaderElectionReleaseOnCancel ,
464
- Name : cm .leaderElectionID ,
465
- })
466
- if err != nil {
467
- return fmt .Errorf ("failed during initialization leader election process: %w" , err )
468
- }
469
-
472
+ if leaderElector != nil {
470
473
// Start the leader elector process
471
474
go func () {
472
475
leaderElector .Run (ctx )
0 commit comments