INNER CODE UNIT · Go
startLeaderElection
kuberhealthy/kuberhealthy · cmd/kuberhealthy/leaderElection.go:43
func startLeaderElection(ctx context.Context, cfg *Config, kubeClient kubernetes.Interface, kh *kuberhealthy.Kuberhealthy) error {
identity := os.Getenv("POD_NAME")
if identity == "" {
identity = GetMyHostname("kuberhealthy")
}
lockConfig := resourcelock.ResourceLockConfig{Identity: identity}
lock, err := resourcelock.New(resourcelock.LeasesResourceLock, cfg.LeaderElectionNamespace, cfg.LeaderElectionName, kubeClient.CoreV1(), kubeClient.CoordinationV1(), lockConfig)
if err != nil {
return fmt.Errorf("failed to create leader election lock: %w", err)
}
runner := &leaderElectionRunner{kh: kh, identity: identity}
callbacks := leaderelection.LeaderCallbacks{
OnStartedLeading: runner.onStartedLeading,
OnStoppedLeading: runner.onStoppedLeading,
OnNewLeader: runner.onNewLeader,
}