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