Skip to content

Commit

Permalink
Remove SetFields from Manager and Controller
Browse files Browse the repository at this point in the history
Signed-off-by: Vince Prignano <vincepri@redhat.com>
  • Loading branch information
vincepri committed Jan 12, 2023
1 parent 4b67697 commit 2bfe2e1
Show file tree
Hide file tree
Showing 12 changed files with 46 additions and 334 deletions.
2 changes: 1 addition & 1 deletion pkg/builder/controller.go
Expand Up @@ -255,7 +255,7 @@ func (blder *Builder) doWatch() error {
allPredicates = append(allPredicates, w.predicates...)

// If the source of this watch is of type *source.Kind, project it.
if srckind, ok := w.src.(source.SyncingSource); ok {
if srckind, ok := w.src.(source.TypedSource); ok {
if w.objectProjection == projectAsMetadata {
if err := source.KindAsPartialMetadata(srckind, blder.mgr.GetScheme()); err != nil {
return err
Expand Down
5 changes: 0 additions & 5 deletions pkg/cluster/cluster.go
Expand Up @@ -37,11 +37,6 @@ import (

// Cluster provides various methods to interact with a cluster.
type Cluster interface {
// SetFields will set any dependencies on an object for which the object has implemented the inject
// interface - e.g. inject.Client.
// Deprecated: use the equivalent Options field to set a field. This method will be removed in v0.10.
SetFields(interface{}) error

// GetConfig returns an initialized Config
GetConfig() *rest.Config

Expand Down
78 changes: 0 additions & 78 deletions pkg/cluster/cluster_test.go
Expand Up @@ -29,11 +29,8 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/rest"
"sigs.k8s.io/controller-runtime/pkg/cache"
"sigs.k8s.io/controller-runtime/pkg/cache/informertest"
"sigs.k8s.io/controller-runtime/pkg/client"
logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
)

var _ = Describe("cluster.Cluster", func() {
Expand Down Expand Up @@ -111,47 +108,6 @@ var _ = Describe("cluster.Cluster", func() {
})
})

Describe("SetFields", func() {
It("should inject field values", func() {
c, err := New(cfg, func(o *Options) {
o.NewCache = func(_ *rest.Config, _ cache.Options) (cache.Cache, error) {
return &informertest.FakeInformers{}, nil
}
})
Expect(err).NotTo(HaveOccurred())

By("Injecting the dependencies")
err = c.SetFields(&injectable{
scheme: func(scheme *runtime.Scheme) error {
defer GinkgoRecover()
Expect(scheme).To(Equal(c.GetScheme()))
return nil
},
client: func(client client.Client) error {
defer GinkgoRecover()
Expect(client).To(Equal(c.GetClient()))
return nil
},
log: func(logger logr.Logger) error {
defer GinkgoRecover()
Expect(logger).To(Equal(logf.RuntimeLog.WithName("cluster")))
return nil
},
})
Expect(err).NotTo(HaveOccurred())

By("Returning an error if dependency injection fails")

expected := fmt.Errorf("expected error")
err = c.SetFields(&injectable{
scheme: func(scheme *runtime.Scheme) error {
return expected
},
})
Expect(err).To(Equal(expected))
})
})

It("should not leak goroutines when stopped", func() {
currentGRs := goleak.IgnoreCurrent()

Expand Down Expand Up @@ -211,37 +167,3 @@ var _ = Describe("cluster.Cluster", func() {
Expect(c.GetAPIReader()).NotTo(BeNil())
})
})

var _ inject.Scheme = &injectable{}
var _ inject.Logger = &injectable{}

type injectable struct {
scheme func(scheme *runtime.Scheme) error
client func(client.Client) error
log func(logger logr.Logger) error
}

func (i *injectable) InjectClient(c client.Client) error {
if i.client == nil {
return nil
}
return i.client(c)
}

func (i *injectable) InjectScheme(scheme *runtime.Scheme) error {
if i.scheme == nil {
return nil
}
return i.scheme(scheme)
}

func (i *injectable) InjectLogger(log logr.Logger) error {
if i.log == nil {
return nil
}
return i.log(log)
}

func (i *injectable) Start(<-chan struct{}) error {
return nil
}
8 changes: 0 additions & 8 deletions pkg/cluster/internal.go
Expand Up @@ -28,7 +28,6 @@ import (
"sigs.k8s.io/controller-runtime/pkg/cache"
"sigs.k8s.io/controller-runtime/pkg/client"
intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
)

type cluster struct {
Expand Down Expand Up @@ -64,13 +63,6 @@ type cluster struct {
logger logr.Logger
}

func (c *cluster) SetFields(i interface{}) error {
if _, err := inject.SchemeInto(c.scheme, i); err != nil {
return err
}
return nil
}

func (c *cluster) GetConfig() *rest.Config {
return c.config
}
Expand Down
5 changes: 0 additions & 5 deletions pkg/controller/controller.go
Expand Up @@ -139,11 +139,6 @@ func NewUnmanaged(name string, mgr manager.Manager, options Options) (Controller
options.RateLimiter = workqueue.DefaultControllerRateLimiter()
}

// Inject dependencies into Reconciler
if err := mgr.SetFields(options.Reconciler); err != nil {
return nil, err
}

if options.RecoverPanic == nil {
options.RecoverPanic = mgr.GetControllerOptions().RecoverPanic
}
Expand Down
24 changes: 0 additions & 24 deletions pkg/controller/controller_test.go
Expand Up @@ -18,14 +18,12 @@ package controller_test

import (
"context"
"fmt"
"time"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"go.uber.org/goleak"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/utils/pointer"

"sigs.k8s.io/controller-runtime/pkg/config/v1alpha1"
Expand Down Expand Up @@ -61,16 +59,6 @@ var _ = Describe("controller.Controller", func() {
Expect(err.Error()).To(ContainSubstring("must specify Reconciler"))
})

It("NewController should return an error if injecting Reconciler fails", func() {
m, err := manager.New(cfg, manager.Options{})
Expect(err).NotTo(HaveOccurred())

c, err := controller.New("foo", m, controller.Options{Reconciler: &failRec{}})
Expect(c).To(BeNil())
Expect(err).To(HaveOccurred())
Expect(err.Error()).To(ContainSubstring("expected error"))
})

It("should not return an error if two controllers are registered with different names", func() {
m, err := manager.New(cfg, manager.Options{})
Expect(err).NotTo(HaveOccurred())
Expand Down Expand Up @@ -223,15 +211,3 @@ var _ = Describe("controller.Controller", func() {
})
})
})

var _ reconcile.Reconciler = &failRec{}

type failRec struct{}

func (*failRec) Reconcile(context.Context, reconcile.Request) (reconcile.Result, error) {
return reconcile.Result{}, nil
}

func (*failRec) InjectScheme(*runtime.Scheme) error {
return fmt.Errorf("expected error")
}
4 changes: 2 additions & 2 deletions pkg/handler/enqueue_owner.go
Expand Up @@ -46,9 +46,9 @@ type OwnerOption func(e *enqueueRequestForOwner)
// - a source.Kind Source with Type of Pod.
//
// - a handler.enqueueRequestForOwner EventHandler with an OwnerType of ReplicaSet and OnlyControllerOwner set to true.
func EnqueueRequestForOwner(scheme *runtime.Scheme, mapper meta.RESTMapper, owner client.Object, opts ...OwnerOption) EventHandler {
func EnqueueRequestForOwner(scheme *runtime.Scheme, mapper meta.RESTMapper, ownerType client.Object, opts ...OwnerOption) EventHandler {
e := &enqueueRequestForOwner{
ownerType: owner,
ownerType: ownerType,
mapper: mapper,
}
if err := e.parseOwnerTypeGroupKind(scheme); err != nil {
Expand Down
8 changes: 4 additions & 4 deletions pkg/manager/internal.go
Expand Up @@ -192,18 +192,18 @@ func (cm *controllerManager) Add(r Runnable) error {

func (cm *controllerManager) add(r Runnable) error {
// Set dependencies on the object
if err := cm.SetFields(r); err != nil {
if err := cm.setFields(r); err != nil {
return err
}
return cm.runnables.Add(r)
}

// Deprecated: use the equivalent Options field to set a field. This method will be removed in v0.10.
func (cm *controllerManager) SetFields(i interface{}) error {
if err := cm.cluster.SetFields(i); err != nil {
func (cm *controllerManager) setFields(i interface{}) error {
if _, err := inject.SchemeInto(cm.cluster.GetScheme(), i); err != nil {
return err
}
if _, err := inject.InjectorInto(cm.SetFields, i); err != nil {
if _, err := inject.InjectorInto(cm.setFields, i); err != nil {
return err
}
if _, err := inject.LoggerInto(cm.logger, i); err != nil {
Expand Down
97 changes: 0 additions & 97 deletions pkg/manager/manager_test.go
Expand Up @@ -51,11 +51,9 @@ import (
intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
"sigs.k8s.io/controller-runtime/pkg/leaderelection"
fakeleaderelection "sigs.k8s.io/controller-runtime/pkg/leaderelection/fake"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/metrics"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/recorder"
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)

Expand Down Expand Up @@ -1516,58 +1514,6 @@ var _ = Describe("manger.Manager", func() {

})
})
Describe("SetFields", func() {
It("should inject field values", func() {
m, err := New(cfg, Options{
NewCache: func(_ *rest.Config, _ cache.Options) (cache.Cache, error) {
return &informertest.FakeInformers{}, nil
},
})
Expect(err).NotTo(HaveOccurred())

By("Injecting the dependencies")
err = m.SetFields(&injectable{
scheme: func(scheme *runtime.Scheme) error {
defer GinkgoRecover()
Expect(scheme).To(Equal(m.GetScheme()))
return nil
},
client: func(client client.Client) error {
defer GinkgoRecover()
Expect(client).To(Equal(m.GetClient()))
return nil
},
f: func(f inject.Func) error {
defer GinkgoRecover()
Expect(f).NotTo(BeNil())
return nil
},
log: func(logger logr.Logger) error {
defer GinkgoRecover()
Expect(logger).To(Equal(log.Log))
return nil
},
})
Expect(err).NotTo(HaveOccurred())

By("Returning an error if dependency injection fails")

expected := fmt.Errorf("expected error")
err = m.SetFields(&injectable{
scheme: func(scheme *runtime.Scheme) error {
return expected
},
})
Expect(err).To(Equal(expected))

err = m.SetFields(&injectable{
f: func(c inject.Func) error {
return expected
},
})
Expect(err).To(Equal(expected))
})
})

It("should not leak goroutines when stopped", func() {
currentGRs := goleak.IgnoreCurrent()
Expand Down Expand Up @@ -1693,49 +1639,6 @@ func (*failRec) InjectScheme(*runtime.Scheme) error {
return fmt.Errorf("expected error")
}

var _ inject.Injector = &injectable{}
var _ inject.Scheme = &injectable{}
var _ inject.Logger = &injectable{}

type injectable struct {
scheme func(scheme *runtime.Scheme) error
client func(client.Client) error
f func(inject.Func) error
log func(logger logr.Logger) error
}

func (i *injectable) InjectClient(c client.Client) error {
if i.client == nil {
return nil
}
return i.client(c)
}

func (i *injectable) InjectScheme(scheme *runtime.Scheme) error {
if i.scheme == nil {
return nil
}
return i.scheme(scheme)
}

func (i *injectable) InjectFunc(f inject.Func) error {
if i.f == nil {
return nil
}
return i.f(f)
}

func (i *injectable) InjectLogger(log logr.Logger) error {
if i.log == nil {
return nil
}
return i.log(log)
}

func (i *injectable) Start(<-chan struct{}) error {
return nil
}

type runnableError struct {
}

Expand Down

0 comments on commit 2bfe2e1

Please sign in to comment.