@@ -18,6 +18,7 @@ import (
1818 "google.golang.org/grpc/credentials"
1919 "google.golang.org/grpc/credentials/insecure"
2020 _ "k8s.io/client-go/plugin/pkg/client/auth"
21+ "k8s.io/client-go/rest"
2122
2223 "github.com/bombsimon/logrusr/v2"
2324 grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
@@ -68,13 +69,9 @@ func init() {
6869}
6970
7071func main () {
71- var enableLeaderElection bool
7272 var configFN string
7373 var jsonLog bool
7474 var verbose bool
75- flag .BoolVar (& enableLeaderElection , "leader-elect" , false ,
76- "Enable leader election for controller manager. " +
77- "Enabling this will ensure there is only one active controller manager." )
7875 flag .StringVar (& configFN , "config" , "" , "Path to the config file" )
7976 flag .BoolVar (& jsonLog , "json-log" , true , "produce JSON log output on verbose level" )
8077 flag .BoolVar (& verbose , "verbose" , false , "Enable verbose logging" )
@@ -115,25 +112,32 @@ func main() {
115112 setupLog .Error (nil , "namespace cannot be empty" )
116113 os .Exit (1 )
117114 }
115+
118116 if cfg .Manager .SecretsNamespace == "" {
119117 setupLog .Error (nil , "secretsNamespace cannot be empty" )
120118 os .Exit (1 )
121119 }
122120
123121 mgr , err := ctrl .NewManager (ctrl .GetConfigOrDie (), ctrl.Options {
124- Scheme : scheme ,
125- MetricsBindAddress : cfg .Prometheus .Addr ,
126- Port : 9443 ,
127- HealthProbeBindAddress : cfg .Health .Addr ,
128- LeaderElection : enableLeaderElection ,
129- LeaderElectionID : "ws-manager-mk2-leader.gitpod.io" ,
130- NewCache : cache .MultiNamespacedCacheBuilder ([]string {cfg .Manager .Namespace , cfg .Manager .SecretsNamespace }),
122+ Scheme : scheme ,
123+ MetricsBindAddress : cfg .Prometheus .Addr ,
124+ Port : 9443 ,
125+ HealthProbeBindAddress : cfg .Health .Addr ,
126+ LeaderElection : true ,
127+ LeaderElectionID : "ws-manager-mk2-leader.gitpod.io" ,
128+ LeaderElectionReleaseOnCancel : true ,
129+ NewCache : func (config * rest.Config , opts cache.Options ) (cache.Cache , error ) {
130+ opts .Namespaces = []string {cfg .Manager .Namespace , cfg .Manager .SecretsNamespace }
131+ return cache .New (config , opts )
132+ },
131133 })
132134 if err != nil {
133135 setupLog .Error (err , "unable to start manager" )
134136 os .Exit (1 )
135137 }
136138
139+ mgrCtx := ctrl .SetupSignalHandler ()
140+
137141 maintenanceReconciler , err := controllers .NewMaintenanceReconciler (mgr .GetClient ())
138142 if err != nil {
139143 setupLog .Error (err , "unable to create maintenance controller" , "controller" , "Maintenance" )
@@ -148,6 +152,7 @@ func main() {
148152 }
149153
150154 activity := activity .NewWorkspaceActivity ()
155+
151156 timeoutReconciler , err := controllers .NewTimeoutReconciler (mgr .GetClient (), mgr .GetEventRecorderFor ("workspace" ), cfg .Manager , activity , maintenanceReconciler )
152157 if err != nil {
153158 setupLog .Error (err , "unable to create timeout controller" , "controller" , "Timeout" )
@@ -165,11 +170,13 @@ func main() {
165170 setupLog .Error (err , "unable to setup workspace controller with manager" , "controller" , "Workspace" )
166171 os .Exit (1 )
167172 }
173+
168174 if err = timeoutReconciler .SetupWithManager (mgr ); err != nil {
169175 setupLog .Error (err , "unable to setup timeout controller with manager" , "controller" , "Timeout" )
170176 os .Exit (1 )
171177 }
172- if err = maintenanceReconciler .SetupWithManager (mgr ); err != nil {
178+
179+ if err = maintenanceReconciler .SetupWithManager (mgrCtx , mgr ); err != nil {
173180 setupLog .Error (err , "unable to setup maintenance controller with manager" , "controller" , "Maintenance" )
174181 os .Exit (1 )
175182 }
@@ -191,10 +198,13 @@ func main() {
191198 }
192199
193200 setupLog .Info ("starting manager" )
194- if err := mgr .Start (ctrl . SetupSignalHandler () ); err != nil {
201+ if err := mgr .Start (mgrCtx ); err != nil {
195202 setupLog .Error (err , "problem running manager" )
196203 os .Exit (1 )
197204 }
205+
206+ setupLog .Info ("new leader elected" )
207+ os .Exit (1 )
198208}
199209
200210func setupGRPCService (cfg * config.ServiceConfiguration , k8s client.Client , activity * activity.WorkspaceActivity , maintenance maintenance.Maintenance ) (* service.WorkspaceManagerServer , error ) {
0 commit comments