k3s/vendor/github.com/rancher/wrangler/pkg/generic/change.go

41 lines
882 B
Go
Raw Normal View History

2019-05-09 22:03:45 +00:00
package generic
import (
"k8s.io/apimachinery/pkg/api/equality"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime"
)
func UpdateOnChange(updater Updater, handler Handler) Handler {
return func(key string, obj runtime.Object) (runtime.Object, error) {
if obj == nil {
return handler(key, nil)
}
copyObj := obj.DeepCopyObject()
newObj, err := handler(key, copyObj)
if newObj != nil {
copyObj = newObj
}
oldMeta, ignoreErr := meta.Accessor(obj)
if ignoreErr != nil {
return copyObj, err
}
newMeta, ignoreErr := meta.Accessor(copyObj)
if ignoreErr != nil {
return copyObj, err
}
if oldMeta.GetResourceVersion() == newMeta.GetResourceVersion() && !equality.Semantic.DeepEqual(obj, copyObj) {
newObj, err := updater(copyObj)
if newObj != nil && err == nil {
copyObj = newObj
}
}
return copyObj, err
}
}