Skip to content

Commit 8b196a7

Browse files
committed
use channel for secrets event
1 parent ba3afde commit 8b196a7

File tree

5 files changed

+43
-45
lines changed

5 files changed

+43
-45
lines changed

controllers/ingress/eventhandlers/secret_events.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ func (h *enqueueRequestsForSecretEvent) Delete(e event.DeleteEvent, _ workqueue.
6363
}
6464

6565
func (h *enqueueRequestsForSecretEvent) Generic(e event.GenericEvent, _ workqueue.RateLimitingInterface) {
66-
// we don't have any generic event for secrets.
66+
secretObj := e.Object.(*corev1.Secret)
67+
h.enqueueImpactedObjects(secretObj)
6768
}
6869

6970
func (h *enqueueRequestsForSecretEvent) enqueueImpactedObjects(secret *corev1.Secret) {

controllers/ingress/group_controller.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ func (r *groupReconciler) setupIndexes(ctx context.Context, fieldIndexer client.
281281
func (r *groupReconciler) setupWatches(_ context.Context, c controller.Controller, ingressClassResourceAvailable bool, clientSet *kubernetes.Clientset) error {
282282
ingEventChan := make(chan event.GenericEvent)
283283
svcEventChan := make(chan event.GenericEvent)
284+
secretEventsChan := make(chan event.GenericEvent)
284285
ingEventHandler := eventhandlers.NewEnqueueRequestsForIngressEvent(r.groupLoader, r.eventRecorder,
285286
r.logger.WithName("eventHandlers").WithName("ingress"))
286287
svcEventHandler := eventhandlers.NewEnqueueRequestsForServiceEvent(ingEventChan, r.k8sClient, r.eventRecorder,
@@ -299,6 +300,9 @@ func (r *groupReconciler) setupWatches(_ context.Context, c controller.Controlle
299300
if err := c.Watch(&source.Kind{Type: &corev1.Service{}}, svcEventHandler); err != nil {
300301
return err
301302
}
303+
if err := c.Watch(&source.Channel{Source: secretEventsChan}, secretEventHandler); err != nil {
304+
return err
305+
}
302306
if ingressClassResourceAvailable {
303307
ingClassEventChan := make(chan event.GenericEvent)
304308
ingClassParamsEventHandler := eventhandlers.NewEnqueueRequestsForIngressClassParamsEvent(ingClassEventChan, r.k8sClient, r.eventRecorder,
@@ -315,7 +319,7 @@ func (r *groupReconciler) setupWatches(_ context.Context, c controller.Controlle
315319
return err
316320
}
317321
}
318-
r.secretsManager = k8s.NewSecretsManager(clientSet, secretEventHandler, ctrl.Log.WithName("secrets-manager"))
322+
r.secretsManager = k8s.NewSecretsManager(clientSet, secretEventsChan, ctrl.Log.WithName("secrets-manager"))
319323
return nil
320324
}
321325

pkg/k8s/secrets_manager.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"k8s.io/apimachinery/pkg/types"
77
"k8s.io/apimachinery/pkg/util/sets"
88
"k8s.io/client-go/util/workqueue"
9+
"sigs.k8s.io/controller-runtime/pkg/event"
910
"sync"
1011

1112
"github.com/go-logr/logr"
@@ -17,7 +18,6 @@ import (
1718
"k8s.io/apimachinery/pkg/watch"
1819
"k8s.io/client-go/kubernetes"
1920
"k8s.io/client-go/tools/cache"
20-
"sigs.k8s.io/controller-runtime/pkg/handler"
2121
)
2222

2323
// SecretsManager manages the secret resources needed by the controller
@@ -26,25 +26,25 @@ type SecretsManager interface {
2626
MonitorSecrets(ingressGroupID string, secrets []types.NamespacedName)
2727
}
2828

29-
func NewSecretsManager(clientSet kubernetes.Interface, eventHandler handler.EventHandler, logger logr.Logger) *defaultSecretsManager {
29+
func NewSecretsManager(clientSet kubernetes.Interface, secretsEventChan chan<- event.GenericEvent, logger logr.Logger) *defaultSecretsManager {
3030
return &defaultSecretsManager{
31-
mutex: sync.Mutex{},
32-
secretMap: make(map[types.NamespacedName]*secretItem),
33-
eventHandler: eventHandler,
34-
clientSet: clientSet,
35-
logger: logger,
31+
mutex: sync.Mutex{},
32+
secretMap: make(map[types.NamespacedName]*secretItem),
33+
secretsEventChan: secretsEventChan,
34+
clientSet: clientSet,
35+
logger: logger,
3636
}
3737
}
3838

3939
var _ SecretsManager = &defaultSecretsManager{}
4040

4141
type defaultSecretsManager struct {
42-
mutex sync.Mutex
43-
secretMap map[types.NamespacedName]*secretItem
44-
eventHandler handler.EventHandler
45-
clientSet kubernetes.Interface
46-
queue workqueue.RateLimitingInterface
47-
logger logr.Logger
42+
mutex sync.Mutex
43+
secretMap map[types.NamespacedName]*secretItem
44+
secretsEventChan chan<- event.GenericEvent
45+
clientSet kubernetes.Interface
46+
queue workqueue.RateLimitingInterface
47+
logger logr.Logger
4848
}
4949

5050
type secretItem struct {
@@ -121,7 +121,7 @@ func (m *defaultSecretsManager) newReflector(namespace, name string) *secretItem
121121
}
122122

123123
func (m *defaultSecretsManager) newStore() *SecretsStore {
124-
return NewSecretsStore(m.eventHandler, cache.MetaNamespaceKeyFunc, m.queue)
124+
return NewSecretsStore(m.secretsEventChan, cache.MetaNamespaceKeyFunc, m.logger)
125125
}
126126

127127
func (s *secretItem) stopReflector() {

pkg/k8s/secrets_manager_test.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,10 @@ import (
66
"github.com/stretchr/testify/assert"
77
"k8s.io/apimachinery/pkg/types"
88
"k8s.io/client-go/kubernetes/fake"
9-
"k8s.io/client-go/util/workqueue"
109
"sigs.k8s.io/controller-runtime/pkg/event"
11-
"sigs.k8s.io/controller-runtime/pkg/handler"
1210
"sigs.k8s.io/controller-runtime/pkg/log"
1311
)
1412

15-
var _ handler.EventHandler = &testSecretsEventHandler{}
16-
17-
type testSecretsEventHandler struct{}
18-
19-
func (h *testSecretsEventHandler) Create(_ event.CreateEvent, _ workqueue.RateLimitingInterface) {}
20-
func (h *testSecretsEventHandler) Update(_ event.UpdateEvent, _ workqueue.RateLimitingInterface) {}
21-
func (h *testSecretsEventHandler) Delete(_ event.DeleteEvent, _ workqueue.RateLimitingInterface) {}
22-
func (h *testSecretsEventHandler) Generic(_ event.GenericEvent, _ workqueue.RateLimitingInterface) {}
23-
2413
func Test_defaultSecretsManager_MonitorSecrets(t *testing.T) {
2514
type monitorSecretsCall struct {
2615
groupID string
@@ -159,8 +148,9 @@ func Test_defaultSecretsManager_MonitorSecrets(t *testing.T) {
159148
}
160149
for _, tt := range tests {
161150
t.Run(tt.testName, func(t *testing.T) {
151+
secretsEventChan := make(chan event.GenericEvent, 100)
162152
fakeClient := fake.NewSimpleClientset()
163-
secretsManager := NewSecretsManager(fakeClient, &testSecretsEventHandler{}, &log.NullLogger{})
153+
secretsManager := NewSecretsManager(fakeClient, secretsEventChan, &log.NullLogger{})
164154

165155
for _, call := range tt.monitorSecretsCall {
166156
secretsManager.MonitorSecrets(call.groupID, call.secrets)

pkg/k8s/secrets_store.go

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
package k8s
22

33
import (
4+
"github.com/go-logr/logr"
45
corev1 "k8s.io/api/core/v1"
56
"k8s.io/client-go/tools/cache"
6-
"k8s.io/client-go/util/workqueue"
77
"sigs.k8s.io/controller-runtime/pkg/event"
8-
"sigs.k8s.io/controller-runtime/pkg/handler"
98
)
109

1110
// NewSecretsStore constructs new conversionStore
12-
func NewSecretsStore(eventHandler handler.EventHandler, keyFunc cache.KeyFunc, queue workqueue.RateLimitingInterface) *SecretsStore {
11+
func NewSecretsStore(secretsEventChan chan<- event.GenericEvent, keyFunc cache.KeyFunc, logger logr.Logger) *SecretsStore {
1312
return &SecretsStore{
14-
eventHandler: eventHandler,
15-
queue: queue,
16-
store: cache.NewStore(keyFunc),
13+
secretsEventChan: secretsEventChan,
14+
logger: logger,
15+
store: cache.NewStore(keyFunc),
1716
}
1817
}
1918

@@ -22,31 +21,32 @@ var _ cache.Store = &SecretsStore{}
2221
// SecretsStore implements cache.Store.
2322
// It invokes the eventhandler for Add, Update, Delete events
2423
type SecretsStore struct {
25-
store cache.Store
26-
queue workqueue.RateLimitingInterface
27-
eventHandler handler.EventHandler
24+
store cache.Store
25+
secretsEventChan chan<- event.GenericEvent
26+
logger logr.Logger
2827
}
2928

3029
// Add adds the given object to the accumulator associated with the given object's key
3130
func (s *SecretsStore) Add(obj interface{}) error {
3231
if err := s.store.Add(obj); err != nil {
3332
return err
3433
}
35-
s.eventHandler.Create(event.CreateEvent{Object: obj.(*corev1.Secret)}, s.queue)
34+
s.logger.V(1).Info("secret created, notifying event handler", "resource", obj)
35+
s.secretsEventChan <- event.GenericEvent{
36+
Object: obj.(*corev1.Secret),
37+
}
3638
return nil
3739
}
3840

3941
// Update updates the given object in the accumulator associated with the given object's key
4042
func (s *SecretsStore) Update(obj interface{}) error {
41-
oldObj, exists, err := s.store.Get(obj)
42-
if err != nil || !exists {
43-
return err
44-
}
4543
if err := s.store.Update(obj); err != nil {
4644
return err
4745
}
48-
updateEvent := event.UpdateEvent{ObjectOld: oldObj.(*corev1.Secret), ObjectNew: obj.(*corev1.Secret)}
49-
s.eventHandler.Update(updateEvent, s.queue)
46+
s.logger.V(1).Info("secret updated, notifying event handler", "resource", obj)
47+
s.secretsEventChan <- event.GenericEvent{
48+
Object: obj.(*corev1.Secret),
49+
}
5050
return nil
5151
}
5252

@@ -55,7 +55,10 @@ func (s *SecretsStore) Delete(obj interface{}) error {
5555
if err := s.store.Delete(obj); err != nil {
5656
return err
5757
}
58-
s.eventHandler.Delete(event.DeleteEvent{Object: obj.(*corev1.Secret)}, s.queue)
58+
s.logger.V(1).Info("secret deleted, notifying event handler", "resource", obj)
59+
s.secretsEventChan <- event.GenericEvent{
60+
Object: obj.(*corev1.Secret),
61+
}
5962
return nil
6063
}
6164

0 commit comments

Comments
 (0)