From 94979d15d11f8fafa323ca0824fc58edcfc25c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20S=C4=99k?= Date: Fri, 7 Jun 2019 10:03:21 +0200 Subject: [PATCH] #26 Log info when CR, Secret or ConfigMap has changed --- pkg/apis/jenkinsio/v1alpha1/register.go | 2 + pkg/controller/jenkins/handler.go | 57 ++++++++++++++++++-- pkg/controller/jenkins/jenkins_controller.go | 3 +- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/pkg/apis/jenkinsio/v1alpha1/register.go b/pkg/apis/jenkinsio/v1alpha1/register.go index 32403ec4..25fc8979 100644 --- a/pkg/apis/jenkinsio/v1alpha1/register.go +++ b/pkg/apis/jenkinsio/v1alpha1/register.go @@ -22,3 +22,5 @@ var ( // SchemeBuilder is used to add go types to the GroupVersionKind scheme SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion} ) + +func (in *Jenkins) GetObjectKind() schema.ObjectKind { return in } diff --git a/pkg/controller/jenkins/handler.go b/pkg/controller/jenkins/handler.go index 11361ef6..b4bf84a4 100644 --- a/pkg/controller/jenkins/handler.go +++ b/pkg/controller/jenkins/handler.go @@ -1,16 +1,22 @@ package jenkins import ( + "fmt" + "reflect" + + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" + "github.com/jenkinsci/kubernetes-operator/pkg/log" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/util/workqueue" "sigs.k8s.io/controller-runtime/pkg/event" + "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) -// enqueueRequestForJenkins enqueues a Request for secrets and configmaps created by jenkins-operator. +// enqueueRequestForJenkins enqueues a Request for Secrets and ConfigMaps created by jenkins-operator. type enqueueRequestForJenkins struct{} func (e *enqueueRequestForJenkins) Create(evt event.CreateEvent, q workqueue.RateLimitingInterface) { @@ -20,11 +26,28 @@ func (e *enqueueRequestForJenkins) Create(evt event.CreateEvent, q workqueue.Rat } func (e *enqueueRequestForJenkins) Update(evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - if req := e.getOwnerReconcileRequests(evt.MetaOld); req != nil { - q.Add(*req) + req1 := e.getOwnerReconcileRequests(evt.MetaOld) + req2 := e.getOwnerReconcileRequests(evt.MetaNew) + + if req1 != nil || req2 != nil { + jenkinsName := "unknown" + if req1 != nil { + jenkinsName = req1.Name + } + if req2 != nil { + jenkinsName = req2.Name + } + + log.Log.WithValues("cr", jenkinsName).Info( + fmt.Sprintf("%T/%s has been updated", evt.ObjectNew, evt.MetaNew.GetName())) } - if req := e.getOwnerReconcileRequests(evt.MetaNew); req != nil { - q.Add(*req) + + if req1 != nil { + q.Add(*req1) + return + } + if req2 != nil { + q.Add(*req2) } } @@ -52,3 +75,27 @@ func (e *enqueueRequestForJenkins) getOwnerReconcileRequests(object metav1.Objec return nil } + +type jenkinsDecorator struct { + handler handler.EventHandler +} + +func (e *jenkinsDecorator) Create(evt event.CreateEvent, q workqueue.RateLimitingInterface) { + e.handler.Create(evt, q) +} + +func (e *jenkinsDecorator) Update(evt event.UpdateEvent, q workqueue.RateLimitingInterface) { + if !reflect.DeepEqual(evt.ObjectOld.(*v1alpha1.Jenkins).Spec, evt.ObjectNew.(*v1alpha1.Jenkins).Spec) { + log.Log.WithValues("cr", evt.MetaNew.GetName()).Info( + fmt.Sprintf("%T/%s has been updated", evt.ObjectNew, evt.MetaNew.GetName())) + } + e.handler.Update(evt, q) +} + +func (e *jenkinsDecorator) Delete(evt event.DeleteEvent, q workqueue.RateLimitingInterface) { + e.handler.Delete(evt, q) +} + +func (e *jenkinsDecorator) Generic(evt event.GenericEvent, q workqueue.RateLimitingInterface) { + e.handler.Generic(evt, q) +} diff --git a/pkg/controller/jenkins/jenkins_controller.go b/pkg/controller/jenkins/jenkins_controller.go index 05a085ab..27dcebdb 100644 --- a/pkg/controller/jenkins/jenkins_controller.go +++ b/pkg/controller/jenkins/jenkins_controller.go @@ -65,7 +65,8 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to primary resource Jenkins - err = c.Watch(&source.Kind{Type: &v1alpha1.Jenkins{}}, &handler.EnqueueRequestForObject{}) + decorator := jenkinsDecorator{handler: &handler.EnqueueRequestForObject{}} + err = c.Watch(&source.Kind{Type: &v1alpha1.Jenkins{}}, &decorator) if err != nil { return errors.WithStack(err) }