1
0
mirror of https://github.com/rancher/norman.git synced 2025-04-28 11:24:47 +00:00
norman/controller/generic_controller.go
Steffan Tucker 1e41884a06
Fix golangci-lint issues
As part of updating dapper files, golangci-lint was set to be used. This
caused a lot of lint issues to crop up, which this fixes.
2022-07-26 10:40:30 -06:00

78 lines
2.2 KiB
Go

package controller
import (
"context"
"time"
"github.com/rancher/lasso/pkg/controller"
"github.com/sirupsen/logrus"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/tools/cache"
)
type HandlerFunc func(key string, obj interface{}) (interface{}, error)
type GenericController interface {
Informer() cache.SharedIndexInformer
AddHandler(ctx context.Context, name string, handler HandlerFunc)
Enqueue(namespace, name string)
EnqueueAfter(namespace, name string, after time.Duration)
}
type genericController struct {
controller controller.SharedController
informer cache.SharedIndexInformer
name string
namespace string
}
func NewGenericController(namespace, name string, controller controller.SharedController) GenericController {
return &genericController{
controller: controller,
informer: controller.Informer(),
name: name,
namespace: namespace,
}
}
func (g *genericController) Informer() cache.SharedIndexInformer {
return g.informer
}
func (g *genericController) Enqueue(namespace, name string) {
g.controller.Enqueue(namespace, name)
}
func (g *genericController) EnqueueAfter(namespace, name string, after time.Duration) {
g.controller.EnqueueAfter(namespace, name, after)
}
func (g *genericController) AddHandler(ctx context.Context, name string, handler HandlerFunc) {
g.controller.RegisterHandler(ctx, name, controller.SharedControllerHandlerFunc(func(key string, obj runtime.Object) (runtime.Object, error) {
if !isNamespace(g.namespace, obj) {
return obj, nil
}
logrus.Tracef("%s calling handler %s %s", g.name, name, key)
result, err := handler(key, obj)
runtimeObject, _ := result.(runtime.Object)
if _, ok := err.(*ForgetError); ok {
logrus.Tracef("%v %v completed with dropped err: %v", g.name, key, err)
return runtimeObject, controller.ErrIgnore
}
return runtimeObject, err
}))
}
func isNamespace(namespace string, obj runtime.Object) bool {
if namespace == "" || obj == nil {
return true
}
meta, err := meta.Accessor(obj)
if err != nil {
// if you can't figure out the namespace, just let it through
return true
}
return meta.GetNamespace() == namespace
}