Newer
Older
AnthosCertManager / pkg / controller / certificates / informers.go
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)
		}
	}
}