我在控制器中使用kubebuilder框架,我想完全忽略给定系统名称空间列表中的事件。我认为谓词必须是最好的选择,因此我有以下代码
...
WithEventFilter(predicate.Funcs{
GenericFunc: func(e event.GenericEvent) bool {
namespace := e.Object.GetNamespace()
if _, ok := systemNs[namespace]; ok {
// ignore events from system namespaces
return false
}
return true
},
}).然而,我仍然接收来自所有名称空间的事件,而不仅仅是我允许的事件。这是谓词的正确和有效的用例吗?
发布于 2021-12-11 16:31:08
根据控制器-运行时
泛型是响应未知类型的事件或以cron或外部触发器请求触发的合成事件调用的,例如调节自动标度或Web钩子。
大多数情况下,协调都是在Create、Update或Delete上触发的,因此您需要对这些事件进行筛选。
WithEventFilter(predicate.Funcs{
CreateFunc: func(e event.CreateEvent) bool {
namespace := e.Object.GetNamespace()
if _, ok := systemNs[namespace]; ok {
// ignore events from system namespaces
return false
}
return true
},
UpdateFunc: func(e event.UpdateEvent) bool {
namespace := e.ObjectNew.GetNamespace()
if _, ok := systemNs[namespace]; ok {
// ignore events from system namespaces
return false
}
return true
},
DeleteFunc: func(e event.DeleteEvent) bool {
namespace := e.Object.GetNamespace()
if _, ok := systemNs[namespace]; ok {
// ignore events from system namespaces
return false
}
return true
},
}).发布于 2022-05-01 07:04:34
NewPredicateFuncs将筛选器应用于所有事件:
WithEventFilter(predicate.NewPredicateFuncs(func(obj client.Object) bool {
_, ok := systemNs[obj.GetNamespace()]
return !ok
})).https://stackoverflow.com/questions/69857103
复制相似问题