diff --git a/federation/pkg/federation-controller/secret/secret_controller.go b/federation/pkg/federation-controller/secret/secret_controller.go index 805f7674571..72cfe7f04c2 100644 --- a/federation/pkg/federation-controller/secret/secret_controller.go +++ b/federation/pkg/federation-controller/secret/secret_controller.go @@ -118,7 +118,7 @@ func NewSecretController(client federation_release_1_4.Interface) *SecretControl controller.NoResyncPeriodFunc(), // Trigger reconcilation whenever something in federated cluster is changed. In most cases it // would be just confirmation that some secret opration suceeded. - util.NewTriggerOnChanges( + util.NewTriggerOnAllChanges( func(obj pkg_runtime.Object) { secretcontroller.deliverSecretObj(obj, secretcontroller.secretReviewDelay, false) }, diff --git a/federation/pkg/federation-controller/util/handlers.go b/federation/pkg/federation-controller/util/handlers.go index 17977d116ce..ff61146f7a3 100644 --- a/federation/pkg/federation-controller/util/handlers.go +++ b/federation/pkg/federation-controller/util/handlers.go @@ -20,6 +20,7 @@ import ( "fmt" "reflect" + api_v1 "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/controller/framework" pkg_runtime "k8s.io/kubernetes/pkg/runtime" ) @@ -67,39 +68,12 @@ func NewTriggerOnMetaAndSpecChanges(triggerFunc func(pkg_runtime.Object)) *frame }, UpdateFunc: func(old, cur interface{}) { curObj := cur.(pkg_runtime.Object) - if !reflect.DeepEqual(getFieldOrPanic(old, "ObjectMeta"), getFieldOrPanic(cur, "ObjectMeta")) || + oldMeta := getFieldOrPanic(old, "ObjectMeta").(api_v1.ObjectMeta) + curMeta := getFieldOrPanic(cur, "ObjectMeta").(api_v1.ObjectMeta) + if !ObjectMetaEquivalent(oldMeta, curMeta) || !reflect.DeepEqual(getFieldOrPanic(old, "Spec"), getFieldOrPanic(cur, "Spec")) { triggerFunc(curObj) } }, } } - -// Returns framework.ResourceEventHandlerFuncs that trigger the given function -// on object add and delete. -func NewTriggerOnChanges(triggerFunc func(pkg_runtime.Object)) *framework.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 &framework.ResourceEventHandlerFuncs{ - DeleteFunc: func(old interface{}) { - oldObj := old.(pkg_runtime.Object) - triggerFunc(oldObj) - }, - AddFunc: func(cur interface{}) { - curObj := cur.(pkg_runtime.Object) - triggerFunc(curObj) - }, - UpdateFunc: func(old, cur interface{}) { - curObj := cur.(pkg_runtime.Object) - if !reflect.DeepEqual(getFieldOrPanic(old, "ObjectMeta"), getFieldOrPanic(cur, "ObjectMeta")) { - triggerFunc(curObj) - } - }, - } -}