From c6c498338abeff40ad7274954e7129a8153a6937 Mon Sep 17 00:00:00 2001 From: James Munnelly Date: Thu, 28 Feb 2019 22:25:19 +0000 Subject: [PATCH] Update clusterissuers controller Signed-off-by: James Munnelly --- pkg/controller/clusterissuers/BUILD.bazel | 4 +- pkg/controller/clusterissuers/controller.go | 56 ++++++++++++--------- pkg/controller/clusterissuers/sync.go | 6 ++- 3 files changed, 38 insertions(+), 28 deletions(-) diff --git a/pkg/controller/clusterissuers/BUILD.bazel b/pkg/controller/clusterissuers/BUILD.bazel index 267feaf55..6e27cc66b 100644 --- a/pkg/controller/clusterissuers/BUILD.bazel +++ b/pkg/controller/clusterissuers/BUILD.bazel @@ -16,17 +16,15 @@ go_library( "//pkg/client/listers/certmanager/v1alpha1:go_default_library", "//pkg/controller:go_default_library", "//pkg/issuer:go_default_library", - "//pkg/util:go_default_library", + "//pkg/logs:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/client-go/listers/core/v1:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/client-go/util/workqueue:go_default_library", - "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/pkg/controller/clusterissuers/controller.go b/pkg/controller/clusterissuers/controller.go index ad0132a24..49bcce1bb 100644 --- a/pkg/controller/clusterissuers/controller.go +++ b/pkg/controller/clusterissuers/controller.go @@ -24,20 +24,19 @@ import ( corev1 "k8s.io/api/core/v1" k8sErrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" - "k8s.io/klog" cmlisters "github.com/jetstack/cert-manager/pkg/client/listers/certmanager/v1alpha1" controllerpkg "github.com/jetstack/cert-manager/pkg/controller" "github.com/jetstack/cert-manager/pkg/issuer" - "github.com/jetstack/cert-manager/pkg/util" + logf "github.com/jetstack/cert-manager/pkg/logs" ) type Controller struct { + ctx context.Context controllerpkg.Context issuerFactory issuer.IssuerFactory @@ -66,28 +65,34 @@ func New(ctx *controllerpkg.Context) *Controller { ctrl.watchedInformers = append(ctrl.watchedInformers, secretsInformer.Informer().HasSynced) ctrl.secretLister = secretsInformer.Lister() ctrl.issuerFactory = issuer.NewIssuerFactory(ctx) + ctrl.ctx = logf.NewContext(ctx.RootContext, nil, ControllerName) return ctrl } // TODO: replace with generic handleObjet function (like Navigator) func (c *Controller) secretDeleted(obj interface{}) { + log := logf.FromContext(c.ctx, "secretDeleted") + var secret *corev1.Secret var ok bool secret, ok = obj.(*corev1.Secret) if !ok { - runtime.HandleError(fmt.Errorf("Object was not a Secret object %#v", obj)) + log.Error(nil, "object was not a Secret object") return } + log = logf.WithResource(log, secret) + issuers, err := c.issuersForSecret(secret) if err != nil { - runtime.HandleError(fmt.Errorf("Error looking up issuers observing Secret: %s/%s", secret.Namespace, secret.Name)) + log.Error(err, "error looking up issuers observing secret") return } for _, iss := range issuers { + log := logf.WithRelatedResource(log, iss) key, err := keyFunc(iss) if err != nil { - runtime.HandleError(err) + log.Error(err, "error computing key for resource") continue } c.queue.AddRateLimited(key) @@ -95,7 +100,11 @@ func (c *Controller) secretDeleted(obj interface{}) { } func (c *Controller) Run(workers int, stopCh <-chan struct{}) error { - klog.V(4).Infof("Starting %s control loop", ControllerName) + ctx, cancel := context.WithCancel(c.ctx) + defer cancel() + log := logf.FromContext(ctx) + + log.Info("starting control loop") // wait for all the informer caches we depend on are synced if !cache.WaitForCacheSync(stopCh, c.watchedInformers...) { // TODO: replace with Errorf call to glog @@ -108,20 +117,21 @@ func (c *Controller) Run(workers int, stopCh <-chan struct{}) error { // TODO (@munnerz): make time.Second duration configurable go wait.Until(func() { defer wg.Done() - c.worker(stopCh) + c.worker(ctx) }, time.Second, stopCh) } <-stopCh - klog.V(4).Infof("Shutting down queue as workqueue signaled shutdown") + log.V(logf.DebugLevel).Info("shutting down queue as workqueue signaled shutdown") c.queue.ShutDown() - klog.V(4).Infof("Waiting for workers to exit...") + log.V(logf.DebugLevel).Info("waiting for workers to exit...") wg.Wait() - klog.V(4).Infof("Workers exited.") + log.V(logf.DebugLevel).Info("workers exited.") return nil } -func (c *Controller) worker(stopCh <-chan struct{}) { - klog.V(4).Infof("Starting %q worker", ControllerName) +func (c *Controller) worker(ctx context.Context) { + log := logf.FromContext(ctx) + log.V(logf.DebugLevel).Info("starting worker") for { obj, shutdown := c.queue.Get() if shutdown { @@ -136,40 +146,40 @@ func (c *Controller) worker(stopCh <-chan struct{}) { if key, ok = obj.(string); !ok { return } - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - ctx = util.ContextWithStopCh(ctx, stopCh) - klog.Infof("%s controller: syncing item '%s'", ControllerName, key) + log := log.WithValues("key", key) + log.Info("syncing resource") if err := c.syncHandler(ctx, key); err != nil { - klog.Errorf("%s controller: Re-queuing item %q due to error processing: %s", ControllerName, key, err.Error()) + log.Error(err, "re-queuing item due to error processing") c.queue.AddRateLimited(obj) return } - klog.Infof("%s controller: Finished processing work item %q", ControllerName, key) + log.Info("finished processing work item") c.queue.Forget(obj) }() } - klog.V(4).Infof("Exiting %q worker loop", ControllerName) + log.V(logf.DebugLevel).Info("exiting worker loop") } func (c *Controller) processNextWorkItem(ctx context.Context, key string) error { + log := logf.FromContext(ctx) + _, name, err := cache.SplitMetaNamespaceKey(key) if err != nil { - runtime.HandleError(fmt.Errorf("invalid resource key: %s", key)) + log.Error(nil, "invalid resource key") return nil } issuer, err := c.clusterIssuerLister.Get(name) - if err != nil { if k8sErrors.IsNotFound(err) { - runtime.HandleError(fmt.Errorf("issuer %q in work queue no longer exists", key)) + log.Error(err, "clusterissuer in work queue no longer exists") return nil } return err } + ctx = logf.NewContext(ctx, logf.WithResource(log, issuer)) return c.Sync(ctx, issuer) } diff --git a/pkg/controller/clusterissuers/sync.go b/pkg/controller/clusterissuers/sync.go index 3e0193682..ba0e014d8 100644 --- a/pkg/controller/clusterissuers/sync.go +++ b/pkg/controller/clusterissuers/sync.go @@ -23,11 +23,11 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/klog" apiutil "github.com/jetstack/cert-manager/pkg/api/util" "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1alpha1" "github.com/jetstack/cert-manager/pkg/apis/certmanager/validation" + logf "github.com/jetstack/cert-manager/pkg/logs" ) const ( @@ -38,6 +38,8 @@ const ( ) func (c *Controller) Sync(ctx context.Context, iss *v1alpha1.ClusterIssuer) (err error) { + log := logf.FromContext(ctx) + issuerCopy := iss.DeepCopy() defer func() { if _, saveErr := c.updateIssuerStatus(iss, issuerCopy); saveErr != nil { @@ -71,7 +73,7 @@ func (c *Controller) Sync(ctx context.Context, iss *v1alpha1.ClusterIssuer) (err err = i.Setup(ctx) if err != nil { s := messageErrorInitIssuer + err.Error() - klog.Info(s) + log.Error(err, "error setting up issuer") c.Recorder.Event(issuerCopy, v1.EventTypeWarning, errorInitIssuer, s) return err }