mirror of https://github.com/k3s-io/k3s
ObjectMeta equivalence in federated controller handlers + update in fed secrets
parent
6e75fa9745
commit
1f5605763f
|
@ -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 (
|
||||||
"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
|
||||||
},
|
},
|
||||||
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)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue