Files
open-cluster-management/pkg/work/spoke/auth/cache/binding_event_handler.go
Chunlin Yang 6f21760b7e Bump k8s to v0.27.2 (#160)
upgrade to golang 1.20

Signed-off-by: clyang82 <chuyang@redhat.com>
2023-06-06 05:55:07 -04:00

76 lines
2.2 KiB
Go

package cache
import (
rbacapiv1 "k8s.io/api/rbac/v1"
"k8s.io/client-go/tools/cache"
"k8s.io/klog/v2"
)
type roleBindingEventHandler struct {
enqueueUpsertFunc func(key string, subjects []rbacapiv1.Subject)
enqueueDeleteFunc func(key string, subjects []rbacapiv1.Subject)
}
func (h *roleBindingEventHandler) OnAdd(obj interface{}, isInInitialList bool) {
rb, ok := obj.(*rbacapiv1.RoleBinding)
if ok {
key, _ := cache.MetaNamespaceKeyFunc(rb)
h.enqueueUpsertFunc(key, rb.Subjects)
}
}
func (h *roleBindingEventHandler) OnUpdate(oldObj, newObj interface{}) {
h.OnAdd(newObj, false)
}
func (h *roleBindingEventHandler) OnDelete(obj interface{}) {
// For delete event, We will try to get the corresponding executor from the deleted Rolebinding Spec
// and then enqueue it; but when the Rolebinding cannot be obtained after being deleted,
// enqueueDeleteFunc will get the corresponding executor by some other way(e.g. from a cache)
if rb, ok := obj.(*rbacapiv1.RoleBinding); ok {
key, _ := cache.MetaNamespaceKeyFunc(rb)
h.enqueueDeleteFunc(key, rb.Subjects)
return
}
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
if err != nil {
klog.Errorf("Get key for deletion event error %v", err)
return
}
h.enqueueDeleteFunc(key, nil)
}
type clusterRoleBindingEventHandler struct {
enqueueUpsertFunc func(key string, subjects []rbacapiv1.Subject)
enqueueDeleteFunc func(key string, subjects []rbacapiv1.Subject)
}
func (h *clusterRoleBindingEventHandler) OnAdd(obj interface{}, isInInitialList bool) {
crb, ok := obj.(*rbacapiv1.ClusterRoleBinding)
if ok {
key, _ := cache.MetaNamespaceKeyFunc(crb)
h.enqueueUpsertFunc(key, crb.Subjects)
}
}
func (h *clusterRoleBindingEventHandler) OnUpdate(oldObj, newObj interface{}) {
h.OnAdd(newObj, false)
}
func (h *clusterRoleBindingEventHandler) OnDelete(obj interface{}) {
if crb, ok := obj.(*rbacapiv1.ClusterRoleBinding); ok {
key, _ := cache.MetaNamespaceKeyFunc(crb)
h.enqueueDeleteFunc(key, crb.Subjects)
return
}
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
if err != nil {
klog.Errorf("Get key for deletion event error %v", err)
return
}
h.enqueueDeleteFunc(key, nil)
}