diff --git a/generic/client.go b/generic/client.go index c4d77d6..7ba32c8 100644 --- a/generic/client.go +++ b/generic/client.go @@ -92,22 +92,9 @@ func (c client[T]) Create(ctx context.Context, namespace string, t T) error { return err } -func (c client[T]) Inform(ctx context.Context) { +func (c client[T]) Inform(ctx context.Context, handler cache.ResourceEventHandler) { inf := c.dsif.ForResource(c.gvr).Informer() - inf.AddEventHandler(cache.ResourceEventHandlerFuncs{ - AddFunc: func(obj interface{}) { - key, _ := cache.MetaNamespaceKeyFunc(obj) - log.Println("--> ADD", key) - }, - UpdateFunc: func(_, obj interface{}) { - key, _ := cache.MetaNamespaceKeyFunc(obj) - log.Println("--> UPDATE", key) - }, - DeleteFunc: func(obj interface{}) { - key, _ := cache.MetaNamespaceKeyFunc(obj) - log.Println("--> DELETE", key) - }, - }) + inf.AddEventHandler(handler) go inf.Run(ctx.Done()) if !cache.WaitForNamedCacheSync(c.gvr.String(), ctx.Done(), inf.HasSynced) { log.Println("Failed to wait for caches to sync:"< c.gvr.String()) diff --git a/main.go b/main.go index 7ef578c..f044144 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/clientcmd" ) @@ -45,7 +46,20 @@ func main() { cmc.Start(ctx) // Start an informer to log all adds/updates/deletes for ConfigMaps. - cmc.Inform(ctx) + cmc.Inform(ctx, cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + key, _ := cache.MetaNamespaceKeyFunc(obj) + log.Println("--> ADD", key) + }, + UpdateFunc: func(_, obj interface{}) { + key, _ := cache.MetaNamespaceKeyFunc(obj) + log.Println("--> UPDATE", key) + }, + DeleteFunc: func(obj interface{}) { + key, _ := cache.MetaNamespaceKeyFunc(obj) + log.Println("--> DELETE", key) + }, + }) // Create a ConfigMap, then list ConfigMaps. if err := cmc.Create(ctx, "kube-system", &corev1.ConfigMap{