首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跳过某些命名空间的Kubebuilder谓词

跳过某些命名空间的Kubebuilder谓词
EN

Stack Overflow用户
提问于 2021-11-05 17:27:47
回答 2查看 436关注 0票数 1

我在控制器中使用kubebuilder框架,我想完全忽略给定系统名称空间列表中的事件。我认为谓词必须是最好的选择,因此我有以下代码

代码语言:javascript
复制
...

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
            },
}).

然而,我仍然接收来自所有名称空间的事件,而不仅仅是我允许的事件。这是谓词的正确和有效的用例吗?

EN

回答 2

Stack Overflow用户

发布于 2021-12-11 16:31:08

根据控制器-运行时

泛型是响应未知类型的事件或以cron或外部触发器请求触发的合成事件调用的,例如调节自动标度或Web钩子。

大多数情况下,协调都是在CreateUpdateDelete上触发的,因此您需要对这些事件进行筛选。

代码语言:javascript
复制
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
    },
}).
票数 0
EN

Stack Overflow用户

发布于 2022-05-01 07:04:34

NewPredicateFuncs将筛选器应用于所有事件:

代码语言:javascript
复制
WithEventFilter(predicate.NewPredicateFuncs(func(obj client.Object) bool {
    _, ok := systemNs[obj.GetNamespace()]
    return !ok
})).
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69857103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档