@@ -18,13 +18,17 @@ 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
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
23
24
"github.com/prometheus/client_golang/prometheus"
25
+ corev1 "k8s.io/api/core/v1"
26
+ "k8s.io/apimachinery/pkg/labels"
24
27
"k8s.io/apimachinery/pkg/runtime"
25
28
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
26
29
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
27
30
ctrl "sigs.k8s.io/controller-runtime"
31
+ "sigs.k8s.io/controller-runtime/pkg/cache"
28
32
"sigs.k8s.io/controller-runtime/pkg/client"
29
33
"sigs.k8s.io/controller-runtime/pkg/healthz"
30
34
"sigs.k8s.io/controller-runtime/pkg/log/zap"
@@ -42,6 +46,7 @@ import (
42
46
43
47
"github.com/gitpod-io/gitpod/ws-manager-mk2/controllers"
44
48
"github.com/gitpod-io/gitpod/ws-manager-mk2/pkg/activity"
49
+ "github.com/gitpod-io/gitpod/ws-manager-mk2/pkg/maintenance"
45
50
imgproxy "github.com/gitpod-io/gitpod/ws-manager-mk2/pkg/proxy"
46
51
"github.com/gitpod-io/gitpod/ws-manager-mk2/service"
47
52
//+kubebuilder:scaffold:imports
@@ -105,13 +110,28 @@ func main() {
105
110
LeaderElection : enableLeaderElection ,
106
111
LeaderElectionID : "ws-manager-mk2-leader.gitpod.io" ,
107
112
Namespace : cfg .Manager .Namespace ,
113
+ NewCache : func (conf * rest.Config , opts cache.Options ) (cache.Cache , error ) {
114
+ // Only watch the maintenance mode ConfigMap.
115
+ opts .SelectorsByObject = cache.SelectorsByObject {
116
+ & corev1.ConfigMap {}: cache.ObjectSelector {
117
+ Label : labels .SelectorFromSet (labels.Set {controllers .LabelMaintenance : "true" }),
118
+ },
119
+ }
120
+ return cache .New (conf , opts )
121
+ },
108
122
})
109
123
if err != nil {
110
124
setupLog .Error (err , "unable to start manager" )
111
125
os .Exit (1 )
112
126
}
113
127
114
- reconciler , err := controllers .NewWorkspaceReconciler (mgr .GetClient (), mgr .GetScheme (), & cfg .Manager , metrics .Registry )
128
+ maintenance , err := controllers .NewMaintenanceReconciler (mgr .GetClient ())
129
+ if err != nil {
130
+ setupLog .Error (err , "unable to create maintenance controller" , "controller" , "Maintenance" )
131
+ os .Exit (1 )
132
+ }
133
+
134
+ reconciler , err := controllers .NewWorkspaceReconciler (mgr .GetClient (), mgr .GetScheme (), & cfg .Manager , metrics .Registry , maintenance )
115
135
if err != nil {
116
136
setupLog .Error (err , "unable to create controller" , "controller" , "Workspace" )
117
137
os .Exit (1 )
@@ -124,7 +144,7 @@ func main() {
124
144
os .Exit (1 )
125
145
}
126
146
127
- wsmanService , err := setupGRPCService (cfg , mgr .GetClient (), activity )
147
+ wsmanService , err := setupGRPCService (cfg , mgr .GetClient (), activity , maintenance )
128
148
if err != nil {
129
149
setupLog .Error (err , "unable to start manager service" )
130
150
os .Exit (1 )
@@ -139,6 +159,10 @@ func main() {
139
159
setupLog .Error (err , "unable to setup timeout controller with manager" , "controller" , "Timeout" )
140
160
os .Exit (1 )
141
161
}
162
+ if err = maintenance .SetupWithManager (mgr ); err != nil {
163
+ setupLog .Error (err , "unable to setup maintenance controller with manager" , "controller" , "Maintenance" )
164
+ os .Exit (1 )
165
+ }
142
166
143
167
// if err = (&workspacev1.Workspace{}).SetupWebhookWithManager(mgr); err != nil {
144
168
// setupLog.Error(err, "unable to create webhook", "webhook", "Workspace")
@@ -163,7 +187,7 @@ func main() {
163
187
}
164
188
}
165
189
166
- func setupGRPCService (cfg * config.ServiceConfiguration , k8s client.Client , activity * activity.WorkspaceActivity ) (* service.WorkspaceManagerServer , error ) {
190
+ func setupGRPCService (cfg * config.ServiceConfiguration , k8s client.Client , activity * activity.WorkspaceActivity , maintenance maintenance. Maintenance ) (* service.WorkspaceManagerServer , error ) {
167
191
// TODO(cw): remove use of common-go/log
168
192
169
193
if len (cfg .RPCServer .RateLimits ) > 0 {
@@ -219,7 +243,7 @@ func setupGRPCService(cfg *config.ServiceConfiguration, k8s client.Client, activ
219
243
imgbldr .RegisterImageBuilderServer (grpcServer , imgproxy.ImageBuilder {D : imgbldr .NewImageBuilderClient (conn )})
220
244
}
221
245
222
- srv := service .NewWorkspaceManagerServer (k8s , & cfg .Manager , metrics .Registry , activity )
246
+ srv := service .NewWorkspaceManagerServer (k8s , & cfg .Manager , metrics .Registry , activity , maintenance )
223
247
224
248
grpc_prometheus .Register (grpcServer )
225
249
wsmanapi .RegisterWorkspaceManagerServer (grpcServer , srv )
0 commit comments