package certificates import ( acmlisters "gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/client/listers/anthoscertmanager/v1" controllerpkg "gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/controller" logf "gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/logs" "gitbucket.jerxie.com/yangyangxie/AnthosCertManager/pkg/util/predicate" "github.com/go-logr/logr" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/util/workqueue" ) // EnqueueCertificatesForResourceUsingPredicates will return a function // that can be used as an OnAdd handler for a SharedIndexInformer. // It should be used as a handler for resources that are referenced // in some way by Certificates. // The namespace of the object being processed will be used in the List // call when enqueuing Certificate resources. // If no predicate constructors are given, all Certificate resources will be // enqueued on every invocation. func EnqueueCertificatesForResourceUsingPredicates(log logr.Logger, queue workqueue.Interface, lister acmlisters.CertificateLister, selector labels.Selector, predicateBuilders ...predicate.ExtractorFunc) func(obj interface{}) { return func(obj interface{}) { s, ok := obj.(metav1.Object) if !ok { log.V(logf.ErrorLevel).Info("Non-Object type resource passed to EnqueueCertificatesForSecretUsingPredicates") return } // 'Construct' the predicate functions using the given Secret predicates := make(predicate.Funcs, len(predicateBuilders)) for i, b := range predicateBuilders { predicates[i] = b(s.(runtime.Object)) } certs, err := ListCertificatesMatchingPredicates(lister.Certificates(s.GetNamespace()), selector, predicates...) if err != nil { log.Error(err, "Failed listing Certificate resources") return } for _, cert := range certs { key, err := controllerpkg.KeyFunc(cert) if err != nil { log.Error(err, "Error determining 'key' for resource") continue } queue.Add(key) } } }