diff --git a/deploy/charts/rook-ceph/templates/clusterrole.yaml b/deploy/charts/rook-ceph/templates/clusterrole.yaml index 289479941..b6def8b83 100644 --- a/deploy/charts/rook-ceph/templates/clusterrole.yaml +++ b/deploy/charts/rook-ceph/templates/clusterrole.yaml @@ -113,6 +113,10 @@ rules: - create - update - delete + # controller-runtime records events in events.k8s.io API group + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: - storage.k8s.io resources: @@ -298,6 +302,9 @@ rules: - list - get - watch + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: - storage.k8s.io resources: @@ -443,6 +450,9 @@ rules: - apiGroups: [""] resources: ["events"] verbs: ["get", "list", "watch", "create", "update", "patch"] + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["csinodes"] verbs: ["get", "list", "watch"] @@ -522,6 +532,9 @@ rules: - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["volumeattachments"] verbs: ["get", "list", "watch", "patch"] @@ -616,6 +629,9 @@ rules: - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["volumeattachments"] verbs: ["get", "list", "watch", "patch"] @@ -705,4 +721,7 @@ rules: - apiGroups: [""] resources: ["secrets", "events"] verbs: ["get", "delete", "update", "create"] + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] {{- end }} diff --git a/deploy/examples/common.yaml b/deploy/examples/common.yaml index abfab6536..e81315f02 100644 --- a/deploy/examples/common.yaml +++ b/deploy/examples/common.yaml @@ -71,6 +71,9 @@ rules: - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["volumeattachments"] verbs: ["get", "list", "watch", "patch"] @@ -129,6 +132,9 @@ rules: - apiGroups: [""] resources: ["secrets", "events"] verbs: ["get", "delete", "update", "create"] + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 @@ -190,6 +196,9 @@ rules: - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["volumeattachments"] verbs: ["get", "list", "watch", "patch"] @@ -334,6 +343,10 @@ rules: - create - update - delete + # controller-runtime records events in events.k8s.io API group + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: - storage.k8s.io resources: @@ -522,6 +535,9 @@ rules: - list - get - watch + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: - storage.k8s.io resources: diff --git a/deploy/examples/csi/nfs/rbac.yaml b/deploy/examples/csi/nfs/rbac.yaml index efb45e90f..4a74678bf 100644 --- a/deploy/examples/csi/nfs/rbac.yaml +++ b/deploy/examples/csi/nfs/rbac.yaml @@ -40,6 +40,9 @@ rules: - apiGroups: [""] resources: ["events"] verbs: ["get", "list", "watch", "create", "update", "patch"] + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["csinodes"] verbs: ["get", "list", "watch"] diff --git a/deploy/examples/csi/nvmeof/provisioner.yaml b/deploy/examples/csi/nvmeof/provisioner.yaml index 225e1cfbb..3d81357e0 100644 --- a/deploy/examples/csi/nvmeof/provisioner.yaml +++ b/deploy/examples/csi/nvmeof/provisioner.yaml @@ -21,6 +21,9 @@ rules: - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] + - apiGroups: ["events.k8s.io"] + resources: ["events"] + verbs: ["create", "patch", "update"] - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "create", "update", "delete", "patch"] diff --git a/go.mod b/go.mod index 99b657dea..7ddfc3ea0 100644 --- a/go.mod +++ b/go.mod @@ -54,7 +54,7 @@ require ( k8s.io/client-go v0.35.0 k8s.io/cloud-provider v0.35.0 k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 - sigs.k8s.io/controller-runtime v0.22.4 + sigs.k8s.io/controller-runtime v0.23.0 sigs.k8s.io/mcs-api v0.3.0 sigs.k8s.io/yaml v1.6.0 ) diff --git a/go.sum b/go.sum index 416325094..0f21e9018 100644 --- a/go.sum +++ b/go.sum @@ -2216,8 +2216,8 @@ rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/controller-runtime v0.2.2/go.mod h1:9dyohw3ZtoXQuV1e766PHUn+cmrRCIcBh6XIMFNMZ+I= -sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A= -sigs.k8s.io/controller-runtime v0.22.4/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8= +sigs.k8s.io/controller-runtime v0.23.0 h1:Ubi7klJWiwEWqDY+odSVZiFA0aDSevOCXpa38yCSYu8= +sigs.k8s.io/controller-runtime v0.23.0/go.mod h1:DBOIr9NsprUqCZ1ZhsuJ0wAnQSIxY/C6VjZbmLgw0j0= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg= diff --git a/pkg/operator/ceph/client/controller.go b/pkg/operator/ceph/client/controller.go index 104f77178..382019270 100644 --- a/pkg/operator/ceph/client/controller.go +++ b/pkg/operator/ceph/client/controller.go @@ -48,7 +48,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/client-go/util/retry" ) @@ -71,7 +71,7 @@ type ReconcileCephClient struct { context *clusterd.Context clusterInfo *cephclient.ClusterInfo opManagerContext context.Context - recorder record.EventRecorder + recorder events.EventRecorder } // Add creates a new CephClient Controller and adds it to the Manager. The Manager will set fields on the Controller @@ -87,7 +87,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont scheme: mgr.GetScheme(), context: context, opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), } } @@ -219,14 +219,14 @@ func (r *ReconcileCephClient) reconcile(request reconcile.Request) (reconcile.Re if err != nil { return reconcile.Result{}, *cephClient, errors.Wrapf(err, "failed to delete ceph client %q", cephClient.Name) } - r.recorder.Eventf(cephClient, v1.EventTypeNormal, string(cephv1.ReconcileStarted), "deleting CephClient %q", cephClient.Name) + r.recorder.Eventf(cephClient, nil, v1.EventTypeNormal, string(cephv1.ReconcileStarted), string(cephv1.ReconcileStarted), "deleting CephClient %q", cephClient.Name) // Remove finalizer err = opcontroller.RemoveFinalizer(r.opManagerContext, r.client, cephClient) if err != nil { return reconcile.Result{}, *cephClient, errors.Wrap(err, "failed to remove finalizer") } - r.recorder.Event(cephClient, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), "successfully removed finalizer") + r.recorder.Eventf(cephClient, nil, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), "successfully removed finalizer") // Return and do not requeue. Successful deletion. return reconcile.Result{}, *cephClient, nil diff --git a/pkg/operator/ceph/client/controller_test.go b/pkg/operator/ceph/client/controller_test.go index 7338fdaa7..331df5c9a 100644 --- a/pkg/operator/ceph/client/controller_test.go +++ b/pkg/operator/ceph/client/controller_test.go @@ -38,7 +38,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" k8sfake "k8s.io/client-go/kubernetes/fake" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -197,7 +197,7 @@ func TestCephClientController(t *testing.T) { scheme: s, context: c, opManagerContext: ctx, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } // Mock request to simulate Reconcile() being called on an event for a @@ -246,7 +246,7 @@ func TestCephClientController(t *testing.T) { scheme: s, context: c, opManagerContext: ctx, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } assert.True(t, res.Requeue) @@ -308,7 +308,7 @@ func TestCephClientController(t *testing.T) { scheme: s, context: c, opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err = r.Reconcile(ctx, req) @@ -660,7 +660,7 @@ func TestKeyRotation(t *testing.T) { scheme: s, context: c, opManagerContext: ctx, - recorder: record.NewFakeRecorder(10), + recorder: events.NewFakeRecorder(50), } req := reconcile.Request{ diff --git a/pkg/operator/ceph/cluster/controller.go b/pkg/operator/ceph/cluster/controller.go index 26849aa95..233782308 100644 --- a/pkg/operator/ceph/cluster/controller.go +++ b/pkg/operator/ceph/cluster/controller.go @@ -45,7 +45,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" apituntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -90,7 +90,7 @@ type ClusterController struct { rookImage string clusterMap sync.Map // map[string]*cluster client client.Client - recorder record.EventRecorder + recorder events.EventRecorder OpManagerCtx context.Context } @@ -115,7 +115,7 @@ func newReconciler(mgr manager.Manager, ctx *clusterd.Context, clusterController // add "rook-" prefix to the controller name to make sure it is clear to all reading the events // that they are coming from Rook. The controller name already has context that it is for Ceph // and from the cluster controller. - clusterController.recorder = mgr.GetEventRecorderFor("rook-" + controllerName) + clusterController.recorder = mgr.GetEventRecorder("rook-" + controllerName) return &ReconcileCephCluster{ client: mgr.GetClient(), @@ -358,7 +358,7 @@ func (r *ReconcileCephCluster) reconcile(request reconcile.Request) (reconcile.R if _, ok := cephCluster.GetLabels()[cephv1.SkipReconcileLabelKey]; ok { log.NamespacedInfo(request.Namespace, logger, "skipping reconcile of CephCluster %q since label %q is set", cephCluster.Name, cephv1.SkipReconcileLabelKey) if r.clusterController.recorder != nil { - r.clusterController.recorder.Eventf(cephCluster, corev1.EventTypeNormal, "ReconcileSkipped", + r.clusterController.recorder.Eventf(cephCluster, nil, corev1.EventTypeNormal, "ReconcileSkipped", "ReconcileSkipped", "Skipping reconcile because label %q is set on the CephCluster", cephv1.SkipReconcileLabelKey) // Extra log (tests/validation): makes it easy to confirm the event emission via operator logs. log.NamespacedInfo(request.Namespace, logger, "recorded event %q for CephCluster %q (label %q is set)", "ReconcileSkipped", cephCluster.Name, cephv1.SkipReconcileLabelKey) diff --git a/pkg/operator/ceph/cluster/controller_test.go b/pkg/operator/ceph/cluster/controller_test.go index 0d6d336cc..93db2473c 100644 --- a/pkg/operator/ceph/cluster/controller_test.go +++ b/pkg/operator/ceph/cluster/controller_test.go @@ -36,7 +36,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" k8sfake "k8s.io/client-go/kubernetes/fake" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" clientfake "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -90,7 +90,7 @@ func TestReconcileDeleteCephCluster(t *testing.T) { // create the cluster controller and tell it that the cluster has been deleted controller := NewClusterController(clusterdCtx, "") - fakeRecorder := record.NewFakeRecorder(5) + fakeRecorder := events.NewFakeRecorder(50) controller.recorder = fakeRecorder // Create a fake client to mock API calls @@ -243,7 +243,7 @@ func TestReconcileSkipsWhenSkipReconcileLabelSet(t *testing.T) { clusterdCtx := &clusterd.Context{} controller := NewClusterController(clusterdCtx, "") - fakeRecorder := record.NewFakeRecorder(5) + fakeRecorder := events.NewFakeRecorder(50) controller.recorder = fakeRecorder // Create a fake client to mock API calls diff --git a/pkg/operator/ceph/cluster/rbd/controller.go b/pkg/operator/ceph/cluster/rbd/controller.go index 423b0e249..b6e43d487 100644 --- a/pkg/operator/ceph/cluster/rbd/controller.go +++ b/pkg/operator/ceph/cluster/rbd/controller.go @@ -38,7 +38,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" @@ -79,7 +79,7 @@ type ReconcileCephRBDMirror struct { peers map[string]*peerSpec opManagerContext context.Context opConfig opcontroller.OperatorConfig - recorder record.EventRecorder + recorder events.EventRecorder shouldRotateCephxKeys bool } @@ -105,7 +105,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont peers: make(map[string]*peerSpec), opConfig: opConfig, opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), } } diff --git a/pkg/operator/ceph/cluster/rbd/controller_test.go b/pkg/operator/ceph/cluster/rbd/controller_test.go index a5fb810cb..d94aaea8c 100644 --- a/pkg/operator/ceph/cluster/rbd/controller_test.go +++ b/pkg/operator/ceph/cluster/rbd/controller_test.go @@ -39,7 +39,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -153,7 +153,7 @@ func TestCephRBDMirrorController(t *testing.T) { cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() // Create a ReconcileCephRBDMirror object with the scheme and fake client. - r := &ReconcileCephRBDMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileCephRBDMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} res, err := r.Reconcile(ctx, req) assert.NoError(t, err) assert.True(t, res.Requeue) @@ -164,7 +164,7 @@ func TestCephRBDMirrorController(t *testing.T) { // Create a fake client to mock API calls. cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() // Create a ReconcileCephRBDMirror object with the scheme and fake client. - r := &ReconcileCephRBDMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileCephRBDMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} res, err := r.Reconcile(ctx, req) assert.NoError(t, err) assert.True(t, res.Requeue) @@ -202,7 +202,7 @@ func TestCephRBDMirrorController(t *testing.T) { context: c, peers: make(map[string]*peerSpec), opManagerContext: ctx, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } rbdMirror.Spec.Peers.SecretNames = []string{peerSecretName} @@ -222,7 +222,7 @@ func TestCephRBDMirrorController(t *testing.T) { context: c, peers: make(map[string]*peerSpec), opManagerContext: ctx, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } bootstrapPeerToken := `eyJmc2lkIjoiYzZiMDg3ZjItNzgyOS00ZGJiLWJjZmMtNTNkYzM0ZTBiMzVkIiwiY2xpZW50X2lkIjoicmJkLW1pcnJvci1wZWVyIiwia2V5IjoiQVFBV1lsWmZVQ1Q2RGhBQVBtVnAwbGtubDA5YVZWS3lyRVV1NEE9PSIsIm1vbl9ob3N0IjoiW3YyOjE5Mi4xNjguMTExLjEwOjMzMDAsdjE6MTkyLjE2OC4xMTEuMTA6Njc4OV0sW3YyOjE5Mi4xNjguMTExLjEyOjMzMDAsdjE6MTkyLjE2OC4xMTEuMTI6Njc4OV0sW3YyOjE5Mi4xNjguMTExLjExOjMzMDAsdjE6MTkyLjE2OC4xMTEuMTE6Njc4OV0ifQ==` //nolint:gosec // This is just a var name, not a real token peerSecret := &v1.Secret{ @@ -348,7 +348,7 @@ func TestMirrorKeyRotation(t *testing.T) { // Create a fake client to mock API calls. cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() - r := &ReconcileCephRBDMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileCephRBDMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} t.Run("first reconcile", func(t *testing.T) { // Mock clusterInfo @@ -379,7 +379,7 @@ func TestMirrorKeyRotation(t *testing.T) { }) t.Run("subsequent reconcile - retain cephx status", func(t *testing.T) { - r := &ReconcileCephRBDMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileCephRBDMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} _, err := r.Reconcile(ctx, req) assert.NoError(t, err) mirror := cephv1.CephRBDMirror{} diff --git a/pkg/operator/ceph/file/controller.go b/pkg/operator/ceph/file/controller.go index 92d4d8f1f..47c5839e6 100644 --- a/pkg/operator/ceph/file/controller.go +++ b/pkg/operator/ceph/file/controller.go @@ -41,7 +41,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -73,7 +73,7 @@ var currentAndDesiredCephVersion = opcontroller.CurrentAndDesiredCephVersion // ReconcileCephFilesystem reconciles a CephFilesystem object type ReconcileCephFilesystem struct { client client.Client - recorder record.EventRecorder + recorder events.EventRecorder scheme *runtime.Scheme context *clusterd.Context cephClusterSpec *cephv1.ClusterSpec @@ -100,7 +100,7 @@ func Add(mgr manager.Manager, context *clusterd.Context, opManagerContext contex func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerContext context.Context, opConfig opcontroller.OperatorConfig) reconcile.Reconciler { return &ReconcileCephFilesystem{ client: mgr.GetClient(), - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), scheme: mgr.GetScheme(), context: context, fsContexts: make(map[string]*fsHealth), diff --git a/pkg/operator/ceph/file/controller_test.go b/pkg/operator/ceph/file/controller_test.go index 342e91469..2a930cfaa 100644 --- a/pkg/operator/ceph/file/controller_test.go +++ b/pkg/operator/ceph/file/controller_test.go @@ -44,7 +44,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -216,7 +216,7 @@ func TestCephFilesystemController(t *testing.T) { // Create a ReconcileCephFilesystem object with the scheme and fake client. r := &ReconcileCephFilesystem{ client: cl, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), scheme: s, context: c, fsContexts: make(map[string]*fsHealth), @@ -264,7 +264,7 @@ func TestCephFilesystemController(t *testing.T) { // Create a ReconcileCephFilesystem object with the scheme and fake client. r = &ReconcileCephFilesystem{ client: cl, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), scheme: s, context: c, fsContexts: make(map[string]*fsHealth), @@ -324,7 +324,7 @@ func TestCephFilesystemController(t *testing.T) { // Create a ReconcileCephFilesystem object with the scheme and fake client. r = &ReconcileCephFilesystem{ client: cl, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), scheme: s, context: c, fsContexts: make(map[string]*fsHealth), @@ -408,7 +408,7 @@ func TestCephFilesystemController(t *testing.T) { assert.NoError(t, err) // Create a ReconcileCephFilesystem object with the scheme and fake client. - fakeRecorder := record.NewFakeRecorder(5) + fakeRecorder := events.NewFakeRecorder(50) r = &ReconcileCephFilesystem{ client: cl, recorder: fakeRecorder, @@ -527,7 +527,7 @@ func TestMdsKeyRotation(t *testing.T) { r := &ReconcileCephFilesystem{ client: cl, - recorder: record.NewFakeRecorder(6), + recorder: events.NewFakeRecorder(50), scheme: s, context: c, fsContexts: make(map[string]*fsHealth), diff --git a/pkg/operator/ceph/file/mirror/controller.go b/pkg/operator/ceph/file/mirror/controller.go index eb052dc4a..d8cb25cc0 100644 --- a/pkg/operator/ceph/file/mirror/controller.go +++ b/pkg/operator/ceph/file/mirror/controller.go @@ -38,7 +38,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" @@ -78,7 +78,7 @@ type ReconcileFilesystemMirror struct { cephClusterSpec *cephv1.ClusterSpec opManagerContext context.Context opConfig opcontroller.OperatorConfig - recorder record.EventRecorder + recorder events.EventRecorder shouldRotateCephxKeys bool } @@ -96,7 +96,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont context: context, opConfig: opConfig, opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), } } @@ -202,7 +202,7 @@ func (r *ReconcileFilesystemMirror) reconcile(request reconcile.Request) (reconc cephCluster, isReadyToReconcile, _, reconcileResponse := opcontroller.IsReadyToReconcile(r.opManagerContext, r.client, request.NamespacedName, controllerName) if !isReadyToReconcile { log.NamedDebug(request.NamespacedName, logger, "CephCluster resource not ready in namespace %q, retrying in %q.", request.NamespacedName.Namespace, reconcileResponse.RequeueAfter.String()) - r.recorder.Event(filesystemMirror, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), "successfully removed finalizer") + r.recorder.Eventf(filesystemMirror, nil, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), "successfully removed finalizer") return reconcileResponse, *filesystemMirror, nil } diff --git a/pkg/operator/ceph/file/mirror/controller_test.go b/pkg/operator/ceph/file/mirror/controller_test.go index 2818c5299..44775311d 100644 --- a/pkg/operator/ceph/file/mirror/controller_test.go +++ b/pkg/operator/ceph/file/mirror/controller_test.go @@ -38,7 +38,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -113,7 +113,7 @@ func TestCephFilesystemMirrorController(t *testing.T) { ServiceAccount: "foo", }, opManagerContext: ctx, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } req := reconcile.Request{ NamespacedName: types.NamespacedName{ @@ -164,7 +164,7 @@ func TestCephFilesystemMirrorController(t *testing.T) { ServiceAccount: "foo", }, opManagerContext: ctx, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) assert.NoError(t, err) @@ -207,7 +207,7 @@ func TestCephFilesystemMirrorController(t *testing.T) { ServiceAccount: "foo", }, opManagerContext: ctx, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) assert.NoError(t, err) @@ -351,7 +351,7 @@ func TestFSMirrorKeyRotation(t *testing.T) { // Create a fake client to mock API calls. cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() - r := &ReconcileFilesystemMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileFilesystemMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} t.Run("first reconcile", func(t *testing.T) { // Mock clusterInfo @@ -382,7 +382,7 @@ func TestFSMirrorKeyRotation(t *testing.T) { }) t.Run("subsequent reconcile - retain cephx status", func(t *testing.T) { - r := &ReconcileFilesystemMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileFilesystemMirror{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} _, err := r.Reconcile(ctx, req) assert.NoError(t, err) fsMirror := cephv1.CephFilesystemMirror{} diff --git a/pkg/operator/ceph/nfs/controller.go b/pkg/operator/ceph/nfs/controller.go index fcec074b0..dc0af0e52 100644 --- a/pkg/operator/ceph/nfs/controller.go +++ b/pkg/operator/ceph/nfs/controller.go @@ -40,7 +40,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" @@ -80,7 +80,7 @@ type ReconcileCephNFS struct { clusterInfo *cephclient.ClusterInfo opManagerContext context.Context opConfig opcontroller.OperatorConfig - recorder record.EventRecorder + recorder events.EventRecorder shouldRotateCephxKeys bool } @@ -98,7 +98,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont context: context, opManagerContext: opManagerContext, opConfig: opConfig, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), } } @@ -226,7 +226,7 @@ func (r *ReconcileCephNFS) reconcile(request reconcile.Request) (reconcile.Resul return reconcile.Result{}, *cephNFS, errors.Wrap(err, "failed to remove finalizer") } - r.recorder.Event(cephNFS, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), "successfully removed finalizer") + r.recorder.Eventf(cephNFS, nil, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), "successfully removed finalizer") // Return and do not requeue. Successful deletion. return reconcile.Result{}, *cephNFS, nil } @@ -244,7 +244,7 @@ func (r *ReconcileCephNFS) reconcile(request reconcile.Request) (reconcile.Resul // DELETE: the CR was deleted if !cephNFS.GetDeletionTimestamp().IsZero() { log.NamedInfo(request.NamespacedName, logger, "deleting ceph nfs") - r.recorder.Eventf(cephNFS, v1.EventTypeNormal, string(cephv1.ReconcileStarted), "deleting CephNFS %q", cephNFS.Name) + r.recorder.Eventf(cephNFS, nil, v1.EventTypeNormal, string(cephv1.ReconcileStarted), string(cephv1.ReconcileStarted), "deleting CephNFS %q", cephNFS.Name) // Detect running Ceph version runningCephVersion, err := cephclient.LeastUptodateDaemonVersion(r.context, r.clusterInfo, config.MonType) @@ -263,7 +263,7 @@ func (r *ReconcileCephNFS) reconcile(request reconcile.Request) (reconcile.Resul if err != nil { return reconcile.Result{}, *cephNFS, errors.Wrap(err, "failed to remove finalizer") } - r.recorder.Event(cephNFS, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), "successfully removed finalizer") + r.recorder.Eventf(cephNFS, nil, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), "successfully removed finalizer") // Return and do not requeue. Successful deletion. return reconcile.Result{}, *cephNFS, nil diff --git a/pkg/operator/ceph/nfs/controller_test.go b/pkg/operator/ceph/nfs/controller_test.go index 24b8da9c5..03bdb3814 100644 --- a/pkg/operator/ceph/nfs/controller_test.go +++ b/pkg/operator/ceph/nfs/controller_test.go @@ -42,7 +42,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -207,7 +207,7 @@ func TestCephNFSController(t *testing.T) { newReconcile := func(clusterCtx *clusterd.Context, cl client.WithWatch) *ReconcileCephNFS { // Create a ReconcileCephNFS object with the scheme and fake client. - return &ReconcileCephNFS{client: cl, scheme: testScheme, context: clusterCtx, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + return &ReconcileCephNFS{client: cl, scheme: testScheme, context: clusterCtx, opManagerContext: ctx, recorder: events.NewFakeRecorder(50),} } // Mock request to simulate Reconcile() being called on an event for a @@ -252,7 +252,7 @@ func TestCephNFSController(t *testing.T) { } cl := newControllerClient(nfs, cephClusterNotReady()) r := newReconcile(cCtx, cl) - fakeRecorder := record.NewFakeRecorder(5) + fakeRecorder := events.NewFakeRecorder(50) r.recorder = fakeRecorder res, err := r.Reconcile(ctx, req) @@ -626,7 +626,7 @@ func TestNFSKeyRotation(t *testing.T) { } cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() - r := &ReconcileCephNFS{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileCephNFS{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50),} req := reconcile.Request{ NamespacedName: types.NamespacedName{ @@ -666,7 +666,7 @@ func TestNFSKeyRotation(t *testing.T) { }) t.Run("subsequent reconcile - retain cephx status", func(t *testing.T) { - r := &ReconcileCephNFS{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileCephNFS{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50),} updateDeploymentAndWait, _ = testopk8s.UpdateDeploymentAndWaitStub() _, err := r.Reconcile(ctx, req) assert.NoError(t, err) diff --git a/pkg/operator/ceph/nvmeof/controller.go b/pkg/operator/ceph/nvmeof/controller.go index caa6eae2a..3368bb0e3 100644 --- a/pkg/operator/ceph/nvmeof/controller.go +++ b/pkg/operator/ceph/nvmeof/controller.go @@ -41,7 +41,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" @@ -79,7 +79,7 @@ type ReconcileCephNVMeOFGateway struct { clusterInfo *cephclient.ClusterInfo opManagerContext context.Context opConfig opcontroller.OperatorConfig - recorder record.EventRecorder + recorder events.EventRecorder shouldRotateCephxKeys bool } @@ -95,7 +95,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont context: context, opManagerContext: opManagerContext, opConfig: opConfig, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), } } @@ -201,7 +201,7 @@ func (r *ReconcileCephNVMeOFGateway) reconcile(request reconcile.Request) (recon if err != nil { return reconcile.Result{}, *cephNVMeOFGateway, errors.Wrap(err, "failed to remove finalizer") } - r.recorder.Event(cephNVMeOFGateway, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), "successfully removed finalizer") + r.recorder.Eventf(cephNVMeOFGateway, nil, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), "successfully removed finalizer") return reconcile.Result{}, *cephNVMeOFGateway, nil } return reconcileResponse, *cephNVMeOFGateway, nil @@ -215,7 +215,7 @@ func (r *ReconcileCephNVMeOFGateway) reconcile(request reconcile.Request) (recon if !cephNVMeOFGateway.GetDeletionTimestamp().IsZero() { logger.Infof("deleting ceph nvmeof gateway %q", cephNVMeOFGateway.Name) - r.recorder.Eventf(cephNVMeOFGateway, v1.EventTypeNormal, string(cephv1.ReconcileStarted), "deleting CephNVMeOFGateway %q", cephNVMeOFGateway.Name) + r.recorder.Eventf(cephNVMeOFGateway, nil, v1.EventTypeNormal, string(cephv1.ReconcileStarted), string(cephv1.ReconcileStarted), "deleting CephNVMeOFGateway %q", cephNVMeOFGateway.Name) runningCephVersion, err := cephclient.LeastUptodateDaemonVersion(r.context, r.clusterInfo, config.MonType) if err != nil { @@ -227,7 +227,7 @@ func (r *ReconcileCephNVMeOFGateway) reconcile(request reconcile.Request) (recon if err != nil { return reconcile.Result{}, *cephNVMeOFGateway, errors.Wrap(err, "failed to remove finalizer") } - r.recorder.Event(cephNVMeOFGateway, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), "successfully removed finalizer") + r.recorder.Eventf(cephNVMeOFGateway, nil, v1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), "successfully removed finalizer") return reconcile.Result{}, *cephNVMeOFGateway, nil } diff --git a/pkg/operator/ceph/nvmeof/controller_test.go b/pkg/operator/ceph/nvmeof/controller_test.go index 2ce57ddfa..fc21dcc0a 100644 --- a/pkg/operator/ceph/nvmeof/controller_test.go +++ b/pkg/operator/ceph/nvmeof/controller_test.go @@ -39,7 +39,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -166,7 +166,7 @@ func TestCephNVMeOFGatewayController(t *testing.T) { } newReconcile := func(clusterCtx *clusterd.Context, cl client.WithWatch) *ReconcileCephNVMeOFGateway { - return &ReconcileCephNVMeOFGateway{client: cl, scheme: testScheme, context: clusterCtx, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + return &ReconcileCephNVMeOFGateway{client: cl, scheme: testScheme, context: clusterCtx, opManagerContext: ctx, recorder: events.NewFakeRecorder(50),} } req := reconcile.Request{ @@ -207,7 +207,7 @@ func TestCephNVMeOFGatewayController(t *testing.T) { nvmeof.Spec.Instances = 0 cl := newControllerClient(nvmeof, cephClusterReady(cCtx)) r := newReconcile(cCtx, cl) - fakeRecorder := record.NewFakeRecorder(5) + fakeRecorder := events.NewFakeRecorder(50) r.recorder = fakeRecorder res, err := r.Reconcile(ctx, req) @@ -227,7 +227,7 @@ func TestCephNVMeOFGatewayController(t *testing.T) { nvmeof.Spec.Group = "" cl := newControllerClient(nvmeof, cephClusterReady(cCtx)) r := newReconcile(cCtx, cl) - fakeRecorder := record.NewFakeRecorder(5) + fakeRecorder := events.NewFakeRecorder(50) r.recorder = fakeRecorder res, err := r.Reconcile(ctx, req) @@ -514,7 +514,7 @@ func TestNVMeOFKeyRotation(t *testing.T) { } cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() - r := &ReconcileCephNVMeOFGateway{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileCephNVMeOFGateway{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50),} req := reconcile.Request{ NamespacedName: types.NamespacedName{ @@ -551,7 +551,7 @@ func TestNVMeOFKeyRotation(t *testing.T) { }) t.Run("subsequent reconcile - retain cephx status", func(t *testing.T) { - r := &ReconcileCephNVMeOFGateway{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileCephNVMeOFGateway{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50),} _, err := r.Reconcile(ctx, req) assert.NoError(t, err) nvmeofResult := cephv1.CephNVMeOFGateway{} diff --git a/pkg/operator/ceph/object/controller.go b/pkg/operator/ceph/object/controller.go index 79b545264..b77345730 100644 --- a/pkg/operator/ceph/object/controller.go +++ b/pkg/operator/ceph/object/controller.go @@ -43,7 +43,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/event" @@ -91,7 +91,7 @@ type ReconcileCephObjectStore struct { context *clusterd.Context clusterSpec *cephv1.ClusterSpec clusterInfo *cephclient.ClusterInfo - recorder record.EventRecorder + recorder events.EventRecorder opManagerContext context.Context opConfig opcontroller.OperatorConfig } @@ -110,7 +110,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont scheme: mgr.GetScheme(), context: context, bktclient: bktclient.NewForConfigOrDie(context.KubeConfig), - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), opManagerContext: opManagerContext, opConfig: opConfig, } diff --git a/pkg/operator/ceph/object/controller_test.go b/pkg/operator/ceph/object/controller_test.go index 606d11758..68c538454 100644 --- a/pkg/operator/ceph/object/controller_test.go +++ b/pkg/operator/ceph/object/controller_test.go @@ -45,7 +45,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -387,7 +387,7 @@ func TestCephObjectStoreController(t *testing.T) { client: cl, scheme: s, context: c, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), opManagerContext: context.TODO(), } @@ -730,7 +730,7 @@ func TestCephObjectStoreControllerMultisite(t *testing.T) { client: cl, scheme: s, context: c, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), opManagerContext: ctx, } @@ -779,7 +779,7 @@ func TestCephObjectStoreControllerMultisite(t *testing.T) { client: cl, scheme: s, context: c, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), opManagerContext: ctx, } @@ -896,7 +896,7 @@ func TestCephObjectExternalStoreController(t *testing.T) { client: cl, scheme: s, context: c, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), opManagerContext: ctx, } @@ -1334,7 +1334,7 @@ func TestKeyRotation(t *testing.T) { client: cl, scheme: s, context: c, - recorder: record.NewFakeRecorder(10), + recorder: events.NewFakeRecorder(50), opManagerContext: ctx, } diff --git a/pkg/operator/ceph/object/cosi/controller.go b/pkg/operator/ceph/object/cosi/controller.go index 00a9e3178..b095a3a9e 100644 --- a/pkg/operator/ceph/object/cosi/controller.go +++ b/pkg/operator/ceph/object/cosi/controller.go @@ -35,7 +35,7 @@ import ( kapiv1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -66,7 +66,7 @@ type ReconcileCephCOSIDriver struct { context *clusterd.Context scheme *runtime.Scheme opManagerContext context.Context - recorder record.EventRecorder + recorder events.EventRecorder } // Add creates a new CephCOSIDriver Controller and adds it to the Manager. The Manager will set fields on the Controller @@ -82,7 +82,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont context: context, scheme: mgr.GetScheme(), opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor(controllerName), + recorder: mgr.GetEventRecorder(controllerName), } } @@ -174,7 +174,7 @@ func (r *ReconcileCephCOSIDriver) reconcile(request reconcile.Request) (reconcil return reconcile.Result{}, *cephCOSIDriver, nil } - r.recorder.Eventf(cephCOSIDriver, kapiv1.EventTypeNormal, "Reconciling", "Reconciling Ceph COSI Driver %q", cephCOSIDriver.Name) + r.recorder.Eventf(cephCOSIDriver, nil, kapiv1.EventTypeNormal, "Reconciling", "Reconciling", "Reconciling Ceph COSI Driver %q", cephCOSIDriver.Name) // Set the default CephCOSIDriver name if not already set if cephCOSIDriver.Name == "" { cephCOSIDriver.Name = CephCOSIDriverName diff --git a/pkg/operator/ceph/object/cosi/controller_test.go b/pkg/operator/ceph/object/cosi/controller_test.go index 6b4e9eba7..94cfbca24 100644 --- a/pkg/operator/ceph/object/cosi/controller_test.go +++ b/pkg/operator/ceph/object/cosi/controller_test.go @@ -18,7 +18,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -68,7 +68,7 @@ func TestCephCOSIDriverController(t *testing.T) { client: cl, scheme: s, context: c, - recorder: &record.FakeRecorder{}, + recorder: events.NewFakeRecorder(50), opManagerContext: ctx, } } diff --git a/pkg/operator/ceph/object/notification/controller.go b/pkg/operator/ceph/object/notification/controller.go index f88569555..eaf31853c 100644 --- a/pkg/operator/ceph/object/notification/controller.go +++ b/pkg/operator/ceph/object/notification/controller.go @@ -39,7 +39,7 @@ import ( kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -67,7 +67,7 @@ type ReconcileNotifications struct { client client.Client context *clusterd.Context opManagerContext context.Context - recorder record.EventRecorder + recorder events.EventRecorder } // Add creates a new CephBucketNotification controller and a new ObjectBucketClaim Controller and adds it to the Manager. @@ -82,7 +82,7 @@ func Add(mgr manager.Manager, context *clusterd.Context, opManagerContext contex client: mgr.GetClient(), context: context, opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor(controllerName), + recorder: mgr.GetEventRecorder(controllerName), }); err != nil { return err } @@ -91,7 +91,7 @@ func Add(mgr manager.Manager, context *clusterd.Context, opManagerContext contex client: mgr.GetClient(), context: context, opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor(controllerName), + recorder: mgr.GetEventRecorder(controllerName), }) } @@ -140,7 +140,7 @@ func (r *ReconcileNotifications) reconcile(request reconcile.Request) (reconcile // fetch the CephBucketNotification instance notification := &cephv1.CephBucketNotification{ObjectMeta: metav1.ObjectMeta{Name: request.Name, Namespace: request.Namespace}} bnName := request.NamespacedName - r.recorder.Eventf(notification, kapiv1.EventTypeNormal, string(cephv1.ReconcileStarted), "Started reconciling CephBucketNotification %q", bnName) + r.recorder.Eventf(notification, nil, kapiv1.EventTypeNormal, string(cephv1.ReconcileStarted), string(cephv1.ReconcileStarted), "Started reconciling CephBucketNotification %q", bnName) err := r.client.Get(r.opManagerContext, request.NamespacedName, notification) if err != nil { if kerrors.IsNotFound(err) { diff --git a/pkg/operator/ceph/object/notification/controller_test.go b/pkg/operator/ceph/object/notification/controller_test.go index 59cd59fbb..cf45ad449 100644 --- a/pkg/operator/ceph/object/notification/controller_test.go +++ b/pkg/operator/ceph/object/notification/controller_test.go @@ -39,7 +39,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -68,7 +68,7 @@ var ( testCtx = context.TODO() testContext *clusterd.Context testScheme = scheme.Scheme - testRecorder = record.NewFakeRecorder(256) + testRecorder = events.NewFakeRecorder(50) getWasInvoked = false createdNotifications []string deletedNotifications []string diff --git a/pkg/operator/ceph/object/notification/obc_label_controller.go b/pkg/operator/ceph/object/notification/obc_label_controller.go index 6f9deb5b3..24c259311 100644 --- a/pkg/operator/ceph/object/notification/obc_label_controller.go +++ b/pkg/operator/ceph/object/notification/obc_label_controller.go @@ -36,7 +36,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/event" @@ -58,7 +58,7 @@ type ReconcileOBCLabels struct { client client.Client context *clusterd.Context opManagerContext context.Context - recorder record.EventRecorder + recorder events.EventRecorder } func obcPredicate[T *bktv1alpha1.ObjectBucketClaim]() predicate.TypedFuncs[T] { @@ -258,7 +258,7 @@ func (r *ReconcileOBCLabels) addNewNotification(p provisioner, ob bktv1alpha1.Ob notification := &cephv1.CephBucketNotification{ObjectMeta: metav1.ObjectMeta{Name: label, Namespace: namespace}} bnName := types.NamespacedName{Namespace: namespace, Name: label} bucketName := types.NamespacedName{Name: ob.Spec.ClaimRef.Name, Namespace: namespace} - r.recorder.Eventf(notification, kapiv1.EventTypeNormal, string(cephv1.ReconcileStarted), "Started reconciling CephBucketNotification %q for ObjectBucketClaim %q", bnName, bucketName) + r.recorder.Eventf(notification, nil, kapiv1.EventTypeNormal, string(cephv1.ReconcileStarted), string(cephv1.ReconcileStarted), "Started reconciling CephBucketNotification %q for ObjectBucketClaim %q", bnName, bucketName) if err := r.client.Get(r.opManagerContext, bnName, notification); err != nil { if kerrors.IsNotFound(err) { return waitForRequeueIfNotificationNotReady, *notification, errors.Wrapf(err, "CephBucketNotification %q not provisioned yet", bnName) diff --git a/pkg/operator/ceph/object/realm/controller.go b/pkg/operator/ceph/object/realm/controller.go index 66da67152..0fef509a5 100644 --- a/pkg/operator/ceph/object/realm/controller.go +++ b/pkg/operator/ceph/object/realm/controller.go @@ -28,7 +28,7 @@ import ( opcontroller "github.com/rook/rook/pkg/operator/ceph/controller" "github.com/rook/rook/pkg/operator/ceph/reporting" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -76,7 +76,7 @@ type ReconcileObjectRealm struct { context *clusterd.Context clusterInfo *cephclient.ClusterInfo opManagerContext context.Context - recorder record.EventRecorder + recorder events.EventRecorder } // Add creates a new CephObjectRealm Controller and adds it to the Manager. The Manager will set fields on the Controller @@ -92,7 +92,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont scheme: mgr.GetScheme(), context: context, opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), } } @@ -168,7 +168,7 @@ func (r *ReconcileObjectRealm) reconcile(request reconcile.Request) (reconcile.R // DELETE: the CR was deleted if !cephObjectRealm.GetDeletionTimestamp().IsZero() { log.NamedDebug(request.NamespacedName, logger, "deleting realm CR") - r.recorder.Eventf(cephObjectRealm, v1.EventTypeNormal, string(cephv1.ReconcileStarted), "deleting CephObjectRealm %q", cephObjectRealm.Name) + r.recorder.Eventf(cephObjectRealm, nil, v1.EventTypeNormal, string(cephv1.ReconcileStarted), string(cephv1.ReconcileStarted), "deleting CephObjectRealm %q", cephObjectRealm.Name) // Return and do not requeue. Successful deletion. return reconcile.Result{}, *cephObjectRealm, nil diff --git a/pkg/operator/ceph/object/realm/controller_test.go b/pkg/operator/ceph/object/realm/controller_test.go index e39df16be..ea6e23071 100644 --- a/pkg/operator/ceph/object/realm/controller_test.go +++ b/pkg/operator/ceph/object/realm/controller_test.go @@ -36,7 +36,7 @@ import ( "k8s.io/apimachinery/pkg/types" k8sfake "k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -99,7 +99,7 @@ func TestCephObjectRealmController(t *testing.T) { // Create a fake client to mock API calls. cl := fake.NewClientBuilder().WithScheme(r.scheme).WithRuntimeObjects(object...).Build() // Create a ReconcileObjectRealm object with the scheme and fake client. - r = &ReconcileObjectRealm{client: cl, scheme: r.scheme, context: r.context, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectRealm{client: cl, scheme: r.scheme, context: r.context, recorder: events.NewFakeRecorder(50)} res, err = r.Reconcile(ctx, req) assert.NoError(t, err) assert.True(t, res.Requeue) @@ -155,7 +155,7 @@ func TestCephObjectRealmController(t *testing.T) { r.context.Executor = executor // Create a ReconcileObjectRealm object with the scheme and fake client. - r = &ReconcileObjectRealm{client: cl, scheme: r.scheme, context: r.context, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectRealm{client: cl, scheme: r.scheme, context: r.context, recorder: events.NewFakeRecorder(50)} res, err = r.Reconcile(ctx, req) assert.NoError(t, err) @@ -257,7 +257,7 @@ func getObjectRealmAndReconcileObjectRealm(t *testing.T) (*ReconcileObjectRealm, cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() // Create a ReconcileObjectRealm object with the scheme and fake client. clusterInfo := cephclient.AdminTestClusterInfo("rook") - r := &ReconcileObjectRealm{client: cl, scheme: s, context: c, clusterInfo: clusterInfo, recorder: record.NewFakeRecorder(5)} + r := &ReconcileObjectRealm{client: cl, scheme: s, context: c, clusterInfo: clusterInfo, recorder: events.NewFakeRecorder(50)} return r, objectRealm } @@ -286,7 +286,7 @@ func TestReconcileObjectRealm_createRealmKeys(t *testing.T) { Clientset: k8sfake.NewClientset(), }, scheme: scheme, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } for _, tName := range []string{"first reconcile", "second reconcile"} { @@ -325,7 +325,7 @@ func TestReconcileObjectRealm_createRealmKeys(t *testing.T) { Clientset: k8sfake.NewClientset(secret), }, scheme: scheme, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } _, err := r.createRealmKeys(realm) diff --git a/pkg/operator/ceph/object/user/controller.go b/pkg/operator/ceph/object/user/controller.go index 6c4823b65..b24f1dfde 100644 --- a/pkg/operator/ceph/object/user/controller.go +++ b/pkg/operator/ceph/object/user/controller.go @@ -33,7 +33,7 @@ import ( "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" @@ -80,7 +80,7 @@ type ReconcileObjectStoreUser struct { cephClusterSpec *cephv1.ClusterSpec clusterInfo *cephclient.ClusterInfo opManagerContext context.Context - recorder record.EventRecorder + recorder events.EventRecorder } // Add creates a new CephObjectStoreUser Controller and adds it to the Manager. The Manager will set fields on the Controller @@ -96,7 +96,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont scheme: mgr.GetScheme(), context: context, opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), } } @@ -300,7 +300,7 @@ func (r *ReconcileObjectStoreUser) reconcile(request reconcile.Request) (reconci if err != nil { return reconcile.Result{}, *cephObjectStoreUser, errors.Wrap(err, "failed to remove finalizer") } - r.recorder.Event(cephObjectStoreUser, corev1.EventTypeNormal, string(cephv1.ReconcileSucceeded), "successfully removed finalizer") + r.recorder.Eventf(cephObjectStoreUser, nil, corev1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), "successfully removed finalizer") // Return and do not requeue. Successful deletion. return reconcile.Result{}, *cephObjectStoreUser, nil @@ -313,7 +313,7 @@ func (r *ReconcileObjectStoreUser) reconcile(request reconcile.Request) (reconci // DELETE: the CR was deleted if !cephObjectStoreUser.GetDeletionTimestamp().IsZero() { log.NamedDebug(request.NamespacedName, logger, "deleting object store user") - r.recorder.Eventf(cephObjectStoreUser, corev1.EventTypeNormal, string(cephv1.ReconcileStarted), "deleting CephObjectStoreUser %q", cephObjectStoreUser.Name) + r.recorder.Eventf(cephObjectStoreUser, nil, corev1.EventTypeNormal, string(cephv1.ReconcileStarted), string(cephv1.ReconcileStarted), "deleting CephObjectStoreUser %q", cephObjectStoreUser.Name) err := r.deleteUser(cephObjectStoreUser) if err != nil { @@ -325,7 +325,7 @@ func (r *ReconcileObjectStoreUser) reconcile(request reconcile.Request) (reconci if err != nil { return reconcile.Result{}, *cephObjectStoreUser, errors.Wrap(err, "failed to remove finalizer") } - r.recorder.Event(cephObjectStoreUser, corev1.EventTypeNormal, string(cephv1.ReconcileSucceeded), "successfully removed finalizer") + r.recorder.Eventf(cephObjectStoreUser, nil, corev1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), "successfully removed finalizer") // Return and do not requeue. Successful deletion. return reconcile.Result{}, *cephObjectStoreUser, nil diff --git a/pkg/operator/ceph/object/user/controller_test.go b/pkg/operator/ceph/object/user/controller_test.go index 10f2b162e..ca28e03c9 100644 --- a/pkg/operator/ceph/object/user/controller_test.go +++ b/pkg/operator/ceph/object/user/controller_test.go @@ -44,7 +44,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -154,7 +154,7 @@ func TestCephObjectStoreUserController(t *testing.T) { // Create a fake client to mock API calls. cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() // Create a ReconcileObjectStoreUser object with the scheme and fake client. - r := &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r := &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} // Mock request to simulate Reconcile() being called on an event for a // watched resource . @@ -189,7 +189,7 @@ func TestCephObjectStoreUserController(t *testing.T) { // Create a fake client to mock API calls. cl = fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() // Create a ReconcileObjectStoreUser object with the scheme and fake client. - r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} res, err := r.Reconcile(ctx, req) assert.NoError(t, err) assert.True(t, res.Requeue) @@ -237,7 +237,7 @@ func TestCephObjectStoreUserController(t *testing.T) { c.Executor = executor // Create a ReconcileObjectStoreUser object with the scheme and fake client. - r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} res, err := r.Reconcile(ctx, req) assert.NoError(t, err) @@ -269,7 +269,7 @@ func TestCephObjectStoreUserController(t *testing.T) { // Create a fake client to mock API calls. cl = fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() // Create a ReconcileObjectStoreUser object with the scheme and fake client. - r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} err := r.client.Get(context.TODO(), types.NamespacedName{Name: store, Namespace: namespace}, cephObjectStore) assert.NoError(t, err, cephObjectStore) @@ -363,7 +363,7 @@ func TestCephObjectStoreUserController(t *testing.T) { }} // Create a user in a different namespace, and where the cephcluster does exist - r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} err := r.client.Create(context.TODO(), rgwPod) assert.NoError(t, err) res, err := r.Reconcile(ctx, req) @@ -373,7 +373,7 @@ func TestCephObjectStoreUserController(t *testing.T) { // Disallow creating a user in a different namespace cephObjectStore.Spec.AllowUsersInNamespaces = []string{} cl = fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() - r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} res, err = r.Reconcile(ctx, req) assert.NoError(t, err) assert.True(t, res.Requeue) @@ -383,7 +383,7 @@ func TestCephObjectStoreUserController(t *testing.T) { cl = fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() // Create a user in a different namespace, but where the cephcluster doesn't exist - r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectStoreUser{client: cl, scheme: s, context: c, opManagerContext: ctx, recorder: events.NewFakeRecorder(50)} res, err = r.Reconcile(ctx, req) assert.NoError(t, err) assert.True(t, res.Requeue) diff --git a/pkg/operator/ceph/object/zone/controller.go b/pkg/operator/ceph/object/zone/controller.go index 0be47ccda..f27716444 100644 --- a/pkg/operator/ceph/object/zone/controller.go +++ b/pkg/operator/ceph/object/zone/controller.go @@ -29,7 +29,7 @@ import ( opcontroller "github.com/rook/rook/pkg/operator/ceph/controller" "github.com/rook/rook/pkg/operator/ceph/reporting" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/manager" @@ -84,7 +84,7 @@ type ReconcileObjectZone struct { clusterInfo *cephclient.ClusterInfo clusterSpec *cephv1.ClusterSpec opManagerContext context.Context - recorder record.EventRecorder + recorder events.EventRecorder } // Add creates a new CephObjectZone Controller and adds it to the Manager. The Manager will set fields on the Controller @@ -100,7 +100,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont scheme: mgr.GetScheme(), context: context, opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), } } diff --git a/pkg/operator/ceph/object/zone/controller_test.go b/pkg/operator/ceph/object/zone/controller_test.go index 87966987b..b453c4b1d 100644 --- a/pkg/operator/ceph/object/zone/controller_test.go +++ b/pkg/operator/ceph/object/zone/controller_test.go @@ -38,7 +38,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -206,7 +206,7 @@ func TestCephObjectZoneController(t *testing.T) { // Create a ReconcileObjectZone object with the scheme and fake client. clusterInfo := cephclient.AdminTestClusterInfo("rook") - r := &ReconcileObjectZone{client: cl, scheme: s, context: c, clusterInfo: clusterInfo, recorder: record.NewFakeRecorder(5)} + r := &ReconcileObjectZone{client: cl, scheme: s, context: c, clusterInfo: clusterInfo, recorder: events.NewFakeRecorder(50)} // Mock request to simulate Reconcile() being called on an event for a // watched resource . @@ -248,7 +248,7 @@ func TestCephObjectZoneController(t *testing.T) { cl = fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() // Create a ReconcileObjectZone object with the scheme and fake client. - r = &ReconcileObjectZone{client: cl, scheme: r.scheme, context: r.context, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectZone{client: cl, scheme: r.scheme, context: r.context, recorder: events.NewFakeRecorder(50)} res, err = r.Reconcile(ctx, req) assert.NoError(t, err) assert.True(t, res.Requeue) @@ -299,7 +299,7 @@ func TestCephObjectZoneController(t *testing.T) { } r.context.Executor = executor - r = &ReconcileObjectZone{client: cl, scheme: r.scheme, context: r.context, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectZone{client: cl, scheme: r.scheme, context: r.context, recorder: events.NewFakeRecorder(50)} res, err = r.Reconcile(ctx, req) assert.NoError(t, err) @@ -364,7 +364,7 @@ func TestCephObjectZoneController(t *testing.T) { cl = fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(object...).Build() - r = &ReconcileObjectZone{client: cl, scheme: s, context: c, clusterInfo: clusterInfo, recorder: record.NewFakeRecorder(5)} + r = &ReconcileObjectZone{client: cl, scheme: s, context: c, clusterInfo: clusterInfo, recorder: events.NewFakeRecorder(50)} err = r.client.Get(context.TODO(), types.NamespacedName{Name: zonegroup, Namespace: namespace}, objectZoneGroup) assert.NoError(t, err, objectZoneGroup) diff --git a/pkg/operator/ceph/pool/controller.go b/pkg/operator/ceph/pool/controller.go index 3d651c42f..bbf031a03 100644 --- a/pkg/operator/ceph/pool/controller.go +++ b/pkg/operator/ceph/pool/controller.go @@ -45,7 +45,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -77,7 +77,7 @@ type ReconcileCephBlockPool struct { clusterInfo *cephclient.ClusterInfo blockPoolContexts map[string]*blockPoolHealth opManagerContext context.Context - recorder record.EventRecorder + recorder events.EventRecorder opConfig opcontroller.OperatorConfig } @@ -101,7 +101,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont context: context, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), opConfig: opConfig, } } @@ -289,7 +289,7 @@ func (r *ReconcileCephBlockPool) reconcile(request reconcile.Request) (reconcile // We must remove it first otherwise the checker will panic since the status/info will be nil r.cancelMirrorMonitoring(cephBlockPool) - r.recorder.Event(cephBlockPool, corev1.EventTypeNormal, string(cephv1.ReconcileStarted), "starting blockpool deletion") + r.recorder.Eventf(cephBlockPool, nil, corev1.EventTypeNormal, string(cephv1.ReconcileStarted), string(cephv1.ReconcileStarted), "starting blockpool deletion") log.NamedInfo(request.NamespacedName, logger, "deleting pool") err = deletePool(r.context, clusterInfo, &poolSpec) @@ -305,11 +305,11 @@ func (r *ReconcileCephBlockPool) reconcile(request reconcile.Request) (reconcile // Remove finalizer err = opcontroller.RemoveFinalizer(r.opManagerContext, r.client, cephBlockPool) if err != nil { - r.recorder.Event(cephBlockPool, corev1.EventTypeWarning, string(cephv1.ReconcileFailed), "failed to remove finalizer") + r.recorder.Eventf(cephBlockPool, nil, corev1.EventTypeWarning, string(cephv1.ReconcileFailed), string(cephv1.ReconcileFailed), "failed to remove finalizer") return opcontroller.ImmediateRetryResult, *cephBlockPool, errors.Wrap(err, "failed to remove finalizer") } - r.recorder.Event(cephBlockPool, corev1.EventTypeNormal, string(cephv1.ReconcileSucceeded), "successfully removed finalizer") + r.recorder.Eventf(cephBlockPool, nil, corev1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), "successfully removed finalizer") // Return and do not requeue. Successful deletion. return reconcile.Result{}, *cephBlockPool, nil diff --git a/pkg/operator/ceph/pool/controller_test.go b/pkg/operator/ceph/pool/controller_test.go index 7c334bbb2..57bf2f29d 100644 --- a/pkg/operator/ceph/pool/controller_test.go +++ b/pkg/operator/ceph/pool/controller_test.go @@ -41,7 +41,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -280,7 +280,7 @@ func TestCephBlockPoolController(t *testing.T) { context: c, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } // Mock request to simulate Reconcile() being called on an event for a @@ -337,7 +337,7 @@ func TestCephBlockPoolController(t *testing.T) { context: c, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) @@ -397,7 +397,7 @@ func TestCephBlockPoolController(t *testing.T) { context: c, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) assert.NoError(t, err) @@ -470,7 +470,7 @@ func TestCephBlockPoolController(t *testing.T) { context: c, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } pool.Spec.Mirroring.Mode = "image" @@ -512,7 +512,7 @@ func TestCephBlockPoolController(t *testing.T) { context: c, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } pool.Spec.Mirroring.Peers.SecretNames = []string{peerSecretName} @@ -550,7 +550,7 @@ func TestCephBlockPoolController(t *testing.T) { context: c, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } pool.Spec.Mirroring.Enabled = false pool.Spec.Mirroring.Mode = "image" @@ -627,7 +627,7 @@ func TestDeletionBlocked(t *testing.T) { context: c, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), clusterInfo: cephclient.AdminTestClusterInfo("mycluster"), } cephCluster := &cephv1.CephCluster{} @@ -737,7 +737,7 @@ func TestIsAnyRadosNamespaceMirrored(t *testing.T) { context: c, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), clusterInfo: cephclient.AdminTestClusterInfo("mycluster"), } @@ -1132,7 +1132,7 @@ func TestMirrorPeerKeyRotationStatus(t *testing.T) { context: c, blockPoolContexts: make(map[string]*blockPoolHealth), opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } t.Setenv("POD_NAME", "test") diff --git a/pkg/operator/ceph/pool/radosnamespace/controller.go b/pkg/operator/ceph/pool/radosnamespace/controller.go index e73aa81d4..913f5e95c 100644 --- a/pkg/operator/ceph/pool/radosnamespace/controller.go +++ b/pkg/operator/ceph/pool/radosnamespace/controller.go @@ -42,7 +42,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" @@ -75,7 +75,7 @@ type ReconcileCephBlockPoolRadosNamespace struct { clusterInfo *cephclient.ClusterInfo radosNamespaceContexts map[string]*mirrorHealth opManagerContext context.Context - recorder record.EventRecorder + recorder events.EventRecorder opConfig opcontroller.OperatorConfig } @@ -110,7 +110,7 @@ func newReconciler(mgr manager.Manager, context *clusterd.Context, opManagerCont context: context, radosNamespaceContexts: make(map[string]*mirrorHealth), opManagerContext: opManagerContext, - recorder: mgr.GetEventRecorderFor("rook-" + controllerName), + recorder: mgr.GetEventRecorder("rook-" + controllerName), opConfig: opConfig, } } diff --git a/pkg/operator/ceph/pool/radosnamespace/controller_test.go b/pkg/operator/ceph/pool/radosnamespace/controller_test.go index 946f6b197..ba64df19a 100644 --- a/pkg/operator/ceph/pool/radosnamespace/controller_test.go +++ b/pkg/operator/ceph/pool/radosnamespace/controller_test.go @@ -37,7 +37,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -118,7 +118,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { context: c, opManagerContext: ctx, opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } // Mock request to simulate Reconcile() being called on an event for a @@ -170,7 +170,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { // Create a ReconcileCephBlockPoolRadosNamespace object with the scheme and fake client. r = &ReconcileCephBlockPoolRadosNamespace{ client: cl, scheme: s, context: c, opManagerContext: context.TODO(), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, } res, err := r.Reconcile(ctx, req) @@ -250,7 +250,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { opManagerContext: context.TODO(), opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, radosNamespaceContexts: make(map[string]*mirrorHealth), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } // Enable CSI @@ -303,7 +303,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { context: c, opManagerContext: ctx, opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } // Enable CSI @@ -374,7 +374,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { opManagerContext: context.TODO(), opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, radosNamespaceContexts: make(map[string]*mirrorHealth), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) @@ -424,7 +424,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { opManagerContext: context.TODO(), opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, radosNamespaceContexts: make(map[string]*mirrorHealth), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) @@ -478,7 +478,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { opManagerContext: context.TODO(), opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, radosNamespaceContexts: make(map[string]*mirrorHealth), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) @@ -532,7 +532,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { opManagerContext: context.TODO(), opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, radosNamespaceContexts: make(map[string]*mirrorHealth), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) @@ -588,7 +588,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { opManagerContext: context.TODO(), opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, radosNamespaceContexts: make(map[string]*mirrorHealth), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) @@ -648,7 +648,7 @@ func TestCephBlockPoolRadosNamespaceController(t *testing.T) { opManagerContext: context.TODO(), opConfig: opcontroller.OperatorConfig{Image: "ceph/ceph:v14.2.9"}, radosNamespaceContexts: make(map[string]*mirrorHealth), - recorder: record.NewFakeRecorder(5), + recorder: events.NewFakeRecorder(50), } res, err := r.Reconcile(ctx, req) diff --git a/pkg/operator/ceph/reporting/reporting.go b/pkg/operator/ceph/reporting/reporting.go index dde20385a..6dede7d02 100644 --- a/pkg/operator/ceph/reporting/reporting.go +++ b/pkg/operator/ceph/reporting/reporting.go @@ -28,7 +28,7 @@ import ( "github.com/rook/rook/pkg/util/dependents" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -113,7 +113,7 @@ func copyObject(obj client.Object) client.Object { // framework's Reconcile() method. func ReportReconcileResult( logger *capnslog.PackageLogger, - recorder record.EventRecorder, + recorder events.EventRecorder, reconcileRequest reconcile.Request, obj client.Object, reconcileResponse reconcile.Result, @@ -147,7 +147,7 @@ func ReportReconcileResult( logger.Errorf("%s", errorMsg) // 2. event - recorder.Event(objCopy, corev1.EventTypeWarning, string(cephv1.ReconcileFailed), errorMsg) + recorder.Eventf(objCopy, nil, corev1.EventTypeWarning, string(cephv1.ReconcileFailed), string(cephv1.ReconcileFailed), errorMsg) if !reconcileResponse.IsZero() { // The framework will requeue immediately if there is an error. If we get an error with @@ -159,7 +159,7 @@ func ReportReconcileResult( } else if reconcileResponse.Requeue { msg := fmt.Sprintf("requeuing %s %q", kind, nsName) logger.Debug(msg) - recorder.Event(objCopy, corev1.EventTypeNormal, string(cephv1.ReconcileRequeuing), msg) + recorder.Eventf(objCopy, nil, corev1.EventTypeNormal, string(cephv1.ReconcileRequeuing), string(cephv1.ReconcileRequeuing), msg) } else { successMsg := fmt.Sprintf("successfully configured %s %q", kind, nsName) @@ -167,7 +167,7 @@ func ReportReconcileResult( logger.Debug(successMsg) // 2. event - recorder.Event(objCopy, corev1.EventTypeNormal, string(cephv1.ReconcileSucceeded), successMsg) + recorder.Eventf(objCopy, nil, corev1.EventTypeNormal, string(cephv1.ReconcileSucceeded), string(cephv1.ReconcileSucceeded), successMsg) } return reconcileResponse, err @@ -238,7 +238,7 @@ func UpdateStatusConditionsWithRetry( // 2. as an event on the object (via the given event recorder) // 3. as a condition on the object (added to the object's conditions list given) func ReportDeletionNotBlockedDueToDependents( - ctx context.Context, logger *capnslog.PackageLogger, client client.Client, recorder record.EventRecorder, obj statusConditionGetter, + ctx context.Context, logger *capnslog.PackageLogger, client client.Client, recorder events.EventRecorder, obj statusConditionGetter, ) { kind, nsName, unblockedCond := GenerateConditionUnblockedDueToDependents(obj) deletingMsg := fmt.Sprintf("deleting %s %q", kind, nsName.String()) @@ -247,7 +247,7 @@ func ReportDeletionNotBlockedDueToDependents( logger.Infof("%s. %s", unblockedCond.Message, deletingMsg) // 2. event - recorder.Event(obj, corev1.EventTypeNormal, string(cephv1.DeletingReason), deletingMsg) + recorder.Eventf(obj, nil, corev1.EventTypeNormal, string(cephv1.DeletingReason), string(cephv1.DeletingReason), deletingMsg) // 3. condition if err := UpdateStatusConditionsWithRetry(ctx, client, obj, nsName, kind, unblockedCond); err != nil { diff --git a/pkg/operator/ceph/reporting/reporting_test.go b/pkg/operator/ceph/reporting/reporting_test.go index 5a9fa7029..40435a494 100644 --- a/pkg/operator/ceph/reporting/reporting_test.go +++ b/pkg/operator/ceph/reporting/reporting_test.go @@ -29,7 +29,7 @@ import ( "github.com/stretchr/testify/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -64,14 +64,14 @@ func Test_objKindOrBestGuess(t *testing.T) { } func TestReportReconcileResult(t *testing.T) { - setupTest := func() (*capnslog.PackageLogger, *bytes.Buffer, *record.FakeRecorder) { + setupTest := func() (*capnslog.PackageLogger, *bytes.Buffer, *events.FakeRecorder) { logBuf := bytes.NewBuffer([]byte{}) logFmt := capnslog.NewLogFormatter(logBuf, "", 0) capnslog.SetFormatter(logFmt) logger := capnslog.NewPackageLogger("github.com/rook/rook", "") capnslog.SetGlobalLogLevel(capnslog.TRACE) - recorder := record.NewFakeRecorder(3) + recorder := events.NewFakeRecorder(50) return logger, logBuf, recorder }