#26 Log info when CR, Secret or ConfigMap has changed

This commit is contained in:
Tomasz Sęk 2019-06-07 10:03:21 +02:00
parent 9f93b904d4
commit 94979d15d1
No known key found for this signature in database
GPG Key ID: DC356D23F6A644D0
3 changed files with 56 additions and 6 deletions

View File

@ -22,3 +22,5 @@ var (
// SchemeBuilder is used to add go types to the GroupVersionKind scheme // SchemeBuilder is used to add go types to the GroupVersionKind scheme
SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion} SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
) )
func (in *Jenkins) GetObjectKind() schema.ObjectKind { return in }

View File

@ -1,16 +1,22 @@
package jenkins package jenkins
import ( 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/controller/jenkins/constants"
"github.com/jenkinsci/kubernetes-operator/pkg/log"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
"sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/event"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/reconcile" "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{} type enqueueRequestForJenkins struct{}
func (e *enqueueRequestForJenkins) Create(evt event.CreateEvent, q workqueue.RateLimitingInterface) { 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) { func (e *enqueueRequestForJenkins) Update(evt event.UpdateEvent, q workqueue.RateLimitingInterface) {
if req := e.getOwnerReconcileRequests(evt.MetaOld); req != nil { req1 := e.getOwnerReconcileRequests(evt.MetaOld)
q.Add(*req) 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 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)
}

View File

@ -65,7 +65,8 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
} }
// Watch for changes to primary resource Jenkins // 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 { if err != nil {
return errors.WithStack(err) return errors.WithStack(err)
} }