Files
2020-05-25 18:00:04 +02:00

53 lines
1.3 KiB
Go

package controller
import (
"github.com/sirupsen/logrus"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/util/workqueue"
)
type enqueueWorkHandler struct {
logger logrus.FieldLogger
workQueue workqueue.RateLimitingInterface
}
// OnAdd is called when an object is added to the informers cache.
func (h *enqueueWorkHandler) OnAdd(obj interface{}) {
h.enqueueWork(obj)
}
// OnUpdate is called when an object is updated in the informers cache.
func (h *enqueueWorkHandler) OnUpdate(oldObj interface{}, newObj interface{}) {
oldObjMeta, okOld := oldObj.(metav1.Object)
newObjMeta, okNew := newObj.(metav1.Object)
// This is a resync event, no extra work is needed.
if okOld && okNew && oldObjMeta.GetResourceVersion() == newObjMeta.GetResourceVersion() {
return
}
h.enqueueWork(newObj)
}
// OnDelete is called when an object is removed from the informers cache.
func (h *enqueueWorkHandler) OnDelete(obj interface{}) {
h.enqueueWork(obj)
}
func (h *enqueueWorkHandler) enqueueWork(obj interface{}) {
if _, isService := obj.(*corev1.Service); !isService {
h.workQueue.Add(configRefreshKey)
return
}
key, err := cache.MetaNamespaceKeyFunc(obj)
if err != nil {
h.logger.Errorf("Unable to create a work key for resource %#v", obj)
return
}
h.workQueue.Add(key)
}