Skip to content

Commit d119a35

Browse files
committed
Refactor
1 parent 662e3a3 commit d119a35

File tree

3 files changed

+96
-74
lines changed

3 files changed

+96
-74
lines changed

components/ws-manager-mk2/controllers/maintenance_controller.go

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"context"
99
"encoding/json"
1010
"fmt"
11+
"os"
1112
"sync"
1213
"time"
1314

@@ -17,7 +18,12 @@ import (
1718
"k8s.io/apimachinery/pkg/types"
1819
ctrl "sigs.k8s.io/controller-runtime"
1920
"sigs.k8s.io/controller-runtime/pkg/client"
21+
"sigs.k8s.io/controller-runtime/pkg/controller"
22+
"sigs.k8s.io/controller-runtime/pkg/event"
23+
"sigs.k8s.io/controller-runtime/pkg/handler"
2024
"sigs.k8s.io/controller-runtime/pkg/log"
25+
"sigs.k8s.io/controller-runtime/pkg/predicate"
26+
"sigs.k8s.io/controller-runtime/pkg/source"
2127
)
2228

2329
var (
@@ -106,9 +112,44 @@ func (r *MaintenanceReconciler) setEnabledUntil(ctx context.Context, enabledUnti
106112
log.FromContext(ctx).Info("maintenance mode state change", "enabledUntil", enabledUntil)
107113
}
108114

109-
func (r *MaintenanceReconciler) SetupWithManager(mgr ctrl.Manager) error {
110-
return ctrl.NewControllerManagedBy(mgr).
111-
Named("maintenance").
112-
For(&corev1.ConfigMap{}).
113-
Complete(r)
115+
func (r *MaintenanceReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error {
116+
c, err := controller.NewUnmanaged("maintenance-controller", mgr, controller.Options{Reconciler: r})
117+
if err != nil {
118+
return err
119+
}
120+
121+
go func() {
122+
err = c.Start(ctx)
123+
if err != nil {
124+
log.FromContext(ctx).Error(err, "cannot start maintenance reconciler")
125+
os.Exit(1)
126+
}
127+
}()
128+
129+
return c.Watch(source.Kind(mgr.GetCache(), &corev1.ConfigMap{}), &handler.EnqueueRequestForObject{}, &filterConfigMap{})
130+
131+
}
132+
133+
type filterConfigMap struct {
134+
predicate.Funcs
135+
}
136+
137+
func (f filterConfigMap) Create(e event.CreateEvent) bool {
138+
return f.filter(e.Object)
139+
}
140+
141+
func (f filterConfigMap) Update(e event.UpdateEvent) bool {
142+
return f.filter(e.ObjectNew)
143+
}
144+
145+
func (f filterConfigMap) Generic(e event.GenericEvent) bool {
146+
return f.filter(e.Object)
147+
}
148+
149+
func (f filterConfigMap) filter(obj client.Object) bool {
150+
if obj == nil {
151+
return false
152+
}
153+
154+
return obj.GetName() == configMapKey.Name && obj.GetNamespace() == configMapKey.Namespace
114155
}

components/ws-manager-mk2/main.go

Lines changed: 38 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"flag"
1111
"fmt"
1212
"net"
13-
"net/http"
1413
"os"
1514

1615
// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
@@ -113,6 +112,7 @@ func main() {
113112
setupLog.Error(nil, "namespace cannot be empty")
114113
os.Exit(1)
115114
}
115+
116116
if cfg.Manager.SecretsNamespace == "" {
117117
setupLog.Error(nil, "secretsNamespace cannot be empty")
118118
os.Exit(1)
@@ -136,57 +136,50 @@ func main() {
136136
os.Exit(1)
137137
}
138138

139-
var grpcServerStarted bool
140-
141-
go func() {
142-
<-mgr.Elected()
143-
144-
maintenanceReconciler, err := controllers.NewMaintenanceReconciler(mgr.GetClient())
145-
if err != nil {
146-
setupLog.Error(err, "unable to create maintenance controller", "controller", "Maintenance")
147-
os.Exit(1)
148-
}
139+
mgrCtx := ctrl.SetupSignalHandler()
149140

150-
workspaceReconciler, err := controllers.NewWorkspaceReconciler(
151-
mgr.GetClient(), mgr.GetScheme(), mgr.GetEventRecorderFor("workspace"), &cfg.Manager, metrics.Registry, maintenanceReconciler)
152-
if err != nil {
153-
setupLog.Error(err, "unable to create controller", "controller", "Workspace")
154-
os.Exit(1)
155-
}
156-
157-
activity := activity.NewWorkspaceActivity()
141+
maintenanceReconciler, err := controllers.NewMaintenanceReconciler(mgr.GetClient())
142+
if err != nil {
143+
setupLog.Error(err, "unable to create maintenance controller", "controller", "Maintenance")
144+
os.Exit(1)
145+
}
158146

159-
timeoutReconciler, err := controllers.NewTimeoutReconciler(mgr.GetClient(), mgr.GetEventRecorderFor("workspace"), cfg.Manager, activity, maintenanceReconciler)
160-
if err != nil {
161-
setupLog.Error(err, "unable to create timeout controller", "controller", "Timeout")
162-
os.Exit(1)
163-
}
147+
workspaceReconciler, err := controllers.NewWorkspaceReconciler(
148+
mgr.GetClient(), mgr.GetScheme(), mgr.GetEventRecorderFor("workspace"), &cfg.Manager, metrics.Registry, maintenanceReconciler)
149+
if err != nil {
150+
setupLog.Error(err, "unable to create controller", "controller", "Workspace")
151+
os.Exit(1)
152+
}
164153

165-
wsmanService, err := setupGRPCService(cfg, mgr.GetClient(), activity, maintenanceReconciler)
166-
if err != nil {
167-
setupLog.Error(err, "unable to start manager service")
168-
os.Exit(1)
169-
}
154+
activity := activity.NewWorkspaceActivity()
170155

171-
grpcServerStarted = true
156+
timeoutReconciler, err := controllers.NewTimeoutReconciler(mgr.GetClient(), mgr.GetEventRecorderFor("workspace"), cfg.Manager, activity, maintenanceReconciler)
157+
if err != nil {
158+
setupLog.Error(err, "unable to create timeout controller", "controller", "Timeout")
159+
os.Exit(1)
160+
}
172161

173-
workspaceReconciler.OnReconcile = wsmanService.OnWorkspaceReconcile
162+
wsmanService, err := setupGRPCService(cfg, mgr.GetClient(), activity, maintenanceReconciler)
163+
if err != nil {
164+
setupLog.Error(err, "unable to start manager service")
165+
os.Exit(1)
166+
}
174167

175-
if err = workspaceReconciler.SetupWithManager(mgr); err != nil {
176-
setupLog.Error(err, "unable to setup workspace controller with manager", "controller", "Workspace")
177-
os.Exit(1)
178-
}
168+
workspaceReconciler.OnReconcile = wsmanService.OnWorkspaceReconcile
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+
}
179173

180-
if err = timeoutReconciler.SetupWithManager(mgr); err != nil {
181-
setupLog.Error(err, "unable to setup timeout controller with manager", "controller", "Timeout")
182-
os.Exit(1)
183-
}
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+
}
184178

185-
if err = maintenanceReconciler.SetupWithManager(mgr); err != nil {
186-
setupLog.Error(err, "unable to setup maintenance controller with manager", "controller", "Maintenance")
187-
os.Exit(1)
188-
}
189-
}()
179+
if err = maintenanceReconciler.SetupWithManager(mgrCtx, mgr); err != nil {
180+
setupLog.Error(err, "unable to setup maintenance controller with manager", "controller", "Maintenance")
181+
os.Exit(1)
182+
}
190183

191184
// if err = (&workspacev1.Workspace{}).SetupWebhookWithManager(mgr); err != nil {
192185
// setupLog.Error(err, "unable to create webhook", "webhook", "Workspace")
@@ -204,19 +197,8 @@ func main() {
204197
os.Exit(1)
205198
}
206199

207-
if err := mgr.AddHealthzCheck("grpc-server", func(req *http.Request) error {
208-
if grpcServerStarted {
209-
return nil
210-
}
211-
212-
return fmt.Errorf("ws-manager GRPC server not started")
213-
}); err != nil {
214-
setupLog.Error(err, "unable to set up ready check")
215-
os.Exit(1)
216-
}
217-
218200
setupLog.Info("starting manager")
219-
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
201+
if err := mgr.Start(mgrCtx); err != nil {
220202
setupLog.Error(err, "problem running manager")
221203
os.Exit(1)
222204
}

components/ws-manager-mk2/service/manager.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,13 @@ import (
1616
validation "github.com/go-ozzo/ozzo-validation"
1717
"github.com/opentracing/opentracing-go"
1818
"github.com/prometheus/client_golang/prometheus"
19+
"github.com/sirupsen/logrus"
1920
"golang.org/x/xerrors"
2021
"google.golang.org/grpc/codes"
2122
"google.golang.org/grpc/peer"
2223
"google.golang.org/grpc/status"
2324
"google.golang.org/protobuf/proto"
2425
"google.golang.org/protobuf/types/known/timestamppb"
25-
26-
wsk8s "github.com/gitpod-io/gitpod/common-go/kubernetes"
27-
"github.com/gitpod-io/gitpod/common-go/log"
28-
"github.com/gitpod-io/gitpod/common-go/tracing"
29-
"github.com/gitpod-io/gitpod/common-go/util"
30-
"github.com/gitpod-io/gitpod/ws-manager-mk2/pkg/activity"
31-
"github.com/gitpod-io/gitpod/ws-manager-mk2/pkg/maintenance"
32-
wsmanapi "github.com/gitpod-io/gitpod/ws-manager/api"
33-
"github.com/gitpod-io/gitpod/ws-manager/api/config"
34-
workspacev1 "github.com/gitpod-io/gitpod/ws-manager/api/crd/v1"
35-
36-
csapi "github.com/gitpod-io/gitpod/content-service/api"
37-
"github.com/sirupsen/logrus"
3826
corev1 "k8s.io/api/core/v1"
3927
"k8s.io/apimachinery/pkg/api/errors"
4028
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -46,6 +34,17 @@ import (
4634
"k8s.io/utils/pointer"
4735
"sigs.k8s.io/controller-runtime/pkg/client"
4836
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
37+
38+
wsk8s "github.com/gitpod-io/gitpod/common-go/kubernetes"
39+
"github.com/gitpod-io/gitpod/common-go/log"
40+
"github.com/gitpod-io/gitpod/common-go/tracing"
41+
"github.com/gitpod-io/gitpod/common-go/util"
42+
csapi "github.com/gitpod-io/gitpod/content-service/api"
43+
"github.com/gitpod-io/gitpod/ws-manager-mk2/pkg/activity"
44+
"github.com/gitpod-io/gitpod/ws-manager-mk2/pkg/maintenance"
45+
wsmanapi "github.com/gitpod-io/gitpod/ws-manager/api"
46+
"github.com/gitpod-io/gitpod/ws-manager/api/config"
47+
workspacev1 "github.com/gitpod-io/gitpod/ws-manager/api/crd/v1"
4948
)
5049

5150
const (

0 commit comments

Comments
 (0)