-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathcontroller-handler.go
More file actions
76 lines (66 loc) · 2.99 KB
/
controller-handler.go
File metadata and controls
76 lines (66 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package managerdriver
import (
"context"
"github.com/go-logr/logr"
"k8s.io/client-go/util/workqueue"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/event"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"github.com/ngrok/ngrok-operator/internal/store"
)
var _ handler.EventHandler = &ControllerEventHandler{}
// ControllerEventHandler implements the controller-runtime eventhandler interface
// https://github.com/kubernetes-sigs/controller-runtime/blob/v0.14.1/pkg/handler/eventhandler.go
// This allows it to be used to handle each reconcile event for a watched resource type.
// This handler takes a basic object and updates/deletes the store with it.
// It is used to simply watch some resources and keep their values updated in the store.
// It is used to keep various crds like edges/tunnels/domains, and core resources like ingress classes, updated.
type ControllerEventHandler struct {
client client.Client
driver *Driver
store store.Storer
log logr.Logger
}
// NewControllerEventHandler creates a new ControllerEventHandler
func NewControllerEventHandler(resourceName string, d *Driver, client client.Client) *ControllerEventHandler {
return &ControllerEventHandler{
driver: d,
client: client,
store: d.store,
log: d.log.WithValues("ControllerEventHandlerFor", resourceName),
}
}
// Create is called in response to an create event - e.g. Edge Creation.
func (e *ControllerEventHandler) Create(_ context.Context, evt event.CreateEvent, _ workqueue.TypedRateLimitingInterface[reconcile.Request]) {
if err := e.store.Update(evt.Object); err != nil {
e.log.Error(err, "error updating object in create", "object", evt.Object)
return
}
}
// Update is called in response to an update event - e.g. Edge Updated.
func (e *ControllerEventHandler) Update(ctx context.Context, evt event.UpdateEvent, _ workqueue.TypedRateLimitingInterface[reconcile.Request]) {
if err := e.store.Update(evt.ObjectNew); err != nil {
e.log.Error(err, "error updating object in update", "object", evt.ObjectNew)
return
}
if err := e.driver.updateStatuses(ctx, e.client); err != nil {
e.log.Error(err, "error syncing after object update", "object", evt.ObjectNew)
return
}
}
// Delete is called in response to a delete event - e.g. Edge Deleted.
func (e *ControllerEventHandler) Delete(_ context.Context, evt event.DeleteEvent, _ workqueue.TypedRateLimitingInterface[reconcile.Request]) {
if err := e.store.Delete(evt.Object); err != nil {
e.log.Error(err, "error deleting object", "object", evt.Object)
return
}
}
// Generic is called in response to an event of an unknown type or a synthetic event triggered as a cron or
// external trigger request
func (e *ControllerEventHandler) Generic(_ context.Context, evt event.GenericEvent, _ workqueue.TypedRateLimitingInterface[reconcile.Request]) {
if err := e.store.Update(evt.Object); err != nil {
e.log.Error(err, "error updating object in generic", "object", evt.Object)
return
}
}