Skip to content

Commit e1c8196

Browse files
committed
Remove SetFields from Manager and Controller
Signed-off-by: Vince Prignano <[email protected]>
1 parent b324b0b commit e1c8196

File tree

13 files changed

+150
-459
lines changed

13 files changed

+150
-459
lines changed

pkg/builder/controller.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"strings"
2323

2424
"github.com/go-logr/logr"
25+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2526
"k8s.io/apimachinery/pkg/runtime/schema"
2627
"k8s.io/klog/v2"
2728

@@ -33,6 +34,7 @@ import (
3334
"sigs.k8s.io/controller-runtime/pkg/predicate"
3435
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3536
"sigs.k8s.io/controller-runtime/pkg/source"
37+
internalsource "sigs.k8s.io/controller-runtime/pkg/source/internal"
3638
)
3739

3840
// Supporting mocking out functions for testing.
@@ -196,16 +198,18 @@ func (blder *Builder) Build(r reconcile.Reconciler) (controller.Controller, erro
196198
return blder.ctrl, nil
197199
}
198200

199-
func (blder *Builder) project(obj client.Object, proj objectProjection) (source.Source, error) {
200-
src := source.Kind(blder.mgr.GetCache(), obj)
201+
func (blder *Builder) project(obj client.Object, proj objectProjection) (client.Object, error) {
201202
switch proj {
202203
case projectAsNormal:
203-
return src, nil
204+
return obj, nil
204205
case projectAsMetadata:
205-
if err := source.KindAsPartialMetadata(src, blder.mgr.GetScheme()); err != nil {
206-
return nil, err
206+
metaObj := &metav1.PartialObjectMetadata{}
207+
gvk, err := getGvk(obj, blder.mgr.GetScheme())
208+
if err != nil {
209+
return nil, fmt.Errorf("unable to determine GVK of %T for a metadata-only watch: %w", obj, err)
207210
}
208-
return src, nil
211+
metaObj.SetGroupVersionKind(gvk)
212+
return metaObj, nil
209213
default:
210214
panic(fmt.Sprintf("unexpected projection type %v on type %T, should not be possible since this is an internal field", proj, obj))
211215
}
@@ -214,10 +218,11 @@ func (blder *Builder) project(obj client.Object, proj objectProjection) (source.
214218
func (blder *Builder) doWatch() error {
215219
// Reconcile type
216220
if blder.forInput.object != nil {
217-
src, err := blder.project(blder.forInput.object, blder.forInput.objectProjection)
221+
obj, err := blder.project(blder.forInput.object, blder.forInput.objectProjection)
218222
if err != nil {
219223
return err
220224
}
225+
src := source.Kind(blder.mgr.GetCache(), obj)
221226
hdler := &handler.EnqueueRequestForObject{}
222227
allPredicates := append(blder.globalPredicates, blder.forInput.predicates...)
223228
if err := blder.ctrl.Watch(src, hdler, allPredicates...); err != nil {
@@ -230,10 +235,11 @@ func (blder *Builder) doWatch() error {
230235
return errors.New("Owns() can only be used together with For()")
231236
}
232237
for _, own := range blder.ownsInput {
233-
src, err := blder.project(own.object, own.objectProjection)
238+
obj, err := blder.project(own.object, own.objectProjection)
234239
if err != nil {
235240
return err
236241
}
242+
src := source.Kind(blder.mgr.GetCache(), obj)
237243
hdler := handler.EnqueueRequestForOwner(
238244
blder.mgr.GetScheme(), blder.mgr.GetRESTMapper(),
239245
blder.forInput.object,
@@ -254,13 +260,13 @@ func (blder *Builder) doWatch() error {
254260
allPredicates := append([]predicate.Predicate(nil), blder.globalPredicates...)
255261
allPredicates = append(allPredicates, w.predicates...)
256262

257-
// If the source of this watch is of type *source.Kind, project it.
258-
if srckind, ok := w.src.(source.SyncingSource); ok {
259-
if w.objectProjection == projectAsMetadata {
260-
if err := source.KindAsPartialMetadata(srckind, blder.mgr.GetScheme()); err != nil {
261-
return err
262-
}
263+
// If the source of this watch is of type Kind, project it.
264+
if srckind, ok := w.src.(*internalsource.Kind); ok {
265+
typeForSrc, err := blder.project(srckind.Type, w.objectProjection)
266+
if err != nil {
267+
return err
263268
}
269+
srckind.Type = typeForSrc
264270
}
265271

266272
if err := blder.ctrl.Watch(w.src, w.eventhandler, allPredicates...); err != nil {

pkg/cluster/cluster.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@ import (
3737

3838
// Cluster provides various methods to interact with a cluster.
3939
type Cluster interface {
40-
// SetFields will set any dependencies on an object for which the object has implemented the inject
41-
// interface - e.g. inject.Client.
42-
// Deprecated: use the equivalent Options field to set a field. This method will be removed in v0.10.
43-
SetFields(interface{}) error
44-
4540
// GetConfig returns an initialized Config
4641
GetConfig() *rest.Config
4742

pkg/cluster/cluster_test.go

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,8 @@ import (
2929
"k8s.io/apimachinery/pkg/runtime"
3030
"k8s.io/client-go/rest"
3131
"sigs.k8s.io/controller-runtime/pkg/cache"
32-
"sigs.k8s.io/controller-runtime/pkg/cache/informertest"
3332
"sigs.k8s.io/controller-runtime/pkg/client"
34-
logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
3533
intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
36-
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
3734
)
3835

3936
var _ = Describe("cluster.Cluster", func() {
@@ -111,47 +108,6 @@ var _ = Describe("cluster.Cluster", func() {
111108
})
112109
})
113110

114-
Describe("SetFields", func() {
115-
It("should inject field values", func() {
116-
c, err := New(cfg, func(o *Options) {
117-
o.NewCache = func(_ *rest.Config, _ cache.Options) (cache.Cache, error) {
118-
return &informertest.FakeInformers{}, nil
119-
}
120-
})
121-
Expect(err).NotTo(HaveOccurred())
122-
123-
By("Injecting the dependencies")
124-
err = c.SetFields(&injectable{
125-
scheme: func(scheme *runtime.Scheme) error {
126-
defer GinkgoRecover()
127-
Expect(scheme).To(Equal(c.GetScheme()))
128-
return nil
129-
},
130-
client: func(client client.Client) error {
131-
defer GinkgoRecover()
132-
Expect(client).To(Equal(c.GetClient()))
133-
return nil
134-
},
135-
log: func(logger logr.Logger) error {
136-
defer GinkgoRecover()
137-
Expect(logger).To(Equal(logf.RuntimeLog.WithName("cluster")))
138-
return nil
139-
},
140-
})
141-
Expect(err).NotTo(HaveOccurred())
142-
143-
By("Returning an error if dependency injection fails")
144-
145-
expected := fmt.Errorf("expected error")
146-
err = c.SetFields(&injectable{
147-
scheme: func(scheme *runtime.Scheme) error {
148-
return expected
149-
},
150-
})
151-
Expect(err).To(Equal(expected))
152-
})
153-
})
154-
155111
It("should not leak goroutines when stopped", func() {
156112
currentGRs := goleak.IgnoreCurrent()
157113

@@ -211,37 +167,3 @@ var _ = Describe("cluster.Cluster", func() {
211167
Expect(c.GetAPIReader()).NotTo(BeNil())
212168
})
213169
})
214-
215-
var _ inject.Scheme = &injectable{}
216-
var _ inject.Logger = &injectable{}
217-
218-
type injectable struct {
219-
scheme func(scheme *runtime.Scheme) error
220-
client func(client.Client) error
221-
log func(logger logr.Logger) error
222-
}
223-
224-
func (i *injectable) InjectClient(c client.Client) error {
225-
if i.client == nil {
226-
return nil
227-
}
228-
return i.client(c)
229-
}
230-
231-
func (i *injectable) InjectScheme(scheme *runtime.Scheme) error {
232-
if i.scheme == nil {
233-
return nil
234-
}
235-
return i.scheme(scheme)
236-
}
237-
238-
func (i *injectable) InjectLogger(log logr.Logger) error {
239-
if i.log == nil {
240-
return nil
241-
}
242-
return i.log(log)
243-
}
244-
245-
func (i *injectable) Start(<-chan struct{}) error {
246-
return nil
247-
}

pkg/cluster/internal.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828
"sigs.k8s.io/controller-runtime/pkg/cache"
2929
"sigs.k8s.io/controller-runtime/pkg/client"
3030
intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
31-
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
3231
)
3332

3433
type cluster struct {
@@ -64,13 +63,6 @@ type cluster struct {
6463
logger logr.Logger
6564
}
6665

67-
func (c *cluster) SetFields(i interface{}) error {
68-
if _, err := inject.SchemeInto(c.scheme, i); err != nil {
69-
return err
70-
}
71-
return nil
72-
}
73-
7466
func (c *cluster) GetConfig() *rest.Config {
7567
return c.config
7668
}

pkg/controller/controller.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,6 @@ func NewUnmanaged(name string, mgr manager.Manager, options Options) (Controller
139139
options.RateLimiter = workqueue.DefaultControllerRateLimiter()
140140
}
141141

142-
// Inject dependencies into Reconciler
143-
if err := mgr.SetFields(options.Reconciler); err != nil {
144-
return nil, err
145-
}
146-
147142
if options.RecoverPanic == nil {
148143
options.RecoverPanic = mgr.GetControllerOptions().RecoverPanic
149144
}

pkg/controller/controller_test.go

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@ package controller_test
1818

1919
import (
2020
"context"
21-
"fmt"
2221
"time"
2322

2423
. "github.com/onsi/ginkgo/v2"
2524
. "github.com/onsi/gomega"
2625
"go.uber.org/goleak"
2726
corev1 "k8s.io/api/core/v1"
28-
"k8s.io/apimachinery/pkg/runtime"
2927
"k8s.io/utils/pointer"
3028

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

64-
It("NewController should return an error if injecting Reconciler fails", func() {
65-
m, err := manager.New(cfg, manager.Options{})
66-
Expect(err).NotTo(HaveOccurred())
67-
68-
c, err := controller.New("foo", m, controller.Options{Reconciler: &failRec{}})
69-
Expect(c).To(BeNil())
70-
Expect(err).To(HaveOccurred())
71-
Expect(err.Error()).To(ContainSubstring("expected error"))
72-
})
73-
7462
It("should not return an error if two controllers are registered with different names", func() {
7563
m, err := manager.New(cfg, manager.Options{})
7664
Expect(err).NotTo(HaveOccurred())
@@ -223,15 +211,3 @@ var _ = Describe("controller.Controller", func() {
223211
})
224212
})
225213
})
226-
227-
var _ reconcile.Reconciler = &failRec{}
228-
229-
type failRec struct{}
230-
231-
func (*failRec) Reconcile(context.Context, reconcile.Request) (reconcile.Result, error) {
232-
return reconcile.Result{}, nil
233-
}
234-
235-
func (*failRec) InjectScheme(*runtime.Scheme) error {
236-
return fmt.Errorf("expected error")
237-
}

pkg/handler/enqueue_owner.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ type OwnerOption func(e *enqueueRequestForOwner)
4646
// - a source.Kind Source with Type of Pod.
4747
//
4848
// - a handler.enqueueRequestForOwner EventHandler with an OwnerType of ReplicaSet and OnlyControllerOwner set to true.
49-
func EnqueueRequestForOwner(scheme *runtime.Scheme, mapper meta.RESTMapper, owner client.Object, opts ...OwnerOption) EventHandler {
49+
func EnqueueRequestForOwner(scheme *runtime.Scheme, mapper meta.RESTMapper, ownerType client.Object, opts ...OwnerOption) EventHandler {
5050
e := &enqueueRequestForOwner{
51-
ownerType: owner,
51+
ownerType: ownerType,
5252
mapper: mapper,
5353
}
5454
if err := e.parseOwnerTypeGroupKind(scheme); err != nil {

pkg/manager/internal.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,18 +192,18 @@ func (cm *controllerManager) Add(r Runnable) error {
192192

193193
func (cm *controllerManager) add(r Runnable) error {
194194
// Set dependencies on the object
195-
if err := cm.SetFields(r); err != nil {
195+
if err := cm.setFields(r); err != nil {
196196
return err
197197
}
198198
return cm.runnables.Add(r)
199199
}
200200

201201
// Deprecated: use the equivalent Options field to set a field. This method will be removed in v0.10.
202-
func (cm *controllerManager) SetFields(i interface{}) error {
203-
if err := cm.cluster.SetFields(i); err != nil {
202+
func (cm *controllerManager) setFields(i interface{}) error {
203+
if _, err := inject.SchemeInto(cm.cluster.GetScheme(), i); err != nil {
204204
return err
205205
}
206-
if _, err := inject.InjectorInto(cm.SetFields, i); err != nil {
206+
if _, err := inject.InjectorInto(cm.setFields, i); err != nil {
207207
return err
208208
}
209209
if _, err := inject.LoggerInto(cm.logger, i); err != nil {

0 commit comments

Comments
 (0)