@@ -18,6 +18,7 @@ import (
18
18
"google.golang.org/grpc/credentials"
19
19
"google.golang.org/grpc/credentials/insecure"
20
20
_ "k8s.io/client-go/plugin/pkg/client/auth"
21
+ "k8s.io/client-go/rest"
21
22
22
23
"github.com/bombsimon/logrusr/v2"
23
24
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
@@ -123,52 +124,63 @@ func main() {
123
124
HealthProbeBindAddress : cfg .Health .Addr ,
124
125
LeaderElection : true ,
125
126
LeaderElectionID : "ws-manager-mk2-leader.gitpod.io" ,
126
- NewCache : cache .MultiNamespacedCacheBuilder ([]string {cfg .Manager .Namespace , cfg .Manager .SecretsNamespace }),
127
+ NewCache : func (config * rest.Config , opts cache.Options ) (cache.Cache , error ) {
128
+ opts .Namespaces = []string {cfg .Manager .Namespace , cfg .Manager .SecretsNamespace }
129
+ return cache .New (config , opts )
130
+ },
127
131
})
128
132
if err != nil {
129
133
setupLog .Error (err , "unable to start manager" )
130
134
os .Exit (1 )
131
135
}
132
136
133
- maintenanceReconciler , err := controllers .NewMaintenanceReconciler (mgr .GetClient ())
134
- if err != nil {
135
- setupLog .Error (err , "unable to create maintenance controller" , "controller" , "Maintenance" )
136
- os .Exit (1 )
137
- }
137
+ go func () {
138
+ <- mgr .Elected ()
138
139
139
- workspaceReconciler , err := controllers .NewWorkspaceReconciler (
140
- mgr .GetClient (), mgr .GetScheme (), mgr .GetEventRecorderFor ("workspace" ), & cfg .Manager , metrics .Registry , maintenanceReconciler )
141
- if err != nil {
142
- setupLog .Error (err , "unable to create controller" , "controller" , "Workspace" )
143
- os .Exit (1 )
144
- }
140
+ maintenanceReconciler , err := controllers .NewMaintenanceReconciler (mgr .GetClient ())
141
+ if err != nil {
142
+ setupLog .Error (err , "unable to create maintenance controller" , "controller" , "Maintenance" )
143
+ os .Exit (1 )
144
+ }
145
145
146
- activity := activity . NewWorkspaceActivity ()
147
- timeoutReconciler , err := controllers . NewTimeoutReconciler ( mgr .GetClient (), mgr .GetEventRecorderFor ("workspace" ), cfg .Manager , activity , maintenanceReconciler )
148
- if err != nil {
149
- setupLog .Error (err , "unable to create timeout controller" , "controller" , "Timeout " )
150
- os .Exit (1 )
151
- }
146
+ workspaceReconciler , err := controllers . NewWorkspaceReconciler (
147
+ mgr . GetClient (), mgr .GetScheme (), mgr .GetEventRecorderFor ("workspace" ), & cfg .Manager , metrics . Registry , maintenanceReconciler )
148
+ if err != nil {
149
+ setupLog .Error (err , "unable to create controller" , "controller" , "Workspace " )
150
+ os .Exit (1 )
151
+ }
152
152
153
- wsmanService , err := setupGRPCService (cfg , mgr .GetClient (), activity , maintenanceReconciler )
154
- if err != nil {
155
- setupLog .Error (err , "unable to start manager service" )
156
- os .Exit (1 )
157
- }
153
+ activity := activity .NewWorkspaceActivity ()
158
154
159
- workspaceReconciler .OnReconcile = wsmanService .OnWorkspaceReconcile
160
- if err = workspaceReconciler .SetupWithManager (mgr ); err != nil {
161
- setupLog .Error (err , "unable to setup workspace controller with manager" , "controller" , "Workspace" )
162
- os .Exit (1 )
163
- }
164
- if err = timeoutReconciler .SetupWithManager (mgr ); err != nil {
165
- setupLog .Error (err , "unable to setup timeout controller with manager" , "controller" , "Timeout" )
166
- os .Exit (1 )
167
- }
168
- if err = maintenanceReconciler .SetupWithManager (mgr ); err != nil {
169
- setupLog .Error (err , "unable to setup maintenance controller with manager" , "controller" , "Maintenance" )
170
- os .Exit (1 )
171
- }
155
+ timeoutReconciler , err := controllers .NewTimeoutReconciler (mgr .GetClient (), mgr .GetEventRecorderFor ("workspace" ), cfg .Manager , activity , maintenanceReconciler )
156
+ if err != nil {
157
+ setupLog .Error (err , "unable to create timeout controller" , "controller" , "Timeout" )
158
+ os .Exit (1 )
159
+ }
160
+
161
+ wsmanService , err := setupGRPCService (cfg , mgr .GetClient (), activity , maintenanceReconciler )
162
+ if err != nil {
163
+ setupLog .Error (err , "unable to start manager service" )
164
+ os .Exit (1 )
165
+ }
166
+
167
+ workspaceReconciler .OnReconcile = wsmanService .OnWorkspaceReconcile
168
+
169
+ if err = workspaceReconciler .SetupWithManager (mgr ); err != nil {
170
+ setupLog .Error (err , "unable to setup workspace controller with manager" , "controller" , "Workspace" )
171
+ os .Exit (1 )
172
+ }
173
+
174
+ if err = timeoutReconciler .SetupWithManager (mgr ); err != nil {
175
+ setupLog .Error (err , "unable to setup timeout controller with manager" , "controller" , "Timeout" )
176
+ os .Exit (1 )
177
+ }
178
+
179
+ if err = maintenanceReconciler .SetupWithManager (mgr ); err != nil {
180
+ setupLog .Error (err , "unable to setup maintenance controller with manager" , "controller" , "Maintenance" )
181
+ os .Exit (1 )
182
+ }
183
+ }()
172
184
173
185
// if err = (&workspacev1.Workspace{}).SetupWebhookWithManager(mgr); err != nil {
174
186
// setupLog.Error(err, "unable to create webhook", "webhook", "Workspace")
@@ -191,6 +203,9 @@ func main() {
191
203
setupLog .Error (err , "problem running manager" )
192
204
os .Exit (1 )
193
205
}
206
+
207
+ setupLog .Info ("new leader elected" )
208
+ os .Exit (1 )
194
209
}
195
210
196
211
func setupGRPCService (cfg * config.ServiceConfiguration , k8s client.Client , activity * activity.WorkspaceActivity , maintenance maintenance.Maintenance ) (* service.WorkspaceManagerServer , error ) {
0 commit comments