diff --git a/controllers/external/tracker.go b/controllers/external/tracker.go index 364e5c48293e..edca28d190f1 100644 --- a/controllers/external/tracker.go +++ b/controllers/external/tracker.go @@ -37,15 +37,16 @@ import ( type ObjectTracker struct { m sync.Map - Controller controller.Controller - Cache cache.Cache - Scheme *runtime.Scheme + Controller controller.Controller + Cache cache.Cache + Scheme *runtime.Scheme + PredicateLogger *logr.Logger } // Watch uses the controller to issue a Watch only if the object hasn't been seen before. func (o *ObjectTracker) Watch(log logr.Logger, obj client.Object, handler handler.EventHandler, p ...predicate.Predicate) error { - if o.Controller == nil || o.Cache == nil || o.Scheme == nil { - return errors.New("all of controller, cache and scheme must be set for object tracker") + if o.Controller == nil || o.Cache == nil || o.Scheme == nil || o.PredicateLogger == nil { + return errors.New("all of Controller, Cache, Scheme and PredicateLogger must be set for object tracker") } gvk := obj.GetObjectKind().GroupVersionKind() @@ -59,7 +60,7 @@ func (o *ObjectTracker) Watch(log logr.Logger, obj client.Object, handler handle o.Cache, obj.DeepCopyObject().(client.Object), handler, - append(p, predicates.ResourceNotPaused(o.Scheme, log))..., + append(p, predicates.ResourceNotPaused(o.Scheme, *o.PredicateLogger))..., )) if err != nil { o.m.Delete(key) diff --git a/controllers/external/tracker_test.go b/controllers/external/tracker_test.go index 6c89db695de6..913b125b40b6 100644 --- a/controllers/external/tracker_test.go +++ b/controllers/external/tracker_test.go @@ -24,6 +24,7 @@ import ( "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/utils/ptr" "sigs.k8s.io/controller-runtime/pkg/cache/informertest" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/log" @@ -66,7 +67,7 @@ func (c *watchCountController) Watch(_ source.Source) error { func TestRetryWatch(t *testing.T) { g := NewWithT(t) ctrl := newWatchCountController(true) - tracker := ObjectTracker{Controller: ctrl, Scheme: runtime.NewScheme(), Cache: &informertest.FakeInformers{}} + tracker := ObjectTracker{Controller: ctrl, Scheme: runtime.NewScheme(), Cache: &informertest.FakeInformers{}, PredicateLogger: ptr.To(logr.New(log.NullLogSink{}))} err := tracker.Watch(logger, &clusterv1.Cluster{}, nil) g.Expect(err).To(HaveOccurred()) @@ -80,7 +81,7 @@ func TestRetryWatch(t *testing.T) { func TestWatchMultipleTimes(t *testing.T) { g := NewWithT(t) ctrl := &watchCountController{} - tracker := ObjectTracker{Controller: ctrl, Scheme: runtime.NewScheme(), Cache: &informertest.FakeInformers{}} + tracker := ObjectTracker{Controller: ctrl, Scheme: runtime.NewScheme(), Cache: &informertest.FakeInformers{}, PredicateLogger: ptr.To(logr.New(log.NullLogSink{}))} obj := &clusterv1.Cluster{ TypeMeta: metav1.TypeMeta{ diff --git a/exp/internal/controllers/machinepool_controller.go b/exp/internal/controllers/machinepool_controller.go index 74e7c603b334..8a441e8a36aa 100644 --- a/exp/internal/controllers/machinepool_controller.go +++ b/exp/internal/controllers/machinepool_controller.go @@ -134,9 +134,10 @@ func (r *MachinePoolReconciler) SetupWithManager(ctx context.Context, mgr ctrl.M r.controller = c r.recorder = mgr.GetEventRecorderFor("machinepool-controller") r.externalTracker = external.ObjectTracker{ - Controller: c, - Cache: mgr.GetCache(), - Scheme: mgr.GetScheme(), + Controller: c, + Cache: mgr.GetCache(), + Scheme: mgr.GetScheme(), + PredicateLogger: &predicateLog, } r.ssaCache = ssa.NewCache() diff --git a/exp/internal/controllers/machinepool_controller_phases_test.go b/exp/internal/controllers/machinepool_controller_phases_test.go index 070a0ef923e2..c4d00b3016d9 100644 --- a/exp/internal/controllers/machinepool_controller_phases_test.go +++ b/exp/internal/controllers/machinepool_controller_phases_test.go @@ -21,6 +21,7 @@ import ( "testing" "time" + "github.com/go-logr/logr" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -33,6 +34,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/cache/informertest" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" + "sigs.k8s.io/controller-runtime/pkg/log" clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/cluster-api/controllers/clustercache" @@ -131,9 +133,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -173,9 +176,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -212,9 +216,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -267,9 +272,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -334,9 +340,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -379,9 +386,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -431,9 +439,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -496,9 +505,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -567,9 +577,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -636,9 +647,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -727,9 +739,10 @@ func TestReconcileMachinePoolPhases(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -1049,9 +1062,10 @@ func TestReconcileMachinePoolBootstrap(t *testing.T) { r := &MachinePoolReconciler{ Client: fakeClient, externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -1349,9 +1363,10 @@ func TestReconcileMachinePoolInfrastructure(t *testing.T) { Client: fakeClient, ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: defaultCluster.Name, Namespace: defaultCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -1437,9 +1452,10 @@ func TestReconcileMachinePoolMachines(t *testing.T) { Client: env, ssaCache: ssa.NewCache(), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: env.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: env.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } scope := &scope{ @@ -1505,9 +1521,10 @@ func TestReconcileMachinePoolMachines(t *testing.T) { Client: env, ssaCache: ssa.NewCache(), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: env.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: env.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -1868,9 +1885,10 @@ func TestReconcileMachinePoolScaleToFromZero(t *testing.T) { ClusterCache: clustercache.NewFakeClusterCache(env.GetClient(), client.ObjectKey{Name: testCluster.Name, Namespace: testCluster.Namespace}), recorder: record.NewFakeRecorder(32), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -1935,9 +1953,10 @@ func TestReconcileMachinePoolScaleToFromZero(t *testing.T) { ClusterCache: clustercache.NewFakeClusterCache(env.GetClient(), client.ObjectKey{Name: testCluster.Name, Namespace: testCluster.Namespace}), recorder: record.NewFakeRecorder(32), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -1985,9 +2004,10 @@ func TestReconcileMachinePoolScaleToFromZero(t *testing.T) { recorder: record.NewFakeRecorder(32), ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: testCluster.Name, Namespace: testCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -2031,9 +2051,10 @@ func TestReconcileMachinePoolScaleToFromZero(t *testing.T) { recorder: record.NewFakeRecorder(32), ClusterCache: clustercache.NewFakeClusterCache(fakeClient, client.ObjectKey{Name: testCluster.Name, Namespace: testCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -2099,9 +2120,10 @@ func TestReconcileMachinePoolScaleToFromZero(t *testing.T) { ClusterCache: clustercache.NewFakeClusterCache(env.GetClient(), client.ObjectKey{Name: testCluster.Name, Namespace: testCluster.Namespace}), recorder: record.NewFakeRecorder(32), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: fakeClient.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: fakeClient.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } diff --git a/exp/internal/controllers/machinepool_controller_test.go b/exp/internal/controllers/machinepool_controller_test.go index 9b4cc6bd8b9c..7f0897c6497a 100644 --- a/exp/internal/controllers/machinepool_controller_test.go +++ b/exp/internal/controllers/machinepool_controller_test.go @@ -22,6 +22,7 @@ import ( "testing" "time" + "github.com/go-logr/logr" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" @@ -36,6 +37,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/client/interceptor" + "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" @@ -601,9 +603,10 @@ func TestReconcileMachinePoolRequest(t *testing.T) { APIReader: clientFake, ClusterCache: clustercache.NewFakeClusterCache(trackerClientFake, client.ObjectKey{Name: testCluster.Name, Namespace: testCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: clientFake.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: clientFake.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -1165,9 +1168,10 @@ func TestMachinePoolConditions(t *testing.T) { APIReader: clientFake, ClusterCache: clustercache.NewFakeClusterCache(clientFake, client.ObjectKey{Name: testCluster.Name, Namespace: testCluster.Namespace}), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: clientFake.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: clientFake.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } diff --git a/internal/controllers/cluster/cluster_controller.go b/internal/controllers/cluster/cluster_controller.go index 1c53908e9180..d04b51deae33 100644 --- a/internal/controllers/cluster/cluster_controller.go +++ b/internal/controllers/cluster/cluster_controller.go @@ -116,9 +116,10 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt r.recorder = mgr.GetEventRecorderFor("cluster-controller") r.externalTracker = external.ObjectTracker{ - Controller: c, - Cache: mgr.GetCache(), - Scheme: mgr.GetScheme(), + Controller: c, + Cache: mgr.GetCache(), + Scheme: mgr.GetScheme(), + PredicateLogger: &predicateLog, } return nil } diff --git a/internal/controllers/cluster/cluster_controller_phases_test.go b/internal/controllers/cluster/cluster_controller_phases_test.go index 0f74c366b1a3..b5d96b92cd9a 100644 --- a/internal/controllers/cluster/cluster_controller_phases_test.go +++ b/internal/controllers/cluster/cluster_controller_phases_test.go @@ -20,15 +20,18 @@ import ( "testing" "time" + "github.com/go-logr/logr" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/client-go/tools/record" + "k8s.io/utils/ptr" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/cache/informertest" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" + "sigs.k8s.io/controller-runtime/pkg/log" clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/cluster-api/controllers/external" @@ -259,9 +262,10 @@ func TestClusterReconcileInfrastructure(t *testing.T) { Client: c, recorder: record.NewFakeRecorder(32), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: c.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: c.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -541,9 +545,10 @@ func TestClusterReconcileControlPlane(t *testing.T) { Client: c, recorder: record.NewFakeRecorder(32), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: c.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: c.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -924,9 +929,10 @@ func TestClusterReconcilePhases_reconcileFailureDomains(t *testing.T) { Client: c, recorder: record.NewFakeRecorder(32), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: c.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: c.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } diff --git a/internal/controllers/machine/machine_controller.go b/internal/controllers/machine/machine_controller.go index af74152c4c3a..4bb7b69076ad 100644 --- a/internal/controllers/machine/machine_controller.go +++ b/internal/controllers/machine/machine_controller.go @@ -171,9 +171,10 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt r.controller = c r.recorder = mgr.GetEventRecorderFor("machine-controller") r.externalTracker = external.ObjectTracker{ - Controller: c, - Cache: mgr.GetCache(), - Scheme: mgr.GetScheme(), + Controller: c, + Cache: mgr.GetCache(), + Scheme: mgr.GetScheme(), + PredicateLogger: &predicateLog, } r.ssaCache = ssa.NewCache() r.reconcileDeleteCache = cache.New[cache.ReconcileEntry]() diff --git a/internal/controllers/machine/machine_controller_phases_test.go b/internal/controllers/machine/machine_controller_phases_test.go index 635ffaa2fafd..57b9f74ccaeb 100644 --- a/internal/controllers/machine/machine_controller_phases_test.go +++ b/internal/controllers/machine/machine_controller_phases_test.go @@ -20,6 +20,7 @@ import ( "testing" "time" + "github.com/go-logr/logr" . "github.com/onsi/gomega" "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" @@ -30,6 +31,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/cache/informertest" "sigs.k8s.io/controller-runtime/pkg/client/fake" + "sigs.k8s.io/controller-runtime/pkg/log" clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" "sigs.k8s.io/cluster-api/controllers/external" @@ -304,9 +306,10 @@ func TestReconcileBootstrap(t *testing.T) { r := &Reconciler{ Client: c, externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: runtime.NewScheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: runtime.NewScheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } s := &scope{cluster: defaultCluster, machine: tc.machine} @@ -861,9 +864,10 @@ func TestReconcileInfrastructure(t *testing.T) { r := &Reconciler{ Client: c, externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: c.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: c.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } s := &scope{cluster: defaultCluster, machine: tc.machine} diff --git a/internal/controllers/machine/machine_controller_test.go b/internal/controllers/machine/machine_controller_test.go index 5ebaebaa5983..e85d8bd9f97a 100644 --- a/internal/controllers/machine/machine_controller_test.go +++ b/internal/controllers/machine/machine_controller_test.go @@ -22,6 +22,7 @@ import ( "testing" "time" + "github.com/go-logr/logr" . "github.com/onsi/gomega" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" @@ -38,6 +39,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/apiutil" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" @@ -951,9 +953,10 @@ func TestReconcileRequest(t *testing.T) { recorder: record.NewFakeRecorder(10), reconcileDeleteCache: cache.New[cache.ReconcileEntry](), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: clientFake.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: clientFake.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } @@ -1242,9 +1245,10 @@ func TestMachineConditions(t *testing.T) { ClusterCache: clustercache.NewFakeClusterCache(clientFake, client.ObjectKey{Name: testCluster.Name, Namespace: testCluster.Namespace}), ssaCache: ssa.NewCache(), externalTracker: external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: clientFake.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: clientFake.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), }, } diff --git a/internal/controllers/topology/cluster/cluster_controller.go b/internal/controllers/topology/cluster/cluster_controller.go index 8eddb3df81b3..ef5ecc179a87 100644 --- a/internal/controllers/topology/cluster/cluster_controller.go +++ b/internal/controllers/topology/cluster/cluster_controller.go @@ -21,17 +21,20 @@ import ( "fmt" "time" + "github.com/go-logr/logr" "github.com/pkg/errors" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/client-go/tools/record" + "k8s.io/utils/ptr" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" "sigs.k8s.io/controller-runtime/pkg/cache/informertest" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" + "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" @@ -86,6 +89,8 @@ type Reconciler struct { desiredStateGenerator desiredstate.Generator patchHelperFactory structuredmerge.PatchHelperFactoryFunc + + predicateLog logr.Logger } func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, options controller.Options) error { @@ -93,11 +98,11 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt return errors.New("Client, APIReader, ClusterCache and RuntimeClient must not be nil") } - predicateLog := ctrl.LoggerFrom(ctx).WithValues("controller", "topology/cluster") + r.predicateLog = ctrl.LoggerFrom(ctx).WithValues("controller", "topology/cluster") c, err := ctrl.NewControllerManagedBy(mgr). For(&clusterv1.Cluster{}, builder.WithPredicates( // Only reconcile Cluster with topology. - predicates.ClusterHasTopology(mgr.GetScheme(), predicateLog), + predicates.ClusterHasTopology(mgr.GetScheme(), r.predicateLog), )). Named("topology/cluster"). WatchesRawSource(r.ClusterCache.GetClusterSource("topology/cluster", func(_ context.Context, o client.Object) []ctrl.Request { @@ -111,16 +116,16 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt &clusterv1.MachineDeployment{}, handler.EnqueueRequestsFromMapFunc(r.machineDeploymentToCluster), // Only trigger Cluster reconciliation if the MachineDeployment is topology owned. - builder.WithPredicates(predicates.ResourceIsTopologyOwned(mgr.GetScheme(), predicateLog)), + builder.WithPredicates(predicates.ResourceIsTopologyOwned(mgr.GetScheme(), r.predicateLog)), ). Watches( &expv1.MachinePool{}, handler.EnqueueRequestsFromMapFunc(r.machinePoolToCluster), // Only trigger Cluster reconciliation if the MachinePool is topology owned. - builder.WithPredicates(predicates.ResourceIsTopologyOwned(mgr.GetScheme(), predicateLog)), + builder.WithPredicates(predicates.ResourceIsTopologyOwned(mgr.GetScheme(), r.predicateLog)), ). WithOptions(options). - WithEventFilter(predicates.ResourceHasFilterLabel(mgr.GetScheme(), predicateLog, r.WatchFilterValue)). + WithEventFilter(predicates.ResourceHasFilterLabel(mgr.GetScheme(), r.predicateLog, r.WatchFilterValue)). Build(r) if err != nil { @@ -128,9 +133,10 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt } r.externalTracker = external.ObjectTracker{ - Controller: c, - Cache: mgr.GetCache(), - Scheme: mgr.GetScheme(), + Controller: c, + Cache: mgr.GetCache(), + Scheme: mgr.GetScheme(), + PredicateLogger: &r.predicateLog, } r.desiredStateGenerator = desiredstate.NewGenerator(r.Client, r.ClusterCache, r.RuntimeClient) r.recorder = mgr.GetEventRecorderFor("topology/cluster-controller") @@ -145,9 +151,10 @@ func (r *Reconciler) SetupForDryRun(recorder record.EventRecorder) { r.desiredStateGenerator = desiredstate.NewGenerator(r.Client, r.ClusterCache, r.RuntimeClient) r.recorder = recorder r.externalTracker = external.ObjectTracker{ - Controller: externalfake.Controller{}, - Cache: &informertest.FakeInformers{}, - Scheme: r.Client.Scheme(), + Controller: externalfake.Controller{}, + Cache: &informertest.FakeInformers{}, + Scheme: r.Client.Scheme(), + PredicateLogger: ptr.To(logr.New(log.NullLogSink{})), } r.patchHelperFactory = dryRunPatchHelperFactory(r.Client) } @@ -313,7 +320,7 @@ func (r *Reconciler) setupDynamicWatches(ctx context.Context, s *scope.Scope) er if err := r.externalTracker.Watch(ctrl.LoggerFrom(ctx), s.Current.InfrastructureCluster, handler.EnqueueRequestForOwner(scheme, r.Client.RESTMapper(), &clusterv1.Cluster{}), // Only trigger Cluster reconciliation if the InfrastructureCluster is topology owned. - predicates.ResourceIsTopologyOwned(scheme, ctrl.LoggerFrom(ctx))); err != nil { + predicates.ResourceIsTopologyOwned(scheme, r.predicateLog)); err != nil { return errors.Wrap(err, "error watching Infrastructure CR") } } @@ -321,7 +328,7 @@ func (r *Reconciler) setupDynamicWatches(ctx context.Context, s *scope.Scope) er if err := r.externalTracker.Watch(ctrl.LoggerFrom(ctx), s.Current.ControlPlane.Object, handler.EnqueueRequestForOwner(scheme, r.Client.RESTMapper(), &clusterv1.Cluster{}), // Only trigger Cluster reconciliation if the ControlPlane is topology owned. - predicates.ResourceIsTopologyOwned(scheme, ctrl.LoggerFrom(ctx))); err != nil { + predicates.ResourceIsTopologyOwned(scheme, r.predicateLog)); err != nil { return errors.Wrap(err, "error watching ControlPlane CR") } } diff --git a/test/infrastructure/docker/exp/internal/controllers/dockermachinepool_controller.go b/test/infrastructure/docker/exp/internal/controllers/dockermachinepool_controller.go index 160178d71176..f019c91d767c 100644 --- a/test/infrastructure/docker/exp/internal/controllers/dockermachinepool_controller.go +++ b/test/infrastructure/docker/exp/internal/controllers/dockermachinepool_controller.go @@ -192,9 +192,10 @@ func (r *DockerMachinePoolReconciler) SetupWithManager(ctx context.Context, mgr r.recorder = mgr.GetEventRecorderFor(dockerMachinePoolControllerName) r.externalTracker = external.ObjectTracker{ - Controller: c, - Cache: mgr.GetCache(), - Scheme: mgr.GetScheme(), + Controller: c, + Cache: mgr.GetCache(), + Scheme: mgr.GetScheme(), + PredicateLogger: &predicateLog, } r.ssaCache = ssa.NewCache()