Skip to content

Commit c18ff15

Browse files
committed
move leader election to different file
1 parent d9d68c1 commit c18ff15

File tree

2 files changed

+61
-52
lines changed

2 files changed

+61
-52
lines changed

cmd/controller/leader_election.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"github.com/go-logr/logr"
6+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+
clientset "k8s.io/client-go/kubernetes"
8+
"k8s.io/client-go/tools/leaderelection"
9+
"k8s.io/client-go/tools/leaderelection/resourcelock"
10+
"k8s.io/klog/v2"
11+
"os"
12+
"time"
13+
)
14+
15+
var (
16+
client *clientset.Clientset
17+
)
18+
19+
func getNewLock(lockname, podname, namespace string) *resourcelock.LeaseLock {
20+
return &resourcelock.LeaseLock{
21+
LeaseMeta: metav1.ObjectMeta{
22+
Name: lockname,
23+
Namespace: namespace,
24+
},
25+
Client: client.CoordinationV1(),
26+
LockConfig: resourcelock.ResourceLockConfig{
27+
Identity: podname,
28+
},
29+
}
30+
}
31+
32+
func runLeaderElection(ctx context.Context, lock *resourcelock.LeaseLock, podname string, ctrlOpts Options, log logr.Logger) {
33+
// Start the leader election for running kapp-controller
34+
log.Info("Waiting for leader election")
35+
leaderelection.RunOrDie(ctx, leaderelection.LeaderElectionConfig{
36+
Lock: lock,
37+
ReleaseOnCancel: true,
38+
LeaseDuration: 15 * time.Second,
39+
RenewDeadline: 10 * time.Second,
40+
RetryPeriod: 2 * time.Second,
41+
Callbacks: leaderelection.LeaderCallbacks{
42+
OnStartedLeading: func(c context.Context) {
43+
err := Run(ctrlOpts, log.WithName("controller"))
44+
if err != nil {
45+
klog.Errorf("Error while running as leader: %v", err)
46+
}
47+
},
48+
OnStoppedLeading: func() {
49+
klog.Fatalf("no longer the leader, staying inactive.")
50+
os.Exit(0)
51+
},
52+
OnNewLeader: func(identity string) {
53+
//Notify when a new leader is elected
54+
if identity == podname {
55+
return
56+
}
57+
klog.InfoS("new leader elected", "id", identity)
58+
},
59+
},
60+
})
61+
}

cmd/controller/main.go

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,8 @@ package main
66
import (
77
"context"
88
"flag"
9-
"github.com/go-logr/logr"
10-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
119
clientset "k8s.io/client-go/kubernetes"
1210
"k8s.io/client-go/rest"
13-
"k8s.io/client-go/tools/leaderelection"
14-
"k8s.io/client-go/tools/leaderelection/resourcelock"
1511
"k8s.io/klog/v2"
1612
"os"
1713
logf "sigs.k8s.io/controller-runtime/pkg/log"
@@ -22,54 +18,6 @@ import (
2218
// Version of kapp-controller is set via ldflags at build-time from the most recent git tag; see hack/build.sh
2319
var Version = "develop"
2420

25-
var (
26-
client *clientset.Clientset
27-
)
28-
29-
func getNewLock(lockname, podname, namespace string) *resourcelock.LeaseLock {
30-
return &resourcelock.LeaseLock{
31-
LeaseMeta: metav1.ObjectMeta{
32-
Name: lockname,
33-
Namespace: namespace,
34-
},
35-
Client: client.CoordinationV1(),
36-
LockConfig: resourcelock.ResourceLockConfig{
37-
Identity: podname,
38-
},
39-
}
40-
}
41-
42-
func runLeaderElection(ctx context.Context, lock *resourcelock.LeaseLock, podname string, ctrlOpts Options, log logr.Logger) {
43-
// Start the leader election for running kapp-controller
44-
log.Info("Waiting for leader election")
45-
leaderelection.RunOrDie(ctx, leaderelection.LeaderElectionConfig{
46-
Lock: lock,
47-
ReleaseOnCancel: true,
48-
LeaseDuration: 15 * time.Second,
49-
RenewDeadline: 10 * time.Second,
50-
RetryPeriod: 2 * time.Second,
51-
Callbacks: leaderelection.LeaderCallbacks{
52-
OnStartedLeading: func(c context.Context) {
53-
err := Run(ctrlOpts, log.WithName("controller"))
54-
if err != nil {
55-
klog.Errorf("Error while running as leader: %v", err)
56-
}
57-
},
58-
OnStoppedLeading: func() {
59-
klog.Fatalf("no longer the leader, staying inactive.")
60-
os.Exit(0)
61-
},
62-
OnNewLeader: func(identity string) {
63-
//Notify when a new leader is elected
64-
if identity == podname {
65-
return
66-
}
67-
klog.InfoS("new leader elected", "id", identity)
68-
},
69-
},
70-
})
71-
}
72-
7321
func main() {
7422
ctrlOpts := Options{}
7523
var sidecarexec bool

0 commit comments

Comments
 (0)