@@ -217,8 +217,6 @@ func main() {
217217 )
218218 }
219219
220- leaderTasks := make ([]leader.Task , 0 )
221-
222220 // If we don't have an API key but we do have a token for registration then attempt to register the runner.
223221 if cfg .TestkubeProAPIKey == "" && cfg .TestkubeProAgentRegToken != "" {
224222 runnerName := cfg .RunnerName
@@ -302,6 +300,22 @@ func main() {
302300 clusterId , _ := configMapConfig .GetUniqueClusterId (ctx )
303301 telemetryEnabled , _ := configMapConfig .GetTelemetryEnabled (ctx )
304302
303+ leaderIdentifier := resolveLeaderIdentifier ()
304+ leaderClusterID := clusterId
305+ if leaderClusterID == "" {
306+ leaderClusterID = "testkube-core"
307+ } else {
308+ leaderClusterID = fmt .Sprintf ("%s-core" , leaderClusterID )
309+ }
310+
311+ coordinatorLogger := log .DefaultLogger .With ("component" , "leader-coordinator" )
312+ leaderCoordinator := leader .New (leaderLeaseBackend , leaderIdentifier , leaderClusterID , coordinatorLogger )
313+ hasLeaderTasks := false
314+ registerLeaderTask := func (task leader.Task ) {
315+ hasLeaderTasks = true
316+ leaderCoordinator .Register (task )
317+ }
318+
305319 // k8s clients
306320 webhooksClient := executorsclientv1 .NewWebhooksClient (kubeClient , cfg .TestkubeNamespace )
307321 webhookTemplatesClient := executorsclientv1 .NewWebhookTemplatesClient (kubeClient , cfg .TestkubeNamespace )
@@ -508,9 +522,12 @@ func main() {
508522 // Update TestWorkflowExecution Kubernetes resource objects on status change
509523 eventsEmitter .RegisterLoader (testworkflowexecutions .NewLoader (ctx , cfg .TestkubeNamespace , kubeClient ))
510524
511- g .Go (func () error {
512- eventsEmitter .Listen (ctx )
513- return nil
525+ registerLeaderTask (leader.Task {
526+ Name : "event-emitter" ,
527+ Start : func (taskCtx context.Context ) error {
528+ eventsEmitter .RunLeader (taskCtx )
529+ return nil
530+ },
514531 })
515532
516533 /////////////////////////////////
@@ -641,7 +658,7 @@ func main() {
641658 eventsEmitter ,
642659 )
643660 commons .ExitOnError ("starting agent" , err )
644- leaderTasks = append ( leaderTasks , leader.Task {
661+ registerLeaderTask ( leader.Task {
645662 Name : "agent" ,
646663 Start : func (taskCtx context.Context ) error {
647664 err := agentHandle .Run (taskCtx )
@@ -662,26 +679,12 @@ func main() {
662679 // TODO: Check why this simpler options is not working
663680 // testkubeClientset := testkubeclientset.New(clientset.RESTClient())
664681
665- var triggersLeaseBackend leasebackend.Repository
666- if controlPlane != nil {
667- triggersLeaseBackend = controlPlane .GetRepositoryManager ().LeaseBackend ()
668- } else {
669- // Fallback: Kubernetes Lease-based coordination (no external DB required)
670- triggersLeaseBackend = leasebackendk8s .NewK8sLeaseBackend (
671- clientset ,
672- "testkube-triggers-lease" ,
673- cfg .TestkubeNamespace ,
674- leasebackendk8s .WithLeaseName (cfg .TestkubeLeaseName ),
675- )
676- }
677-
678- triggerService := triggers .NewService (
682+ triggerTasks := triggers .NewService (
679683 cfg .RunnerName ,
680684 clientset ,
681685 testkubeClientset ,
682686 testWorkflowsClient ,
683687 testTriggersClient ,
684- triggersLeaseBackend ,
685688 log .DefaultLogger ,
686689 eventBus ,
687690 metrics ,
@@ -695,17 +698,16 @@ func main() {
695698 triggers .WithTestTriggerControlPlane (cfg .TestTriggerControlPlane ),
696699 triggers .WithEventLabels (cfg .EventLabels ),
697700 )
698- log .DefaultLogger .Info ("starting trigger service" )
699- g .Go (func () error {
700- triggerService .Run (ctx )
701- return nil
702- })
701+ log .DefaultLogger .Info ("registering trigger tasks with shared leader coordinator" )
702+ for _ , task := range triggerTasks {
703+ registerLeaderTask (task )
704+ }
703705 } else {
704706 log .DefaultLogger .Info ("test triggers are disabled" )
705707 }
706708
707709 // telemetry based functions
708- leaderTasks = append ( leaderTasks , leader.Task {
710+ registerLeaderTask ( leader.Task {
709711 Name : "telemetry-heartbeat" ,
710712 Start : func (taskCtx context.Context ) error {
711713 services .HandleTelemetryHeartbeat (taskCtx , clusterId , configMapConfig )
@@ -755,7 +757,7 @@ func main() {
755757 schedulableResourceWatcher .WatchTestWorkflowTemplates ,
756758 )
757759 // Start the new scheduler.
758- leaderTasks = append ( leaderTasks , leader.Task {
760+ registerLeaderTask ( leader.Task {
759761 Name : "cron-scheduler" ,
760762 Start : func (taskCtx context.Context ) error {
761763 go func () {
@@ -779,22 +781,7 @@ func main() {
779781 return httpServer .Run (ctx )
780782 })
781783
782- if len (leaderTasks ) > 0 {
783- leaderIdentifier := resolveLeaderIdentifier ()
784-
785- leaderClusterID := clusterId
786- if leaderClusterID == "" {
787- leaderClusterID = "testkube-core"
788- } else {
789- leaderClusterID = fmt .Sprintf ("%s-core" , leaderClusterID )
790- }
791-
792- coordinatorLogger := log .DefaultLogger .With ("component" , "leader-coordinator" )
793- leaderCoordinator := leader .New (leaderLeaseBackend , leaderIdentifier , leaderClusterID , coordinatorLogger )
794- for _ , task := range leaderTasks {
795- leaderCoordinator .Register (task )
796- }
797-
784+ if hasLeaderTasks {
798785 g .Go (func () error {
799786 return leaderCoordinator .Run (ctx )
800787 })
0 commit comments