我们有一个按预期工作的 k8s 操作符(基于 kubebuilder),现在我们需要支持监听集群上的秘密。
以下代码正在运行,但是我得到了集群中所有秘密的事件,效率不高,
我只想为特定的秘密获取事件,让我们说特定的秘密labels/annotation,我们该怎么做?
func (r *InvReconciler) SetupWithManager(mgr ctrl.Manager) error {
manager := ctrl.NewControllerManagedBy(mgr).
For(&corev1alpha1.Inv{}, builder.WithPredicates(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.AnnotationChangedPredicate{}))).
WithOptions(controller.Options{
})
manager = manager.Watches(&source.Kind{Type: &v1.Secret{}}, handler.EnqueueRequestsFromMapFunc(func(a client.Object) []reconcile.Request {
return r.secretHandler.GetSecret(a.GetNamespace(), a.GetName())
}))
return manager.Complete(r)
}
这是功能
func (secretReq secretHandler) GetSecret(namespace string, name string) []reconcile.Request {
fmt.Println("secret is: ", namespace, "--", name)
return nil
}
让我们像下面这样说秘密,并且只针对这个秘密(带有标签foo: bar)我会在创建或修改事件时得到它
apiVersion: v1
kind: Secret
metadata:
labels:
foo: bar
name: mysecret
namespace: dev
type: Opaque
data:
USER_NAME: YWRtaW4=
PASSWORD: dGVzdBo=
我不是在谈论if statement我得到事件之后的事件,因为它已经将所有秘密事件带到了集群中。
holdtom
烙印99
相关分类