mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-02 08:17:26 +00:00
Add new ResourceEventHandlerFuncs to federated informer
This commit is contained in:
parent
58b2cce95e
commit
b28f41eb02
@ -77,3 +77,35 @@ func NewTriggerOnMetaAndSpecChanges(triggerFunc func(pkgruntime.Object)) *cache.
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns cache.ResourceEventHandlerFuncs that trigger the given function
|
||||||
|
// on object add/delete or ObjectMeta or given field is updated.
|
||||||
|
func NewTriggerOnMetaAndFieldChanges(field string, triggerFunc func(pkgruntime.Object)) *cache.ResourceEventHandlerFuncs {
|
||||||
|
getFieldOrPanic := func(obj interface{}, fieldName string) interface{} {
|
||||||
|
val := reflect.ValueOf(obj).Elem().FieldByName(fieldName)
|
||||||
|
if val.IsValid() {
|
||||||
|
return val.Interface()
|
||||||
|
} else {
|
||||||
|
panic(fmt.Errorf("field not found: %s", fieldName))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &cache.ResourceEventHandlerFuncs{
|
||||||
|
DeleteFunc: func(old interface{}) {
|
||||||
|
oldObj := old.(pkgruntime.Object)
|
||||||
|
triggerFunc(oldObj)
|
||||||
|
},
|
||||||
|
AddFunc: func(cur interface{}) {
|
||||||
|
curObj := cur.(pkgruntime.Object)
|
||||||
|
triggerFunc(curObj)
|
||||||
|
},
|
||||||
|
UpdateFunc: func(old, cur interface{}) {
|
||||||
|
curObj := cur.(pkgruntime.Object)
|
||||||
|
oldMeta := getFieldOrPanic(old, "ObjectMeta").(metav1.ObjectMeta)
|
||||||
|
curMeta := getFieldOrPanic(cur, "ObjectMeta").(metav1.ObjectMeta)
|
||||||
|
if !ObjectMetaEquivalent(oldMeta, curMeta) ||
|
||||||
|
!reflect.DeepEqual(getFieldOrPanic(old, field), getFieldOrPanic(cur, field)) {
|
||||||
|
triggerFunc(curObj)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user