Commit 794761f1 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #31224 from mwielgus/hadnlers-fix

Automatic merge from submit-queue ObjectMeta equivalence in federated controller handlers + update in fed secrets Federated secrets should trigger also on data/type update, not only on object meta. cc: @quinton-hoole @kubernetes/sig-cluster-federation
parents c5d56ea3 1f560576
...@@ -118,7 +118,7 @@ func NewSecretController(client federation_release_1_4.Interface) *SecretControl ...@@ -118,7 +118,7 @@ func NewSecretController(client federation_release_1_4.Interface) *SecretControl
controller.NoResyncPeriodFunc(), controller.NoResyncPeriodFunc(),
// Trigger reconcilation whenever something in federated cluster is changed. In most cases it // Trigger reconcilation whenever something in federated cluster is changed. In most cases it
// would be just confirmation that some secret opration suceeded. // would be just confirmation that some secret opration suceeded.
util.NewTriggerOnChanges( util.NewTriggerOnAllChanges(
func(obj pkg_runtime.Object) { func(obj pkg_runtime.Object) {
secretcontroller.deliverSecretObj(obj, secretcontroller.secretReviewDelay, false) secretcontroller.deliverSecretObj(obj, secretcontroller.secretReviewDelay, false)
}, },
......
...@@ -20,6 +20,7 @@ import ( ...@@ -20,6 +20,7 @@ import (
"fmt" "fmt"
"reflect" "reflect"
api_v1 "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/controller/framework" "k8s.io/kubernetes/pkg/controller/framework"
pkg_runtime "k8s.io/kubernetes/pkg/runtime" pkg_runtime "k8s.io/kubernetes/pkg/runtime"
) )
...@@ -67,39 +68,12 @@ func NewTriggerOnMetaAndSpecChanges(triggerFunc func(pkg_runtime.Object)) *frame ...@@ -67,39 +68,12 @@ func NewTriggerOnMetaAndSpecChanges(triggerFunc func(pkg_runtime.Object)) *frame
}, },
UpdateFunc: func(old, cur interface{}) { UpdateFunc: func(old, cur interface{}) {
curObj := cur.(pkg_runtime.Object) 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")) { !reflect.DeepEqual(getFieldOrPanic(old, "Spec"), getFieldOrPanic(cur, "Spec")) {
triggerFunc(curObj) 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)
}
},
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment