diff --git a/controllers/deactivation/deactivation_controller.go b/controllers/deactivation/deactivation_controller.go index d7252b45e..c3ce167f3 100644 --- a/controllers/deactivation/deactivation_controller.go +++ b/controllers/deactivation/deactivation_controller.go @@ -27,7 +27,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" ) // SetupWithManager sets up the controller with the Manager. @@ -35,7 +34,7 @@ func (r *Reconciler) SetupWithManager(mgr manager.Manager) error { return ctrl.NewControllerManagedBy(mgr). Named("deactivation"). For(&toolchainv1alpha1.MasterUserRecord{}, builder.WithPredicates(CreateAndUpdateOnlyPredicate{})). - Watches(&source.Kind{Type: &toolchainv1alpha1.UserSignup{}}, + Watches(&toolchainv1alpha1.UserSignup{}, handler.EnqueueRequestsFromMapFunc(MapUserSignupToMasterUserRecord())). Complete(r) } @@ -194,7 +193,6 @@ func (r *Reconciler) Reconcile(ctx context.Context, request ctrl.Request) (ctrl. // If the usersignup state hasn't been set to deactivating, then set it now if !states.Deactivating(usersignup) { - states.SetDeactivating(usersignup, true) // Before we update the UserSignup in order to set the deactivating state, we should reset the scheduled // deactivation time if required just in case the current value is nil or has somehow changed. Since the UserSignup @@ -208,6 +206,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, request ctrl.Request) (ctrl. } logger.Info("setting usersignup state to deactivating") + states.SetDeactivating(usersignup, true) if err := r.Client.Update(ctx, usersignup); err != nil { logger.Error(err, "failed to update usersignup") return reconcile.Result{}, err diff --git a/controllers/deactivation/deactivation_controller_test.go b/controllers/deactivation/deactivation_controller_test.go index a1cb2fddc..4e23b3a10 100644 --- a/controllers/deactivation/deactivation_controller_test.go +++ b/controllers/deactivation/deactivation_controller_test.go @@ -27,7 +27,6 @@ import ( "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -164,7 +163,7 @@ func TestReconcile(t *testing.T) { r, req, fakeClient := prepareReconcile(t, mur.Name, userTier30, mur, userSignupFoobar, config) - fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("mock error") @@ -261,7 +260,7 @@ func TestReconcile(t *testing.T) { r, req, cl := prepareReconcile(t, mur.Name, userTier30, mur, userSignupRedhat, config) // First cause the status update to fail - cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("mock error") @@ -310,7 +309,7 @@ func TestReconcile(t *testing.T) { r, req, cl := prepareReconcile(t, mur.Name, userTier30, mur, userSignupFoobar, config) // First cause the status update to fail - cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("mock error") @@ -350,7 +349,7 @@ func TestReconcile(t *testing.T) { r, req, cl := prepareReconcile(t, mur.Name, userTier30, mur, userSignupFoobar, config) // First cause the status update to fail - cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("mock error") @@ -405,7 +404,7 @@ func TestReconcile(t *testing.T) { r, req, cl := prepareReconcile(t, mur.Name, userTier30, mur, userSignupFoobar, config) // First cause the status update to fail - cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("mock error") @@ -659,7 +658,7 @@ func TestReconcile(t *testing.T) { require.False(t, states.Deactivating(userSignupFoobar)) // Mock client which returns an error when the update fails - fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("mock error") @@ -806,7 +805,7 @@ func TestAutomaticDeactivation(t *testing.T) { require.True(t, states.Deactivated(reloaded)) } -func prepareReconcile(t *testing.T, name string, initObjs ...runtime.Object) (reconcile.Reconciler, reconcile.Request, *commontest.FakeClient) { +func prepareReconcile(t *testing.T, name string, initObjs ...runtimeclient.Object) (reconcile.Reconciler, reconcile.Request, *commontest.FakeClient) { os.Setenv("WATCH_NAMESPACE", commontest.HostOperatorNs) metrics.Reset() s := scheme.Scheme diff --git a/controllers/deactivation/mapper.go b/controllers/deactivation/mapper.go index ff8fa6a21..529d61430 100644 --- a/controllers/deactivation/mapper.go +++ b/controllers/deactivation/mapper.go @@ -1,6 +1,7 @@ package deactivation import ( + "context" "errors" toolchainv1alpha1 "github.com/codeready-toolchain/api/api/v1alpha1" @@ -13,8 +14,8 @@ import ( var mapperLog = ctrl.Log.WithName("UserSignupToMasterUserRecordMapper") -func MapUserSignupToMasterUserRecord() func(object runtimeclient.Object) []reconcile.Request { - return func(obj runtimeclient.Object) []reconcile.Request { +func MapUserSignupToMasterUserRecord() func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { if userSignup, ok := obj.(*toolchainv1alpha1.UserSignup); ok { if userSignup.Status.CompliantUsername != "" { diff --git a/controllers/deactivation/mapper_test.go b/controllers/deactivation/mapper_test.go index 46390de45..f1b73899a 100644 --- a/controllers/deactivation/mapper_test.go +++ b/controllers/deactivation/mapper_test.go @@ -1,6 +1,7 @@ package deactivation import ( + "context" "testing" toolchainv1alpha1 "github.com/codeready-toolchain/api/api/v1alpha1" @@ -28,7 +29,7 @@ func TestUserSignupToMasterUserRecordMapper(t *testing.T) { } // when - req := MapUserSignupToMasterUserRecord()(userSignup) + req := MapUserSignupToMasterUserRecord()(context.TODO(), userSignup) // then require.Len(t, req, 1) @@ -53,7 +54,7 @@ func TestUserSignupToMasterUserRecordMapper(t *testing.T) { } // when - req := MapUserSignupToMasterUserRecord()(userSignup) + req := MapUserSignupToMasterUserRecord()(context.TODO(), userSignup) // then require.Empty(t, req) @@ -76,7 +77,7 @@ func TestUserSignupToMasterUserRecordMapper(t *testing.T) { } // when - req := MapUserSignupToMasterUserRecord()(mur) + req := MapUserSignupToMasterUserRecord()(context.TODO(), mur) // then require.Empty(t, req) diff --git a/controllers/masteruserrecord/mapper.go b/controllers/masteruserrecord/mapper.go index 36a070315..8b394e57f 100644 --- a/controllers/masteruserrecord/mapper.go +++ b/controllers/masteruserrecord/mapper.go @@ -11,8 +11,8 @@ import ( ) // MapSpaceToMasterUserRecord maps events on Spaces to MasterUserRecords by labels at SpaceBindings -func MapSpaceToMasterUserRecord(cl runtimeclient.Client) func(object runtimeclient.Object) []reconcile.Request { - return func(obj runtimeclient.Object) []reconcile.Request { +func MapSpaceToMasterUserRecord(cl runtimeclient.Client) func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { var logger = ctrl.Log.WithName("SpaceToMasterUserRecordMapper").WithValues("object-name", obj.GetName(), "object-kind", obj.GetObjectKind()) spaceBindings := &toolchainv1alpha1.SpaceBindingList{} err := cl.List(context.TODO(), spaceBindings, diff --git a/controllers/masteruserrecord/mapper_test.go b/controllers/masteruserrecord/mapper_test.go index ddc6bf34b..a0e36b6ae 100644 --- a/controllers/masteruserrecord/mapper_test.go +++ b/controllers/masteruserrecord/mapper_test.go @@ -26,7 +26,7 @@ func TestBannedUserToUserSignupMapper(t *testing.T) { client := test.NewFakeClient(t, spaceBinding, noise) // when - requests := MapSpaceToMasterUserRecord(client)(space) + requests := MapSpaceToMasterUserRecord(client)(context.TODO(), space) // then assert.Len(t, requests, 1) @@ -38,7 +38,7 @@ func TestBannedUserToUserSignupMapper(t *testing.T) { client := test.NewFakeClient(t, spaceBinding, spaceBindingJane, noise) // when - requests := MapSpaceToMasterUserRecord(client)(space) + requests := MapSpaceToMasterUserRecord(client)(context.TODO(), space) // then assert.Len(t, requests, 2) @@ -51,7 +51,7 @@ func TestBannedUserToUserSignupMapper(t *testing.T) { client := test.NewFakeClient(t, noise) // when - requests := MapSpaceToMasterUserRecord(client)(space) + requests := MapSpaceToMasterUserRecord(client)(context.TODO(), space) // then assert.Empty(t, requests) @@ -65,7 +65,7 @@ func TestBannedUserToUserSignupMapper(t *testing.T) { } // when - requests := MapSpaceToMasterUserRecord(client)(space) + requests := MapSpaceToMasterUserRecord(client)(context.TODO(), space) // then assert.Empty(t, requests) diff --git a/controllers/masteruserrecord/masteruserrecord_controller.go b/controllers/masteruserrecord/masteruserrecord_controller.go index 035af063e..c3ae9ec6b 100644 --- a/controllers/masteruserrecord/masteruserrecord_controller.go +++ b/controllers/masteruserrecord/masteruserrecord_controller.go @@ -40,14 +40,14 @@ const ( func (r *Reconciler) SetupWithManager(mgr manager.Manager, memberClusters map[string]cluster.Cluster) error { b := ctrl.NewControllerManagedBy(mgr). For(&toolchainv1alpha1.MasterUserRecord{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})). - Watches(&source.Kind{Type: &toolchainv1alpha1.SpaceBinding{}}, handler.EnqueueRequestsFromMapFunc( + Watches(&toolchainv1alpha1.SpaceBinding{}, handler.EnqueueRequestsFromMapFunc( controllers.MapToOwnerByLabel(r.Namespace, toolchainv1alpha1.SpaceBindingMasterUserRecordLabelKey))). - Watches(&source.Kind{Type: &toolchainv1alpha1.Space{}}, handler.EnqueueRequestsFromMapFunc( + Watches(&toolchainv1alpha1.Space{}, handler.EnqueueRequestsFromMapFunc( MapSpaceToMasterUserRecord(r.Client)), builder.WithPredicates(predicate.GenerationChangedPredicate{})) // watch UserAccounts in all the member clusters for _, memberCluster := range memberClusters { - b = b.Watches(source.NewKindWithCache(&toolchainv1alpha1.UserAccount{}, memberCluster.Cache), + b = b.WatchesRawSource(source.Kind(memberCluster.Cache, &toolchainv1alpha1.UserAccount{}), handler.EnqueueRequestsFromMapFunc(mapper.MapByResourceName(r.Namespace)), ) } diff --git a/controllers/masteruserrecord/masteruserrecord_controller_test.go b/controllers/masteruserrecord/masteruserrecord_controller_test.go index 48fd5bad4..8d2bec21e 100644 --- a/controllers/masteruserrecord/masteruserrecord_controller_test.go +++ b/controllers/masteruserrecord/masteruserrecord_controller_test.go @@ -896,7 +896,7 @@ func TestCreateSynchronizeOrDeleteUserAccountFailed(t *testing.T) { hostClient := commontest.NewFakeClient(t, provisionedMur, toolchainStatus, spaceBinding, space) InitializeCounters(t, toolchainStatus) - hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { hostClient.MockStatusUpdate = nil // mock only once return fmt.Errorf("unable to update MUR %s", provisionedMur.Name) } @@ -1236,8 +1236,7 @@ func TestDeleteUserAccountViaMasterUserRecordBeingDeleted(t *testing.T) { s := apiScheme(t) mur := murtest.NewMasterUserRecord(t, "john-wait-for-ua", murtest.ToBeDeleted()) - userAcc := uatest.NewUserAccountFromMur(mur, - uatest.DeletedUa()) + userAcc := uatest.NewUserAccountFromMur(mur, uatest.DeletedUa(), uatest.WithFinalizer()) hostClient := commontest.NewFakeClient(t, mur, toolchainStatus) memberClient := commontest.NewFakeClient(t, userAcc) @@ -1252,8 +1251,11 @@ func TestDeleteUserAccountViaMasterUserRecordBeingDeleted(t *testing.T) { murtest.AssertThatMasterUserRecord(t, "john-wait-for-ua", hostClient). HasFinalizer() - err = memberClient.Delete(context.TODO(), userAcc) + // remove finalizer on UserAcc to delete + userAcc.SetFinalizers(nil) + err = memberClient.Client.Update(context.TODO(), userAcc) require.NoError(t, err) + result2, err2 := cntrl.Reconcile(context.TODO(), newMurRequest(mur)) // then @@ -1287,7 +1289,7 @@ func TestDeleteUserAccountViaMasterUserRecordBeingDeleted(t *testing.T) { mur := murtest.NewMasterUserRecord(t, "john-wait-for-ua", murtest.ToBeDeleted()) - userAcc := uatest.NewUserAccountFromMur(mur) + userAcc := uatest.NewUserAccountFromMur(mur, uatest.WithFinalizer()) // set deletion timestamp to indicate UserAccount deletion is in progress userAcc.DeletionTimestamp = &metav1.Time{Time: time.Now().Add(-60 * time.Second)} diff --git a/controllers/masteruserrecord/sync_test.go b/controllers/masteruserrecord/sync_test.go index 806e36bd3..5c44e6b0e 100644 --- a/controllers/masteruserrecord/sync_test.go +++ b/controllers/masteruserrecord/sync_test.go @@ -176,7 +176,7 @@ func TestSynchronizeStatus(t *testing.T) { t.Run("failed on the host side", func(t *testing.T) { // given hostClient := test.NewFakeClient(t, mur, readyToolchainStatus) - hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { return fmt.Errorf("some error") } sync, _ := prepareSynchronizer(t, userAccount, mur, hostClient) @@ -235,6 +235,8 @@ func TestSyncMurStatusWithUserAccountStatusWhenUpdated(t *testing.T) { // when preSyncTime := metav1.Now() + // add a delay of a second to avoid flakiness + time.Sleep(1 * time.Second) err := sync.synchronizeStatus(context.TODO()) // then @@ -247,7 +249,7 @@ func TestSyncMurStatusWithUserAccountStatusWhenUpdated(t *testing.T) { t.Run("failed on the host side", func(t *testing.T) { // given hostClient := test.NewFakeClient(t, mur) - hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { return fmt.Errorf("some error") } sync, _ := prepareSynchronizer(t, userAccount, mur, hostClient) @@ -295,7 +297,7 @@ func TestSyncMurStatusWithUserAccountStatusWhenDisabled(t *testing.T) { t.Run("failed on the host side", func(t *testing.T) { // given hostClient := test.NewFakeClient(t, mur.DeepCopy()) - hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { return fmt.Errorf("some error") } sync, _ := prepareSynchronizer(t, userAccount, mur, hostClient) @@ -663,7 +665,7 @@ func TestSynchronizeUserAccountFailed(t *testing.T) { uatest.StatusCondition(toBeNotReady("somethingFailed", ""))) memberClient := test.NewFakeClient(t, userAcc) hostClient := test.NewFakeClient(t, provisionedMur, readyToolchainStatus) - hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { return fmt.Errorf("unable to update MUR %s", provisionedMur.Name) } sync := Synchronizer{ diff --git a/controllers/notification/notification_controller_test.go b/controllers/notification/notification_controller_test.go index 2435bb9b8..bbd134d25 100644 --- a/controllers/notification/notification_controller_test.go +++ b/controllers/notification/notification_controller_test.go @@ -25,7 +25,6 @@ import ( corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" ctrl "sigs.k8s.io/controller-runtime" @@ -378,7 +377,7 @@ func deletionCond(msg string) toolchainv1alpha1.Condition { } func newController(t *testing.T, deliveryService DeliveryService, - initObjs ...runtime.Object) (*Reconciler, *test.FakeClient) { + initObjs ...runtimeclient.Object) (*Reconciler, *test.FakeClient) { restore := test.SetEnvVarAndRestore(t, commonconfig.WatchNamespaceEnvVar, test.HostOperatorNs) t.Cleanup(restore) diff --git a/controllers/nstemplatetier/nstemplatetier_controller_test.go b/controllers/nstemplatetier/nstemplatetier_controller_test.go index 192eb0624..1125d2039 100644 --- a/controllers/nstemplatetier/nstemplatetier_controller_test.go +++ b/controllers/nstemplatetier/nstemplatetier_controller_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/require" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" @@ -40,7 +39,7 @@ func TestReconcile(t *testing.T) { t.Run("without previous entry", func(t *testing.T) { // given base1nsTier := tiertest.Base1nsTier(t, tiertest.CurrentBase1nsTemplates) - initObjs := []runtime.Object{base1nsTier} + initObjs := []runtimeclient.Object{base1nsTier} r, req, cl := prepareReconcile(t, base1nsTier.Name, initObjs...) // when res, err := r.Reconcile(context.TODO(), req) @@ -66,7 +65,7 @@ func TestReconcile(t *testing.T) { StartTime: metav1.Now(), Hash: "def456", })) - initObjs := []runtime.Object{base1nsTier} + initObjs := []runtimeclient.Object{base1nsTier} r, req, cl := prepareReconcile(t, base1nsTier.Name, initObjs...) // when res, err := r.Reconcile(context.TODO(), req) @@ -90,7 +89,7 @@ func TestReconcile(t *testing.T) { base1nsTier := tiertest.Base1nsTier(t, tiertest.CurrentBase1nsTemplates, tiertest.WithCurrentUpdate()) // current update already exists - initObjs := []runtime.Object{base1nsTier} + initObjs := []runtimeclient.Object{base1nsTier} r, req, cl := prepareReconcile(t, base1nsTier.Name, initObjs...) // when res, err := r.Reconcile(context.TODO(), req) @@ -113,7 +112,7 @@ func TestReconcile(t *testing.T) { t.Run("tier not found", func(t *testing.T) { // given base1nsTier := tiertest.Base1nsTier(t, tiertest.CurrentBase1nsTemplates) - initObjs := []runtime.Object{base1nsTier} + initObjs := []runtimeclient.Object{base1nsTier} r, req, cl := prepareReconcile(t, base1nsTier.Name, initObjs...) cl.MockGet = func(ctx context.Context, key types.NamespacedName, obj runtimeclient.Object, opts ...runtimeclient.GetOption) error { if _, ok := obj.(*toolchainv1alpha1.NSTemplateTier); ok { @@ -131,7 +130,7 @@ func TestReconcile(t *testing.T) { t.Run("other error", func(t *testing.T) { // given base1nsTier := tiertest.Base1nsTier(t, tiertest.CurrentBase1nsTemplates) - initObjs := []runtime.Object{base1nsTier} + initObjs := []runtimeclient.Object{base1nsTier} r, req, cl := prepareReconcile(t, base1nsTier.Name, initObjs...) cl.MockGet = func(ctx context.Context, key types.NamespacedName, obj runtimeclient.Object, opts ...runtimeclient.GetOption) error { if _, ok := obj.(*toolchainv1alpha1.NSTemplateTier); ok { @@ -153,9 +152,9 @@ func TestReconcile(t *testing.T) { t.Run("when adding new update", func(t *testing.T) { // given base1nsTier := tiertest.Base1nsTier(t, tiertest.CurrentBase1nsTemplates) - initObjs := []runtime.Object{base1nsTier} + initObjs := []runtimeclient.Object{base1nsTier} r, req, cl := prepareReconcile(t, base1nsTier.Name, initObjs...) - cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { if _, ok := obj.(*toolchainv1alpha1.NSTemplateTier); ok { return fmt.Errorf("mock error") } @@ -173,7 +172,7 @@ func TestReconcile(t *testing.T) { } -func prepareReconcile(t *testing.T, name string, initObjs ...runtime.Object) (reconcile.Reconciler, reconcile.Request, *test.FakeClient) { +func prepareReconcile(t *testing.T, name string, initObjs ...runtimeclient.Object) (reconcile.Reconciler, reconcile.Request, *test.FakeClient) { os.Setenv("WATCH_NAMESPACE", test.HostOperatorNs) s := scheme.Scheme err := apis.AddToScheme(s) diff --git a/controllers/socialevent/socialevent_controller.go b/controllers/socialevent/socialevent_controller.go index 33ac03b39..92ad0ddbd 100644 --- a/controllers/socialevent/socialevent_controller.go +++ b/controllers/socialevent/socialevent_controller.go @@ -16,7 +16,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" ) // Reconciler reconciles a SocialEvent object @@ -33,7 +32,7 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager) error { Watches( // watches UserSignups when their labels are *changed* (in particular, to track the approved users) // and they have a `toolchain.dev.openshift.com/social-event` label - &source.Kind{Type: &toolchainv1alpha1.UserSignup{}}, + &toolchainv1alpha1.UserSignup{}, handler.EnqueueRequestsFromMapFunc(commoncontrollers.MapToOwnerByLabel(r.Namespace, toolchainv1alpha1.SocialEventUserSignupLabelKey)), builder.WithPredicates(predicate.LabelChangedPredicate{}), ).Complete(r) diff --git a/controllers/socialevent/status_updater_test.go b/controllers/socialevent/status_updater_test.go index 81476dad4..7d04e2d27 100644 --- a/controllers/socialevent/status_updater_test.go +++ b/controllers/socialevent/status_updater_test.go @@ -74,7 +74,7 @@ func TestUpdateStatusCondition(t *testing.T) { socialeventtest.WithConditions(c1), // with pre-existing status condition ) hostClient := test.NewFakeClient(t, event) - hostClient.MockStatusUpdate = func(_ context.Context, _ runtimeclient.Object, _ ...runtimeclient.UpdateOption) error { + hostClient.MockStatusUpdate = func(_ context.Context, _ runtimeclient.Object, _ ...runtimeclient.SubResourceUpdateOption) error { return fmt.Errorf("mock error") } statusUpdater := StatusUpdater{Client: hostClient} diff --git a/controllers/space/mapper.go b/controllers/space/mapper.go index 6d435f4fc..ab7dcf932 100644 --- a/controllers/space/mapper.go +++ b/controllers/space/mapper.go @@ -20,8 +20,8 @@ var mapperLog = ctrl.Log.WithName("MapSpaceBindingToParentAndSubSpaces") // - from the SpaceBinding labels we get the name of the Space object (a.k.a parentSpace) // - with the name of the Space (parentSpace) we search for eventual subSpaces // - in order to reflect the changes on SpaceBinding we trigger a `reconcile.Request` for the Space (parentSpace) and all it's subSpaces (if any) -func MapSpaceBindingToParentAndSubSpaces(cl runtimeclient.Client) func(object runtimeclient.Object) []reconcile.Request { - return func(obj runtimeclient.Object) []reconcile.Request { +func MapSpaceBindingToParentAndSubSpaces(cl runtimeclient.Client) func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { logger := mapperLog.WithValues("object-name", obj.GetName(), "object-kind", obj.GetObjectKind()) // initialize request slice to be returned diff --git a/controllers/space/mapper_test.go b/controllers/space/mapper_test.go index a44280290..6710383c0 100644 --- a/controllers/space/mapper_test.go +++ b/controllers/space/mapper_test.go @@ -38,7 +38,7 @@ func TestMapToSubSpacesByParentObjectName(t *testing.T) { t.Run("should return one Space when has no sub-spaces", func(t *testing.T) { // when - requests := MapSpaceBindingToParentAndSubSpaces(cl)(sbSpaceNoSubspaces) + requests := MapSpaceBindingToParentAndSubSpaces(cl)(context.TODO(), sbSpaceNoSubspaces) // then require.Len(t, requests, 1) @@ -47,7 +47,7 @@ func TestMapToSubSpacesByParentObjectName(t *testing.T) { t.Run("should return 5 Spaces when there is a sub-subSpace", func(t *testing.T) { // when - requests := MapSpaceBindingToParentAndSubSpaces(cl)(sbSpaceWithSubspaces) + requests := MapSpaceBindingToParentAndSubSpaces(cl)(context.TODO(), sbSpaceWithSubspaces) // then require.Len(t, requests, 5) @@ -60,7 +60,7 @@ func TestMapToSubSpacesByParentObjectName(t *testing.T) { t.Run("should not return any Space request when there is no for the given SpaceBinding", func(t *testing.T) { // when - requests := MapSpaceBindingToParentAndSubSpaces(cl)(sbOrphan) + requests := MapSpaceBindingToParentAndSubSpaces(cl)(context.TODO(), sbOrphan) // then require.Empty(t, requests) @@ -74,7 +74,7 @@ func TestMapToSubSpacesByParentObjectName(t *testing.T) { } // when - requests := MapSpaceBindingToParentAndSubSpaces(cl)(sbSpaceNoSubspaces) + requests := MapSpaceBindingToParentAndSubSpaces(cl)(context.TODO(), sbSpaceNoSubspaces) // then require.Empty(t, requests) diff --git a/controllers/space/nstemplatetier_spaces_mapper.go b/controllers/space/nstemplatetier_spaces_mapper.go index 953f4cee7..33b2ff298 100644 --- a/controllers/space/nstemplatetier_spaces_mapper.go +++ b/controllers/space/nstemplatetier_spaces_mapper.go @@ -12,9 +12,9 @@ import ( "sigs.k8s.io/controller-runtime/pkg/reconcile" ) -func MapNSTemplateTierToSpaces(namespace string, cl runtimeclient.Client) func(object runtimeclient.Object) []reconcile.Request { +func MapNSTemplateTierToSpaces(namespace string, cl runtimeclient.Client) func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { mapperLog := ctrl.Log.WithName("NSTemplateTierToSpaceMapper") - return func(obj runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { if tmplTier, ok := obj.(*toolchainv1alpha1.NSTemplateTier); ok { matchOutdated, err := nstemplatetier.OutdatedTierSelector(tmplTier) if err != nil { diff --git a/controllers/space/nstemplatetier_spaces_mapper_test.go b/controllers/space/nstemplatetier_spaces_mapper_test.go index 8eb50e600..f165587f9 100644 --- a/controllers/space/nstemplatetier_spaces_mapper_test.go +++ b/controllers/space/nstemplatetier_spaces_mapper_test.go @@ -44,7 +44,7 @@ func TestMapNSTemplateTierToSpaces(t *testing.T) { hostClient := test.NewFakeClient(t, nsTmplTier, outdatedSpace, otherSpace1, otherSpace2, otherSpace3) mapFrom := space.MapNSTemplateTierToSpaces(test.HostOperatorNs, hostClient) // when - result := mapFrom(nsTmplTier) + result := mapFrom(context.TODO(), nsTmplTier) // then assert.Equal(t, []reconcile.Request{ @@ -71,7 +71,7 @@ func TestMapNSTemplateTierToSpaces(t *testing.T) { hostClient := test.NewFakeClient(t, nsTmplTier, outdatedSpace1, outdatedSpace2, otherSpace1, otherSpace2, otherSpace3) mapFrom := space.MapNSTemplateTierToSpaces(test.HostOperatorNs, hostClient) // when - result := mapFrom(nsTmplTier) + result := mapFrom(context.TODO(), nsTmplTier) // then assert.ElementsMatch(t, []reconcile.Request{ @@ -96,7 +96,7 @@ func TestMapNSTemplateTierToSpaces(t *testing.T) { hostClient := test.NewFakeClient(t, nsTmplTier, otherSpace1, otherSpace2, otherSpace3) mapFrom := space.MapNSTemplateTierToSpaces(test.HostOperatorNs, hostClient) // when - result := mapFrom(nsTmplTier) + result := mapFrom(context.TODO(), nsTmplTier) // then assert.Empty(t, result) @@ -114,7 +114,7 @@ func TestMapNSTemplateTierToSpaces(t *testing.T) { mapFrom := space.MapNSTemplateTierToSpaces(test.HostOperatorNs, hostClient) // when - result := mapFrom(nsTmplTier) + result := mapFrom(context.TODO(), nsTmplTier) // then assert.Empty(t, result) @@ -126,7 +126,7 @@ func TestMapNSTemplateTierToSpaces(t *testing.T) { mapFrom := space.MapNSTemplateTierToSpaces(test.HostOperatorNs, hostClient) // when - result := mapFrom(spacetest.NewSpace(test.HostOperatorNs, "oddity")) // wrong type of resource as arg + result := mapFrom(context.TODO(), spacetest.NewSpace(test.HostOperatorNs, "oddity")) // wrong type of resource as arg // then assert.Empty(t, result) diff --git a/controllers/space/space_controller.go b/controllers/space/space_controller.go index 972b5fd92..e791cca6c 100644 --- a/controllers/space/space_controller.go +++ b/controllers/space/space_controller.go @@ -48,14 +48,14 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager, memberClusters map[strin b := ctrl.NewControllerManagedBy(mgr). // watch Spaces in the host cluster For(&toolchainv1alpha1.Space{}, builder.WithPredicates(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.AnnotationChangedPredicate{}))). - Watches(&source.Kind{Type: &toolchainv1alpha1.NSTemplateTier{}}, + Watches(&toolchainv1alpha1.NSTemplateTier{}, handler.EnqueueRequestsFromMapFunc(MapNSTemplateTierToSpaces(r.Namespace, r.Client)), builder.WithPredicates(predicate.GenerationChangedPredicate{})). - Watches(&source.Kind{Type: &toolchainv1alpha1.SpaceBinding{}}, + Watches(&toolchainv1alpha1.SpaceBinding{}, handler.EnqueueRequestsFromMapFunc(MapSpaceBindingToParentAndSubSpaces(r.Client))) // watch NSTemplateSets in all the member clusters for _, memberCluster := range memberClusters { - b = b.Watches(source.NewKindWithCache(&toolchainv1alpha1.NSTemplateSet{}, memberCluster.Cache), + b = b.WatchesRawSource(source.Kind(memberCluster.Cache, &toolchainv1alpha1.NSTemplateSet{}), handler.EnqueueRequestsFromMapFunc(mapper.MapByResourceName(r.Namespace)), ) } diff --git a/controllers/space/space_controller_test.go b/controllers/space/space_controller_test.go index fad397d9a..b86635180 100644 --- a/controllers/space/space_controller_test.go +++ b/controllers/space/space_controller_test.go @@ -146,7 +146,7 @@ func TestCreateSpace(t *testing.T) { Name: "john-stage", }, } - err := member1.Client.Update(context.TODO(), nsTmplSet) + err := member1.Client.Status().Update(context.TODO(), nsTmplSet) require.NoError(t, err) ctrl := newReconciler(hostClient, member1, member2) @@ -502,7 +502,7 @@ func TestCreateSpace(t *testing.T) { spacetest.WithSpecTargetCluster("member-1"), spacetest.WithFinalizer()) hostClient := test.NewFakeClient(t, s, base1nsTier) - hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { if _, ok := obj.(*toolchainv1alpha1.Space); ok { return fmt.Errorf("mock error") } @@ -536,7 +536,7 @@ func TestCreateSpace(t *testing.T) { hostClient := test.NewFakeClient(t, s, base1nsTier) nsTmplSet := nstemplatetsettest.NewNSTemplateSet("john", nstemplatetsettest.WithReadyCondition(), nstemplatetsettest.WithReferencesFor(base1nsTier)) member1Client := test.NewFakeClient(t, nsTmplSet) - hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + hostClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { if space, ok := obj.(*toolchainv1alpha1.Space); ok { if len(space.Status.ProvisionedNamespaces) > 0 { return fmt.Errorf("update error") @@ -858,7 +858,7 @@ func TestDeleteSpace(t *testing.T) { spacetest.WithFinalizer(), ) hostClient := test.NewFakeClient(t, s) - nstmplSet := nstemplatetsettest.NewNSTemplateSet("oddity", nstemplatetsettest.WithDeletionTimestamp(time.Now().Add(-2*time.Minute))) + nstmplSet := nstemplatetsettest.NewNSTemplateSet("oddity", nstemplatetsettest.WithFinalizer(), nstemplatetsettest.WithDeletionTimestamp(time.Now().Add(-2*time.Minute))) member1Client := test.NewFakeClient(t, nstmplSet) member1 := NewMemberClusterWithClient(member1Client, "member-1", corev1.ConditionTrue) member2 := NewMemberClusterWithTenantRole(t, "member-2", corev1.ConditionTrue) @@ -964,7 +964,7 @@ func TestUpdateSpaceTier(t *testing.T) { nsTmplSet.Status.Conditions = []toolchainv1alpha1.Condition{ nstemplatetsettest.Updating(), } - err := member1.Client.Update(context.TODO(), nsTmplSet) + err := member1.Client.Status().Update(context.TODO(), nsTmplSet) require.NoError(t, err) // when @@ -991,7 +991,7 @@ func TestUpdateSpaceTier(t *testing.T) { nsTmplSet.Status.Conditions = []toolchainv1alpha1.Condition{ nstemplatetsettest.Provisioned(), } - err := member1.Client.Update(context.TODO(), nsTmplSet) + err := member1.Client.Status().Update(context.TODO(), nsTmplSet) require.NoError(t, err) // when @@ -2163,8 +2163,8 @@ func mockDeleteNSTemplateSetFail(cl runtimeclient.Client) func(ctx context.Conte } } -func mockUpdateSpaceStatusFail(cl runtimeclient.Client) func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { - return func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { +func mockUpdateSpaceStatusFail(cl runtimeclient.Client) func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { + return func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { if _, ok := obj.(*toolchainv1alpha1.Space); ok { return fmt.Errorf("mock error") } diff --git a/controllers/spacebindingcleanup/mapper.go b/controllers/spacebindingcleanup/mapper.go index 39729e875..4ccc16e4e 100644 --- a/controllers/spacebindingcleanup/mapper.go +++ b/controllers/spacebindingcleanup/mapper.go @@ -2,7 +2,6 @@ package spacebindingcleanup import ( "context" - toolchainv1alpha1 "github.com/codeready-toolchain/api/api/v1alpha1" "k8s.io/apimachinery/pkg/types" @@ -15,8 +14,8 @@ var mapperLog = ctrl.Log.WithName("MapToSpaceBindingByBoundObjectName") // MapToSpaceBindingByBoundObjectName maps the bound object (MUR or Space) to the associated SpaceBindings. // The correct SpaceBindings are listed using the given label whose value should equal to the object's name. -func MapToSpaceBindingByBoundObjectName(cl runtimeclient.Client, label string) func(object runtimeclient.Object) []reconcile.Request { - return func(obj runtimeclient.Object) []reconcile.Request { +func MapToSpaceBindingByBoundObjectName(cl runtimeclient.Client, label string) func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { logger := mapperLog.WithValues("object-name", obj.GetName(), "object-kind", obj.GetObjectKind()) spaceBindings := &toolchainv1alpha1.SpaceBindingList{} err := cl.List(context.TODO(), spaceBindings, diff --git a/controllers/spacebindingcleanup/mapper_test.go b/controllers/spacebindingcleanup/mapper_test.go index 9c114f819..db40b6fa2 100644 --- a/controllers/spacebindingcleanup/mapper_test.go +++ b/controllers/spacebindingcleanup/mapper_test.go @@ -35,7 +35,7 @@ func TestMapToSpaceBindingByBoundObject(t *testing.T) { t.Run("should return two SpaceBinding requests for comp space, when mapping from space", func(t *testing.T) { // when - requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingSpaceLabelKey)(compSpace) + requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingSpaceLabelKey)(context.TODO(), compSpace) // then require.Len(t, requests, 2) @@ -45,7 +45,7 @@ func TestMapToSpaceBindingByBoundObject(t *testing.T) { t.Run("should return two SpaceBindings for lara MUR, when mapping from mur", func(t *testing.T) { // when - requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingMasterUserRecordLabelKey)(laraMur) + requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingMasterUserRecordLabelKey)(context.TODO(), laraMur) // then require.Len(t, requests, 2) @@ -55,7 +55,7 @@ func TestMapToSpaceBindingByBoundObject(t *testing.T) { t.Run("should return one SpaceBinding request for joe MUR, when mapping from mur", func(t *testing.T) { // when - requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingMasterUserRecordLabelKey)(joeMur) + requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingMasterUserRecordLabelKey)(context.TODO(), joeMur) // then require.Len(t, requests, 1) @@ -64,7 +64,7 @@ func TestMapToSpaceBindingByBoundObject(t *testing.T) { t.Run("should not return any SpaceBinding request when there is no for the given space", func(t *testing.T) { // when - requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingSpaceLabelKey)(orphanSpace) + requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingSpaceLabelKey)(context.TODO(), orphanSpace) // then require.Empty(t, requests) @@ -72,7 +72,7 @@ func TestMapToSpaceBindingByBoundObject(t *testing.T) { t.Run("should not return any SpaceBinding request when there is no for the given MUR", func(t *testing.T) { // when - requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingMasterUserRecordLabelKey)(orphanMur) + requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingMasterUserRecordLabelKey)(context.TODO(), orphanMur) // then require.Empty(t, requests) @@ -86,7 +86,7 @@ func TestMapToSpaceBindingByBoundObject(t *testing.T) { } // when - requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingMasterUserRecordLabelKey)(orphanMur) + requests := MapToSpaceBindingByBoundObjectName(cl, v1alpha1.SpaceBindingMasterUserRecordLabelKey)(context.TODO(), orphanMur) // then require.Empty(t, requests) diff --git a/controllers/spacebindingcleanup/spacebinding_cleanup_controller.go b/controllers/spacebindingcleanup/spacebinding_cleanup_controller.go index dfd2643a0..17780a1b2 100644 --- a/controllers/spacebindingcleanup/spacebinding_cleanup_controller.go +++ b/controllers/spacebindingcleanup/spacebinding_cleanup_controller.go @@ -20,7 +20,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" ) const norequeue = 0 * time.Second @@ -31,10 +30,10 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager) error { onlyForDeletion := builder.WithPredicates(OnlyDeleteAndGenericPredicate{}) return ctrl.NewControllerManagedBy(mgr). For(&toolchainv1alpha1.SpaceBinding{}). - Watches(&source.Kind{Type: &toolchainv1alpha1.Space{}}, + Watches(&toolchainv1alpha1.Space{}, handler.EnqueueRequestsFromMapFunc(MapToSpaceBindingByBoundObjectName(r.Client, toolchainv1alpha1.SpaceBindingSpaceLabelKey)), onlyForDeletion). - Watches(&source.Kind{Type: &toolchainv1alpha1.MasterUserRecord{}}, + Watches(&toolchainv1alpha1.MasterUserRecord{}, handler.EnqueueRequestsFromMapFunc(MapToSpaceBindingByBoundObjectName(r.Client, toolchainv1alpha1.SpaceBindingMasterUserRecordLabelKey)), onlyForDeletion). Complete(r) diff --git a/controllers/spacebindingcleanup/spacebinding_cleanup_controller_test.go b/controllers/spacebindingcleanup/spacebinding_cleanup_controller_test.go index 7407576a4..35d4fd59f 100644 --- a/controllers/spacebindingcleanup/spacebinding_cleanup_controller_test.go +++ b/controllers/spacebindingcleanup/spacebinding_cleanup_controller_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "os" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "testing" "time" @@ -165,6 +166,7 @@ func TestDeleteSpaceBinding(t *testing.T) { sbLaraRedhatAdmin := sbLaraRedhatAdmin.DeepCopy() now := metav1.Now() sbLaraRedhatAdmin.DeletionTimestamp = &now + controllerutil.AddFinalizer(sbLaraRedhatAdmin, v1alpha1.FinalizerName) fakeClient := test.NewFakeClient(t, sbLaraRedhatAdmin, sbJoeRedhatView, sbLaraIbmEdit, laraMur, joeMur, ibmSpace, toolchainconfig) reconciler := prepareReconciler(t, fakeClient) diff --git a/controllers/spacebindingrequest/spacebinding_spacebindingrequest_mapper.go b/controllers/spacebindingrequest/spacebinding_spacebindingrequest_mapper.go index 13435341a..96ef29f03 100644 --- a/controllers/spacebindingrequest/spacebinding_spacebindingrequest_mapper.go +++ b/controllers/spacebindingrequest/spacebinding_spacebindingrequest_mapper.go @@ -1,6 +1,7 @@ package spacebindingrequest import ( + "context" toolchainv1alpha1 "github.com/codeready-toolchain/api/api/v1alpha1" "k8s.io/apimachinery/pkg/types" @@ -10,8 +11,8 @@ import ( // MapSpaceBindingToSpaceBindingRequest checks whether a spacebinding was created from a spacebindingrequest, in case it finds the required labels, // triggers an event for the given spacebindingrequest associated with the spacebinding. -func MapSpaceBindingToSpaceBindingRequest() func(object runtimeclient.Object) []reconcile.Request { - return func(obj runtimeclient.Object) []reconcile.Request { +func MapSpaceBindingToSpaceBindingRequest() func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { // get eventual spaceBindingRequest name and namespace associated with current SpaceBinding spaceBindingRequestName, spaceBindingRequestExists := obj.GetLabels()[toolchainv1alpha1.SpaceBindingRequestLabelKey] spaceBindingRequestNamespace, spaceBindingRequestNamespaceExists := obj.GetLabels()[toolchainv1alpha1.SpaceBindingRequestNamespaceLabelKey] diff --git a/controllers/spacebindingrequest/spacebinding_spacebindingrequest_mapper_test.go b/controllers/spacebindingrequest/spacebinding_spacebindingrequest_mapper_test.go index 851e8ffbc..7d5eb9361 100644 --- a/controllers/spacebindingrequest/spacebinding_spacebindingrequest_mapper_test.go +++ b/controllers/spacebindingrequest/spacebinding_spacebindingrequest_mapper_test.go @@ -1,6 +1,7 @@ package spacebindingrequest_test import ( + "context" "testing" "github.com/codeready-toolchain/api/api/v1alpha1" @@ -25,7 +26,7 @@ func TestMapSpaceBindingToSpaceBindingRequestByLabel(t *testing.T) { t.Run("should return no spacebinding associated with a spacebindingrequest", func(t *testing.T) { // when - requests := spacebindingrequest.MapSpaceBindingToSpaceBindingRequest()(sbnosbr) + requests := spacebindingrequest.MapSpaceBindingToSpaceBindingRequest()(context.TODO(), sbnosbr) // then require.Empty(t, requests) @@ -33,7 +34,7 @@ func TestMapSpaceBindingToSpaceBindingRequestByLabel(t *testing.T) { t.Run("should return spacebinding associated with spacebindingrequest", func(t *testing.T) { // when - requests := spacebindingrequest.MapSpaceBindingToSpaceBindingRequest()(sb) + requests := spacebindingrequest.MapSpaceBindingToSpaceBindingRequest()(context.TODO(), sb) // then require.Len(t, requests, 1) diff --git a/controllers/spacebindingrequest/spacebindingrequest_controller.go b/controllers/spacebindingrequest/spacebindingrequest_controller.go index ac7791f53..e3ed6f963 100644 --- a/controllers/spacebindingrequest/spacebindingrequest_controller.go +++ b/controllers/spacebindingrequest/spacebindingrequest_controller.go @@ -42,14 +42,14 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager, memberClusters map[strin // SpaceBindingRequest owns spacebindings so events will be triggered for those from the host cluster. b := ctrl.NewControllerManagedBy(mgr). For(&toolchainv1alpha1.SpaceBindingRequest{}). - Watches(&source.Kind{Type: &toolchainv1alpha1.SpaceBinding{}}, + Watches(&toolchainv1alpha1.SpaceBinding{}, handler.EnqueueRequestsFromMapFunc(MapSpaceBindingToSpaceBindingRequest()), ) // Watch SpaceBindingRequests in all member clusters and all namespaces. for _, memberCluster := range memberClusters { - b = b.Watches( - source.NewKindWithCache(&toolchainv1alpha1.SpaceBindingRequest{}, memberCluster.Cache), + b = b.WatchesRawSource( + source.Kind(memberCluster.Cache, &toolchainv1alpha1.SpaceBindingRequest{}), &handler.EnqueueRequestForObject{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})) } diff --git a/controllers/spacebindingrequest/spacebindingrequest_controller_test.go b/controllers/spacebindingrequest/spacebindingrequest_controller_test.go index e1e83c675..70378dbd5 100644 --- a/controllers/spacebindingrequest/spacebindingrequest_controller_test.go +++ b/controllers/spacebindingrequest/spacebindingrequest_controller_test.go @@ -314,7 +314,7 @@ func TestCreateSpaceBindingRequest(t *testing.T) { // given member1 := NewMemberClusterWithClient(test.NewFakeClient(t, sbr, sbrNamespace), "member-1", corev1.ConditionTrue) janeSpace := spacetest.NewSpace(test.HostOperatorNs, "jane", - spacetest.WithDeletionTimestamp()) // space is being deleted ... + spacetest.WithDeletionTimestamp(), spacetest.WithFinalizer()) // space is being deleted ... hostClient := test.NewFakeClient(t, base1nsTier, janeSpace) ctrl := newReconciler(t, hostClient, member1) @@ -434,7 +434,7 @@ func TestCreateSpaceBindingRequest(t *testing.T) { t.Run("SpaceBinding is being deleted", func(t *testing.T) { // given - spaceBinding := spacebindingtest.NewSpaceBinding(janeMur.Name, janeSpace.Name, "admin", sbr.GetName(), spacebindingtest.WithSpaceBindingRequest(sbr), spacebindingtest.WithDeletionTimestamp()) + spaceBinding := spacebindingtest.NewSpaceBinding(janeMur.Name, janeSpace.Name, "admin", sbr.GetName(), spacebindingtest.WithSpaceBindingRequest(sbr), spacebindingtest.WithDeletionTimestamp(), spacebindingtest.WithFinalizer()) member1 := NewMemberClusterWithClient(test.NewFakeClient(t, sbr, sbrNamespace), "member-1", corev1.ConditionTrue) hostClient := test.NewFakeClient(t, base1nsTier, janeSpace, janeMur, spaceBinding) ctrl := newReconciler(t, hostClient, member1) @@ -646,24 +646,6 @@ func TestDeleteSpaceBindingRequest(t *testing.T) { }) }) - t.Run("finalizer was already removed", func(t *testing.T) { - // given - // spaceBindingRequest has no finalizer - sbrNoFinalizer := sbrtestcommon.NewSpaceBindingRequest("lana", "lana-tenant", - sbrtestcommon.WithMUR("lana"), - sbrtestcommon.WithSpaceRole("admin"), - sbrtestcommon.WithDeletionTimestamp()) // spaceBindingRequest was deleted - member1 := NewMemberClusterWithClient(test.NewFakeClient(t, sbrNoFinalizer, sbrNamespace), "member-1", corev1.ConditionTrue) - hostClient := test.NewFakeClient(t, base1nsTier, janeSpace, janeMur) - ctrl := newReconciler(t, hostClient, member1) - - // when - _, err := ctrl.Reconcile(context.TODO(), requestFor(sbrNoFinalizer)) - - // then - require.NoError(t, err) - sbrtestcommon.AssertThatSpaceBindingRequest(t, sbrNoFinalizer.GetNamespace(), sbrNoFinalizer.GetName(), member1.Client).HasNoFinalizers() // spaceBindingRequest is gone - }) }) t.Run("failure", func(t *testing.T) { @@ -674,7 +656,7 @@ func TestDeleteSpaceBindingRequest(t *testing.T) { sbrtestcommon.WithFinalizer(), sbrtestcommon.WithMUR(janeMur.Name), ) // sbr is being deleted - spaceBinding := spacebindingtest.NewSpaceBinding(janeMur.Name, janeSpace.Name, "admin", sbr.Name, spacebindingtest.WithSpaceBindingRequest(sbr)) + spaceBinding := spacebindingtest.NewSpaceBinding(janeMur.Name, janeSpace.Name, "admin", sbr.Name, spacebindingtest.WithSpaceBindingRequest(sbr), spacebindingtest.WithFinalizer()) spaceBinding.DeletionTimestamp = &metav1.Time{Time: time.Now().Add(-121 * time.Second)} // is being deleted since more than 2 minutes member1 := NewMemberClusterWithClient(test.NewFakeClient(t, sbr, sbrNamespace), "member-1", corev1.ConditionTrue) hostClient := test.NewFakeClient(t, base1nsTier, janeSpace, janeMur, spaceBinding) diff --git a/controllers/spacecleanup/space_cleanup_controller.go b/controllers/spacecleanup/space_cleanup_controller.go index dff898eb9..cb7ef1d7b 100644 --- a/controllers/spacecleanup/space_cleanup_controller.go +++ b/controllers/spacecleanup/space_cleanup_controller.go @@ -16,7 +16,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" ) // Reconciler reconciles a Space object @@ -32,7 +31,7 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager) error { Named("spacecleanup"). For(&toolchainv1alpha1.Space{}). Watches( - &source.Kind{Type: &toolchainv1alpha1.SpaceBinding{}}, + &toolchainv1alpha1.SpaceBinding{}, handler.EnqueueRequestsFromMapFunc(commoncontrollers.MapToOwnerByLabel(r.Namespace, toolchainv1alpha1.SpaceBindingSpaceLabelKey))). Complete(r) } diff --git a/controllers/spacecleanup/space_cleanup_controller_test.go b/controllers/spacecleanup/space_cleanup_controller_test.go index dd5b778c0..80cca72e4 100644 --- a/controllers/spacecleanup/space_cleanup_controller_test.go +++ b/controllers/spacecleanup/space_cleanup_controller_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -74,7 +73,7 @@ func TestCleanupSpace(t *testing.T) { t.Run("when is already being deleted", func(t *testing.T) { // given - space := spacetest.NewSpace(test.HostOperatorNs, "being-deleted", spacetest.WithDeletionTimestamp()) + space := spacetest.NewSpace(test.HostOperatorNs, "being-deleted", spacetest.WithDeletionTimestamp(), spacetest.WithFinalizer()) r, req, cl := prepareReconcile(t, space) // when @@ -132,6 +131,7 @@ func TestCleanupSpace(t *testing.T) { parentSpace := spacetest.NewSpace(test.HostOperatorNs, "parentSpace", spacetest.WithCreationTimestamp(time.Now().Add(-time.Minute)), spacetest.WithDeletionTimestamp(), + spacetest.WithFinalizer(), ) parentSpaceBinding := spacebinding.NewSpaceBinding("johny", parentSpace.Name, "admin", "a-creator") subSpace := spacetest.NewSpace(test.HostOperatorNs, "with-parentSpace", @@ -227,7 +227,7 @@ func TestCleanupSpace(t *testing.T) { }) } -func prepareReconcile(t *testing.T, space *toolchainv1alpha1.Space, initObjs ...runtime.Object) (*spacecleanup.Reconciler, reconcile.Request, *test.FakeClient) { +func prepareReconcile(t *testing.T, space *toolchainv1alpha1.Space, initObjs ...runtimeclient.Object) (*spacecleanup.Reconciler, reconcile.Request, *test.FakeClient) { require.NoError(t, os.Setenv("WATCH_NAMESPACE", test.HostOperatorNs)) s := scheme.Scheme err := apis.AddToScheme(s) diff --git a/controllers/spacecompletion/space_completion_controller.go b/controllers/spacecompletion/space_completion_controller.go index 154a1a6b0..6531fd360 100644 --- a/controllers/spacecompletion/space_completion_controller.go +++ b/controllers/spacecompletion/space_completion_controller.go @@ -19,7 +19,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" ) // Reconciler reconciles a Space object @@ -37,7 +36,7 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) err // watch Spaces in the host cluster For(&toolchainv1alpha1.Space{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})). Watches( - &source.Kind{Type: &toolchainv1alpha1.ToolchainStatus{}}, + &toolchainv1alpha1.ToolchainStatus{}, handler.EnqueueRequestsFromMapFunc(pending.NewSpaceMapper(mgr.GetClient()).BuildMapToOldestPending(ctx))). Complete(r) } diff --git a/controllers/spacecompletion/space_completion_controller_test.go b/controllers/spacecompletion/space_completion_controller_test.go index 2990b2707..4d713758a 100644 --- a/controllers/spacecompletion/space_completion_controller_test.go +++ b/controllers/spacecompletion/space_completion_controller_test.go @@ -18,7 +18,6 @@ import ( spacetest "github.com/codeready-toolchain/toolchain-common/pkg/test/space" "github.com/stretchr/testify/require" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -99,7 +98,8 @@ func TestCreateSpace(t *testing.T) { // given space := spacetest.NewSpace(test.HostOperatorNs, "without-fields", spacetest.WithTierName(""), - spacetest.WithDeletionTimestamp()) + spacetest.WithDeletionTimestamp(), + spacetest.WithFinalizer()) r, req, cl := prepareReconcile(t, space, spc) // when @@ -223,7 +223,7 @@ func prepareReconcile(t *testing.T, space *toolchainv1alpha1.Space, member1Space t.Cleanup(counter.Reset) InitializeCounters(t, toolchainStatus) - objs := []runtime.Object{toolchainStatus, space} + objs := []runtimeclient.Object{toolchainStatus, space} if member1SpaceProvisionerConfig != nil { objs = append(objs, member1SpaceProvisionerConfig) } diff --git a/controllers/spaceprovisionerconfig/mapper.go b/controllers/spaceprovisionerconfig/mapper.go index ec38c2641..2f55e39fe 100644 --- a/controllers/spaceprovisionerconfig/mapper.go +++ b/controllers/spaceprovisionerconfig/mapper.go @@ -2,7 +2,6 @@ package spaceprovisionerconfig import ( "context" - toolchainv1alpha1 "github.com/codeready-toolchain/api/api/v1alpha1" "k8s.io/apimachinery/pkg/types" runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -10,8 +9,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/reconcile" ) -func MapToolchainClusterToSpaceProvisionerConfigs(ctx context.Context, cl runtimeclient.Client) func(runtimeclient.Object) []reconcile.Request { - return func(obj runtimeclient.Object) []reconcile.Request { +func MapToolchainClusterToSpaceProvisionerConfigs(ctx context.Context, cl runtimeclient.Client) func(context.Context, runtimeclient.Object) []reconcile.Request { + return func(context context.Context, obj runtimeclient.Object) []reconcile.Request { ret, err := findReferencingProvisionerConfigs(ctx, cl, runtimeclient.ObjectKeyFromObject(obj)) if err != nil { log.FromContext(ctx).Error(err, "failed to list SpaceProvisionerConfig objects while determining what objects to reconcile", diff --git a/controllers/spaceprovisionerconfig/mapper_test.go b/controllers/spaceprovisionerconfig/mapper_test.go index f5c9269a2..842452295 100644 --- a/controllers/spaceprovisionerconfig/mapper_test.go +++ b/controllers/spaceprovisionerconfig/mapper_test.go @@ -97,7 +97,7 @@ func TestMapToolchainClusterToSpaceProvisionerConfigs(t *testing.T) { cl := test.NewFakeClient(t, spc0, spc1, spc2) // when - reqs := MapToolchainClusterToSpaceProvisionerConfigs(context.TODO(), cl)(&toolchainv1alpha1.ToolchainCluster{ + reqs := MapToolchainClusterToSpaceProvisionerConfigs(context.TODO(), cl)(context.TODO(), &toolchainv1alpha1.ToolchainCluster{ ObjectMeta: metav1.ObjectMeta{ Name: "cluster1", Namespace: test.HostOperatorNs, @@ -123,7 +123,7 @@ func TestMapToolchainClusterToSpaceProvisionerConfigs(t *testing.T) { } // when - reqs := MapToolchainClusterToSpaceProvisionerConfigs(context.TODO(), cl)(&toolchainv1alpha1.ToolchainCluster{ + reqs := MapToolchainClusterToSpaceProvisionerConfigs(context.TODO(), cl)(context.TODO(), &toolchainv1alpha1.ToolchainCluster{ ObjectMeta: metav1.ObjectMeta{ Name: "cluster1", Namespace: test.HostOperatorNs, diff --git a/controllers/spaceprovisionerconfig/spaceprovisionerconfig_controller.go b/controllers/spaceprovisionerconfig/spaceprovisionerconfig_controller.go index 4043943ca..ccfda1cf5 100644 --- a/controllers/spaceprovisionerconfig/spaceprovisionerconfig_controller.go +++ b/controllers/spaceprovisionerconfig/spaceprovisionerconfig_controller.go @@ -16,7 +16,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" ) // Reconciler is the reconciler for the SpaceProvisionerConfig CRs. @@ -30,7 +29,7 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) err return ctrl.NewControllerManagedBy(mgr). For(&toolchainv1alpha1.SpaceProvisionerConfig{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})). Watches( - &source.Kind{Type: &toolchainv1alpha1.ToolchainCluster{}}, + &toolchainv1alpha1.ToolchainCluster{}, handler.EnqueueRequestsFromMapFunc(MapToolchainClusterToSpaceProvisionerConfigs(ctx, r.Client)), ). Complete(r) diff --git a/controllers/spaceprovisionerconfig/spaceprovisionerconfig_controller_test.go b/controllers/spaceprovisionerconfig/spaceprovisionerconfig_controller_test.go index 317048b58..2f1fc12a9 100644 --- a/controllers/spaceprovisionerconfig/spaceprovisionerconfig_controller_test.go +++ b/controllers/spaceprovisionerconfig/spaceprovisionerconfig_controller_test.go @@ -3,6 +3,7 @@ package spaceprovisionerconfig import ( "context" "errors" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "testing" "time" @@ -73,7 +74,7 @@ func TestSpaceProvisionerConfigValidation(t *testing.T) { Status: v1.ConditionFalse, }, } - require.NoError(t, cl.Update(context.TODO(), tc)) + require.NoError(t, cl.Status().Update(context.TODO(), tc)) // when _, reconcileErr := r.Reconcile(context.TODO(), req) @@ -136,7 +137,7 @@ func TestSpaceProvisionerConfigValidation(t *testing.T) { Status: v1.ConditionTrue, }, } - require.NoError(t, cl.Update(context.TODO(), tc)) + require.NoError(t, cl.Status().Update(context.TODO(), tc)) // when _, reconcileErr = r.Reconcile(context.TODO(), req) @@ -263,7 +264,7 @@ func TestSpaceProvisionerConfigReEnqueing(t *testing.T) { r, req, cl := prepareReconcile(t, spc.DeepCopy()) expectedErr := errors.New("purposefully failing the get request") - cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { return expectedErr } @@ -293,6 +294,7 @@ func TestSpaceProvisionerConfigReEnqueing(t *testing.T) { // given spc := spc.DeepCopy() spc.SetDeletionTimestamp(&metav1.Time{Time: time.Now()}) + controllerutil.AddFinalizer(spc, toolchainv1alpha1.FinalizerName) r, req, cl := prepareReconcile(t, spc) // when @@ -326,7 +328,7 @@ func TestSpaceProvisionerConfigReEnqueing(t *testing.T) { }) } -func prepareReconcile(t *testing.T, spc *toolchainv1alpha1.SpaceProvisionerConfig, initObjs ...runtime.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { +func prepareReconcile(t *testing.T, spc *toolchainv1alpha1.SpaceProvisionerConfig, initObjs ...runtimeclient.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { s := runtime.NewScheme() err := apis.AddToScheme(s) require.NoError(t, err) diff --git a/controllers/spacerequest/space_spacerequest_mapper.go b/controllers/spacerequest/space_spacerequest_mapper.go index dc6b2eacb..6201b37d8 100644 --- a/controllers/spacerequest/space_spacerequest_mapper.go +++ b/controllers/spacerequest/space_spacerequest_mapper.go @@ -1,6 +1,7 @@ package spacerequest import ( + "context" toolchainv1alpha1 "github.com/codeready-toolchain/api/api/v1alpha1" "k8s.io/apimachinery/pkg/types" @@ -10,8 +11,8 @@ import ( // MapSubSpaceToSpaceRequest checks whether a space was created from a spacerequest, in case it finds the required labels, // triggers an event for the given spacerequest associated with the space. -func MapSubSpaceToSpaceRequest() func(object runtimeclient.Object) []reconcile.Request { - return func(obj runtimeclient.Object) []reconcile.Request { +func MapSubSpaceToSpaceRequest() func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { // get eventual spaceRequest name and namespace associated with current Space spaceRequestName, spaceRequestExists := obj.GetLabels()[toolchainv1alpha1.SpaceRequestLabelKey] spaceRequestNamespace, spaceRequestNamespaceExists := obj.GetLabels()[toolchainv1alpha1.SpaceRequestNamespaceLabelKey] diff --git a/controllers/spacerequest/space_spacerequest_mapper_test.go b/controllers/spacerequest/space_spacerequest_mapper_test.go index 7c381b853..9a09b2deb 100644 --- a/controllers/spacerequest/space_spacerequest_mapper_test.go +++ b/controllers/spacerequest/space_spacerequest_mapper_test.go @@ -1,6 +1,7 @@ package spacerequest_test import ( + "context" "testing" "github.com/codeready-toolchain/api/api/v1alpha1" @@ -24,7 +25,7 @@ func TestMapToSpaceRequestByLabel(t *testing.T) { t.Run("should return no space associated with a spacerequest", func(t *testing.T) { // when - requests := spacerequest.MapSubSpaceToSpaceRequest()(spacenosr) + requests := spacerequest.MapSubSpaceToSpaceRequest()(context.TODO(), spacenosr) // then require.Empty(t, requests) @@ -32,7 +33,7 @@ func TestMapToSpaceRequestByLabel(t *testing.T) { t.Run("should return space associated with spacerequest", func(t *testing.T) { // when - requests := spacerequest.MapSubSpaceToSpaceRequest()(subSpace) + requests := spacerequest.MapSubSpaceToSpaceRequest()(context.TODO(), subSpace) // then require.Len(t, requests, 1) diff --git a/controllers/spacerequest/spacerequest_controller.go b/controllers/spacerequest/spacerequest_controller.go index 6b637e7a2..caaec442b 100644 --- a/controllers/spacerequest/spacerequest_controller.go +++ b/controllers/spacerequest/spacerequest_controller.go @@ -53,14 +53,14 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager, memberClusters map[strin // SpaceRequest owns subSpaces so events will be triggered for those from the host cluster. b := ctrl.NewControllerManagedBy(mgr). For(&toolchainv1alpha1.SpaceRequest{}). - Watches(&source.Kind{Type: &toolchainv1alpha1.Space{}}, + Watches(&toolchainv1alpha1.Space{}, handler.EnqueueRequestsFromMapFunc(MapSubSpaceToSpaceRequest()), ) // Watch SpaceRequests in all member clusters and all namespaces. for _, memberCluster := range memberClusters { - b = b.Watches( - source.NewKindWithCache(&toolchainv1alpha1.SpaceRequest{}, memberCluster.Cache), + b = b.WatchesRawSource( + source.Kind(memberCluster.Cache, &toolchainv1alpha1.SpaceRequest{}), &handler.EnqueueRequestForObject{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})) } diff --git a/controllers/spacerequest/spacerequest_controller_test.go b/controllers/spacerequest/spacerequest_controller_test.go index 29d942549..40d10dcc8 100644 --- a/controllers/spacerequest/spacerequest_controller_test.go +++ b/controllers/spacerequest/spacerequest_controller_test.go @@ -810,7 +810,7 @@ func TestCreateSpaceRequest(t *testing.T) { t.Run("error while updating status", func(t *testing.T) { member1Client := commontest.NewFakeClient(t, sr, srNamespace) - member1Client.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + member1Client.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { if _, ok := obj.(*toolchainv1alpha1.SpaceRequest); ok { return fmt.Errorf("mock error") } @@ -864,7 +864,8 @@ func TestCreateSpaceRequest(t *testing.T) { subSpace := spacetest.NewSpace(commontest.HostOperatorNs, spaceutil.SubSpaceName(parentSpace, sr), spacetest.WithLabel(toolchainv1alpha1.SpaceRequestLabelKey, sr.GetName()), // subSpace was created from spaceRequest spacetest.WithLabel(toolchainv1alpha1.SpaceRequestNamespaceLabelKey, sr.GetNamespace()), // subSpace was created from spaceRequest - spacetest.WithDeletionTimestamp(), // space is being deleted ... + spacetest.WithFinalizer(), // finalizer needs to be added to add deletionTS + spacetest.WithDeletionTimestamp(), // space is being deleted ... spacetest.WithSpecParentSpace("jane")) hostClient := commontest.NewFakeClient(t, appstudioEnvTier, parentSpace, subSpace) ctrl := newReconciler(t, hostClient, member1) @@ -999,6 +1000,7 @@ func TestCreateSpaceRequest(t *testing.T) { // given parentSpace := spacetest.NewSpace(commontest.HostOperatorNs, "jane", spacetest.WithCondition(spacetest.Terminating()), + spacetest.WithFinalizer(), spacetest.WithDeletionTimestamp()) // parent space for some reason is being deleted member1Client := commontest.NewFakeClient(t, sr, srNamespace) member1 := NewMemberClusterWithClient(member1Client, "member-1", corev1.ConditionTrue) @@ -1367,7 +1369,8 @@ func TestDeleteSpaceRequest(t *testing.T) { "jane-tenant", spacerequesttest.WithTierName("appstudio-env"), spacerequesttest.WithTargetClusterRoles(srClusterRoles), - spacerequesttest.WithDeletionTimestamp()) // spaceRequest was deleted + spacerequesttest.WithDeletionTimestamp(), // spaceRequest was deleted + spacerequesttest.WithFinalizer()) member1Client := commontest.NewFakeClient(t, sr, srNamespace) member1 := NewMemberClusterWithClient(member1Client, "member-1", corev1.ConditionTrue) hostClient := commontest.NewFakeClient(t, appstudioEnvTier, parentSpace) @@ -1380,7 +1383,7 @@ func TestDeleteSpaceRequest(t *testing.T) { // space request is gone require.NoError(t, err) spacerequesttest.AssertThatSpaceRequest(t, srNamespace.Name, sr.GetName(), member1.Client). - HasNoFinalizers() + DoesNotExist() }) }) @@ -1392,11 +1395,11 @@ func TestDeleteSpaceRequest(t *testing.T) { spacetest.WithLabel(toolchainv1alpha1.SpaceRequestNamespaceLabelKey, sr.GetNamespace()), spacetest.WithSpecParentSpace("jane")) member1Client := commontest.NewFakeClient(t, sr, srNamespace) - member1Client.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + member1Client.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { if _, ok := obj.(*toolchainv1alpha1.SpaceRequest); ok { return fmt.Errorf("mock error") } - return member1Client.Client.Update(ctx, obj, opts...) + return member1Client.Client.Status().Update(ctx, obj, opts...) } member1 := NewMemberClusterWithClient(member1Client, "member-1", corev1.ConditionTrue) hostClient := commontest.NewFakeClient(t, appstudioEnvTier, subSpace, parentSpace) diff --git a/controllers/toolchainconfig/mapper.go b/controllers/toolchainconfig/mapper.go index 6c9c77aee..5e79a011f 100644 --- a/controllers/toolchainconfig/mapper.go +++ b/controllers/toolchainconfig/mapper.go @@ -1,6 +1,7 @@ package toolchainconfig import ( + "context" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" @@ -13,8 +14,8 @@ type SecretToToolchainConfigMapper struct{} var mapperLog = ctrl.Log.WithName("SecretToToolchainConfigMapper") // MapSecretToToolchainConfig maps secrets to the singular instance of ToolchainConfig named "config" -func MapSecretToToolchainConfig() func(object runtimeclient.Object) []reconcile.Request { - return func(obj runtimeclient.Object) []reconcile.Request { +func MapSecretToToolchainConfig() func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { if secret, ok := obj.(*corev1.Secret); ok { mapperLog.Info("Secret mapped to ToolchainConfig", "name", secret.Name) return []reconcile.Request{{NamespacedName: types.NamespacedName{Namespace: secret.Namespace, Name: "config"}}} diff --git a/controllers/toolchainconfig/mapper_test.go b/controllers/toolchainconfig/mapper_test.go index bc84ccc98..e6f9feb2f 100644 --- a/controllers/toolchainconfig/mapper_test.go +++ b/controllers/toolchainconfig/mapper_test.go @@ -1,6 +1,7 @@ package toolchainconfig import ( + "context" "testing" "github.com/codeready-toolchain/toolchain-common/pkg/test" @@ -21,7 +22,7 @@ func TestSecretToToolchainConfigMapper(t *testing.T) { secret := test.CreateSecret("test-secret", test.HostOperatorNs, secretData) // when - req := MapSecretToToolchainConfig()(secret) + req := MapSecretToToolchainConfig()(context.TODO(), secret) // then require.Len(t, req, 1) @@ -36,7 +37,7 @@ func TestSecretToToolchainConfigMapper(t *testing.T) { pod := &corev1.Pod{} // when - req := MapSecretToToolchainConfig()(pod) + req := MapSecretToToolchainConfig()(context.TODO(), pod) // then require.Empty(t, req) diff --git a/controllers/toolchainconfig/toolchainconfig_controller.go b/controllers/toolchainconfig/toolchainconfig_controller.go index e9f2ce878..c0b33a5e6 100644 --- a/controllers/toolchainconfig/toolchainconfig_controller.go +++ b/controllers/toolchainconfig/toolchainconfig_controller.go @@ -27,7 +27,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" ) const configResourceName = "config" @@ -48,7 +47,7 @@ func (r *Reconciler) SetupWithManager(mgr manager.Manager) error { return ctrl.NewControllerManagedBy(mgr). For(&toolchainv1alpha1.ToolchainConfig{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})). - Watches(&source.Kind{Type: &corev1.Secret{}}, + Watches(&corev1.Secret{}, handler.EnqueueRequestsFromMapFunc(MapSecretToToolchainConfig())). Complete(r) } diff --git a/controllers/toolchainstatus/toolchainstatus_controller_test.go b/controllers/toolchainstatus/toolchainstatus_controller_test.go index 80e07a30f..4054777b7 100644 --- a/controllers/toolchainstatus/toolchainstatus_controller_test.go +++ b/controllers/toolchainstatus/toolchainstatus_controller_test.go @@ -36,7 +36,6 @@ import ( appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -75,7 +74,7 @@ var defaultGitHubClient = test.MockGitHubClientForRepositoryCommits(buildCommitS var logger = logf.Log.WithName("toolchainstatus_controller_test") -func prepareReconcile(t *testing.T, requestName string, httpTestClient *fakeHTTPClient, lastGitHubAPICall time.Time, mockedGetGitHubClient client.GetGitHubClientFunc, memberClusters []string, initObjs ...runtime.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { +func prepareReconcile(t *testing.T, requestName string, httpTestClient *fakeHTTPClient, lastGitHubAPICall time.Time, mockedGetGitHubClient client.GetGitHubClientFunc, memberClusters []string, initObjs ...runtimeclient.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { os.Setenv("WATCH_NAMESPACE", test.HostOperatorNs) s := scheme.Scheme err := apis.AddToScheme(s) @@ -103,7 +102,7 @@ func prepareReconcile(t *testing.T, requestName string, httpTestClient *fakeHTTP return r, reconcile.Request{NamespacedName: test.NamespacedName(test.HostOperatorNs, requestName)}, fakeClient } -func prepareReconcileWithStatusConditions(t *testing.T, requestName string, memberClusters []string, conditions []toolchainv1alpha1.Condition, initObjs ...runtime.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { +func prepareReconcileWithStatusConditions(t *testing.T, requestName string, memberClusters []string, conditions []toolchainv1alpha1.Condition, initObjs ...runtimeclient.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { reconciler, req, fakeClient := prepareReconcile(t, requestName, newResponseGood(), mockLastGitHubAPICall, defaultGitHubClient, memberClusters, initObjs...) // explicitly set the conditions, so they are not empty/unknown @@ -1415,7 +1414,7 @@ func TestSynchronizationWithCounter(t *testing.T) { // given defer counter.Reset() toolchainStatus := NewToolchainStatus() - initObjects := append([]runtime.Object{}, hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, proxyRoute()) + initObjects := append([]runtimeclient.Object{}, hostOperatorDeployment, memberStatus, registrationServiceDeployment, toolchainStatus, proxyRoute()) initObjects = append(initObjects, CreateMultipleUserSignups("cookie-", 8)...) initObjects = append(initObjects, CreateMultipleMurs(t, "cookie-", 8, "member-1")...) initObjects = append(initObjects, CreateMultipleSpaces("cookie-", 8, "member-1")...) diff --git a/controllers/usersignup/mapper.go b/controllers/usersignup/mapper.go index fa1ad0222..7ede8b491 100644 --- a/controllers/usersignup/mapper.go +++ b/controllers/usersignup/mapper.go @@ -12,9 +12,9 @@ import ( "sigs.k8s.io/controller-runtime/pkg/reconcile" ) -func MapBannedUserToUserSignup(cl runtimeclient.Client) func(object runtimeclient.Object) []reconcile.Request { +func MapBannedUserToUserSignup(cl runtimeclient.Client) func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { var logger = ctrl.Log.WithName("BannedUserToUserSignupMapper") - return func(obj runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { if bu, ok := obj.(*toolchainv1alpha1.BannedUser); ok { // look-up any associated UserSignup using the BannedUser's "toolchain.dev.openshift.com/email-hash" label if emailHashLbl, exists := bu.Labels[toolchainv1alpha1.BannedUserEmailHashLabelKey]; exists { diff --git a/controllers/usersignup/mapper_test.go b/controllers/usersignup/mapper_test.go index e4ddc03fa..585fae6f0 100644 --- a/controllers/usersignup/mapper_test.go +++ b/controllers/usersignup/mapper_test.go @@ -57,7 +57,7 @@ func TestBannedUserToUserSignupMapper(t *testing.T) { defer restore() // when - req := MapBannedUserToUserSignup(c)(bannedUser) + req := MapBannedUserToUserSignup(c)(context.TODO(), bannedUser) // then require.Len(t, req, 1) @@ -74,7 +74,7 @@ func TestBannedUserToUserSignupMapper(t *testing.T) { } // when - req := MapBannedUserToUserSignup(c)(bannedUser) + req := MapBannedUserToUserSignup(c)(context.TODO(), bannedUser) // then require.Nil(t, req) @@ -86,7 +86,7 @@ func TestBannedUserToUserSignupMapper(t *testing.T) { t.Cleanup(restore) // when - req := MapBannedUserToUserSignup(c)(bannedUser) + req := MapBannedUserToUserSignup(c)(context.TODO(), bannedUser) // then require.Nil(t, req) diff --git a/controllers/usersignup/usersignup_controller.go b/controllers/usersignup/usersignup_controller.go index e988d4059..639c2d896 100644 --- a/controllers/usersignup/usersignup_controller.go +++ b/controllers/usersignup/usersignup_controller.go @@ -4,6 +4,8 @@ import ( "context" "fmt" + recaptcha "cloud.google.com/go/recaptchaenterprise/v2/apiv1" + recaptchapb "cloud.google.com/go/recaptchaenterprise/v2/apiv1/recaptchaenterprisepb" toolchainv1alpha1 "github.com/codeready-toolchain/api/api/v1alpha1" "github.com/codeready-toolchain/host-operator/controllers/toolchainconfig" "github.com/codeready-toolchain/host-operator/pkg/capacity" @@ -23,11 +25,6 @@ import ( "github.com/go-logr/logr" errs "github.com/pkg/errors" "github.com/redhat-cop/operator-utils/pkg/util" - - "strconv" - - recaptcha "cloud.google.com/go/recaptchaenterprise/v2/apiv1" - recaptchapb "cloud.google.com/go/recaptchaenterprise/v2/apiv1/recaptchaenterprisepb" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" @@ -39,7 +36,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" + "strconv" ) type StatusUpdaterFunc func(ctx context.Context, userAcc *toolchainv1alpha1.UserSignup, message string) error @@ -51,16 +48,16 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr manager.Manager) For(&toolchainv1alpha1.UserSignup{}, builder.WithPredicates(UserSignupChangedPredicate{})). Owns(&toolchainv1alpha1.MasterUserRecord{}). Watches( - &source.Kind{Type: &toolchainv1alpha1.BannedUser{}}, + &toolchainv1alpha1.BannedUser{}, handler.EnqueueRequestsFromMapFunc(MapBannedUserToUserSignup(mgr.GetClient()))). Watches( - &source.Kind{Type: &toolchainv1alpha1.Space{}}, + &toolchainv1alpha1.Space{}, handler.EnqueueRequestsFromMapFunc(commoncontrollers.MapToOwnerByLabel(r.Namespace, toolchainv1alpha1.SpaceCreatorLabelKey))). Watches( - &source.Kind{Type: &toolchainv1alpha1.SpaceBinding{}}, + &toolchainv1alpha1.SpaceBinding{}, handler.EnqueueRequestsFromMapFunc(commoncontrollers.MapToOwnerByLabel(r.Namespace, toolchainv1alpha1.SpaceCreatorLabelKey))). Watches( - &source.Kind{Type: &toolchainv1alpha1.ToolchainStatus{}}, + &toolchainv1alpha1.ToolchainStatus{}, handler.EnqueueRequestsFromMapFunc(unapprovedMapper.BuildMapToOldestPending(ctx)), builder.WithPredicates(&OnlyWhenAutomaticApprovalIsEnabled{ client: mgr.GetClient(), diff --git a/controllers/usersignup/usersignup_controller_test.go b/controllers/usersignup/usersignup_controller_test.go index d4dc794c9..aea9d35e4 100644 --- a/controllers/usersignup/usersignup_controller_test.go +++ b/controllers/usersignup/usersignup_controller_test.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "os" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "strings" "testing" "time" @@ -45,7 +46,6 @@ import ( corev1 "k8s.io/api/core/v1" k8serr "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" @@ -326,6 +326,7 @@ func TestDeletingUserSignupShouldNotUpdateMetrics(t *testing.T) { commonsignup.BeingDeleted(), commonsignup.WithStateLabel(toolchainv1alpha1.UserSignupStateLabelValueNotReady), commonsignup.WithAnnotation(toolchainv1alpha1.UserSignupActivationCounterAnnotationKey, "2")) + controllerutil.AddFinalizer(userSignup, toolchainv1alpha1.FinalizerName) r, req, _ := prepareReconcile(t, userSignup.Name, spaceProvisionerConfig, userSignup, baseNSTemplateTier) InitializeCounters(t, NewToolchainStatus( WithMetric(toolchainv1alpha1.UserSignupsPerActivationAndDomainMetricKey, toolchainv1alpha1.Metric{ @@ -866,7 +867,7 @@ func TestUserSignupFailedMissingTier(t *testing.T) { }) spaceProvisionerConfig := hspc.NewEnabledValidTenantSPC("member1") - objs := []runtime.Object{userSignup, v.config, spaceProvisionerConfig} + objs := []runtimeclient.Object{userSignup, v.config, spaceProvisionerConfig} if strings.Contains(v.description, "spacetier") { // when testing missing spacetier then create mur and usertier so that the error is about space tier objs = append(objs, newMasterUserRecord(userSignup, "member-1", deactivate30Tier.Name, "foo")) objs = append(objs, deactivate30Tier) @@ -1618,7 +1619,7 @@ func TestUserSignupMUROrSpaceOrSpaceBindingCreateFails(t *testing.T) { space := NewSpace(userSignup, "member1", "foo", "base") spc1 := hspc.NewEnabledValidTenantSPC("member1") - initObjs := []runtime.Object{userSignup, baseNSTemplateTier, deactivate30Tier, spc1} + initObjs := []runtimeclient.Object{userSignup, baseNSTemplateTier, deactivate30Tier, spc1} if testcase.testName == "create space error" { // mur must exist first, space is created on the reconcile after the mur is created initObjs = append(initObjs, mur) @@ -1744,7 +1745,7 @@ func TestUserSignupSetStatusApprovedByAdminFails(t *testing.T) { }), )) - fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, _ ...runtimeclient.UpdateOption) error { + fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, _ ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("failed to update UserSignup status") @@ -1790,7 +1791,7 @@ func TestUserSignupSetStatusApprovedAutomaticallyFails(t *testing.T) { }), )) - fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("failed to update UserSignup status") @@ -1835,7 +1836,7 @@ func TestUserSignupSetStatusNoClustersAvailableFails(t *testing.T) { }), )) - fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj := obj.(type) { case *toolchainv1alpha1.UserSignup: for _, cond := range obj.Status.Conditions { @@ -2656,7 +2657,7 @@ func TestUserSignupReactivateAfterDeactivated(t *testing.T) { }), )) - fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("failed to update UserSignup status") @@ -3569,7 +3570,7 @@ func TestUserSignupDeactivatedButStatusUpdateFails(t *testing.T) { }), )) - fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + fakeClient.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { switch obj.(type) { case *toolchainv1alpha1.UserSignup: return errors.New("mock error") @@ -3631,7 +3632,7 @@ func TestDeathBy100Signups(t *testing.T) { commonsignup.WithName(testusername.username), commonsignup.ApprovedManually()) spc1 := hspc.NewEnabledValidTenantSPC("member1") - initObjs := make([]runtime.Object, 0, 110) + initObjs := make([]runtimeclient.Object, 0, 110) initObjs = append(initObjs, userSignup, deactivate30Tier, @@ -4046,7 +4047,7 @@ func TestCaptchaAnnotatedWhenUserSignupBanned(t *testing.T) { userSignup.Annotations[toolchainv1alpha1.UserSignupCaptchaAnnotatedAssessmentAnnotationKey] = tc.userSignupCaptchaAnnotatedAssessmentAnnotationKey } - initObjs := []runtime.Object{userSignup, commonconfig.NewToolchainConfigObjWithReset(t, testconfig.AutomaticApproval().Enabled(true), testconfig.RegistrationService().Verification().CaptchaEnabled(tc.captchEnabled)), baseNSTemplateTier, deactivate30Tier} + initObjs := []runtimeclient.Object{userSignup, commonconfig.NewToolchainConfigObjWithReset(t, testconfig.AutomaticApproval().Enabled(true), testconfig.RegistrationService().Verification().CaptchaEnabled(tc.captchEnabled)), baseNSTemplateTier, deactivate30Tier} if tc.isBanned { bannedUser := &toolchainv1alpha1.BannedUser{ ObjectMeta: metav1.ObjectMeta{ @@ -4075,7 +4076,7 @@ func TestCaptchaAnnotatedWhenUserSignupBanned(t *testing.T) { } } -func prepareReconcile(t *testing.T, name string, initObjs ...runtime.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { +func prepareReconcile(t *testing.T, name string, initObjs ...runtimeclient.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { os.Setenv("WATCH_NAMESPACE", test.HostOperatorNs) metrics.Reset() @@ -4641,7 +4642,7 @@ func TestUserSignupLastTargetClusterAnnotation(t *testing.T) { } return nil } - cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.UpdateOption) error { + cl.MockStatusUpdate = func(ctx context.Context, obj runtimeclient.Object, opts ...runtimeclient.SubResourceUpdateOption) error { s, ok := obj.(*toolchainv1alpha1.UserSignup) if ok && s.Annotations[toolchainv1alpha1.UserSignupLastTargetClusterAnnotationKey] == "member1" { return fmt.Errorf("some error") diff --git a/controllers/usersignupcleanup/usersignup_cleanup_controller_test.go b/controllers/usersignupcleanup/usersignup_cleanup_controller_test.go index fefc6144a..769ece06d 100644 --- a/controllers/usersignupcleanup/usersignup_cleanup_controller_test.go +++ b/controllers/usersignupcleanup/usersignup_cleanup_controller_test.go @@ -22,7 +22,6 @@ import ( "github.com/stretchr/testify/require" apierrors "k8s.io/apimachinery/pkg/api/errors" corev1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -397,6 +396,7 @@ func alreadyDeletedSignupIgnored(t *testing.T, userSignup *toolchainv1alpha1.Use // Now let's simulate the situation when the signup is already being deleted and reconcile it again. nw := corev1.Now() userSignup.DeletionTimestamp = &nw + userSignup.Finalizers = append(userSignup.Finalizers, toolchainv1alpha1.FinalizerName) r, req, _ := prepareReconcile(t, userSignup.Name, userSignup) res, err := r.Reconcile(context.TODO(), req) @@ -428,7 +428,7 @@ func days(days int) time.Duration { return time.Hour * time.Duration(days*24) } -func prepareReconcile(t *testing.T, name string, initObjs ...runtime.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { // nolint: unparam +func prepareReconcile(t *testing.T, name string, initObjs ...runtimeclient.Object) (*Reconciler, reconcile.Request, *test.FakeClient) { // nolint: unparam os.Setenv("WATCH_NAMESPACE", test.HostOperatorNs) metrics.Reset() diff --git a/go.mod b/go.mod index d0d567468..274b88670 100644 --- a/go.mod +++ b/go.mod @@ -9,67 +9,58 @@ require ( github.com/go-logr/logr v1.4.1 github.com/gofrs/uuid v4.4.0+incompatible github.com/mailgun/mailgun-go/v4 v4.8.1 - // using latest commit from 'github.com/openshift/api branch release-4.12' - github.com/openshift/api v0.0.0-20230213134911-7ba313770556 + // using latest commit from 'github.com/openshift/api branch release-4.14' + github.com/openshift/api v0.0.0-20240304080513-3e8192a10b13 // using latest commit from 'github.com/openshift/library-go branch release-4.12' github.com/openshift/library-go v0.0.0-20230301092340-c13b89190a26 // indirect github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.12.2 + github.com/prometheus/client_golang v1.15.1 github.com/redhat-cop/operator-utils v1.3.3-0.20220121120056-862ef22b8cdf github.com/segmentio/analytics-go/v3 v3.2.1 github.com/spf13/cast v1.3.1 github.com/stretchr/testify v1.9.0 - go.uber.org/zap v1.21.0 + go.uber.org/zap v1.24.0 gopkg.in/h2non/gock.v1 v1.0.14 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.25.0 - k8s.io/apiextensions-apiserver v0.25.0 - k8s.io/apimachinery v0.25.0 - k8s.io/client-go v0.25.0 + k8s.io/api v0.27.2 + k8s.io/apiextensions-apiserver v0.27.2 + k8s.io/apimachinery v0.27.2 + k8s.io/client-go v0.27.2 k8s.io/klog v1.0.0 - k8s.io/klog/v2 v2.70.1 - sigs.k8s.io/controller-runtime v0.13.0 + k8s.io/klog/v2 v2.100.1 + sigs.k8s.io/controller-runtime v0.15.0 ) require ( cloud.google.com/go/auth v0.3.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect - github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.27 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect - github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect - github.com/Azure/go-autorest/logger v0.2.1 // indirect - github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/BurntSushi/toml v0.4.1 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.1.1 // indirect github.com/Masterminds/sprig/v3 v3.2.2 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect - github.com/emicklei/go-restful/v3 v3.8.0 // indirect + github.com/emicklei/go-restful/v3 v3.9.0 // indirect github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-logr/zapr v1.2.3 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect - github.com/go-openapi/swag v0.19.14 // indirect + github.com/go-logr/zapr v1.2.4 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/go-github/v52 v52.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect - github.com/google/gofuzz v1.1.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect @@ -80,8 +71,8 @@ require ( github.com/imdario/mergo v0.3.12 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/mailru/easyjson v0.7.6 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/migueleliasweb/go-github-mock v0.0.18 // indirect github.com/mitchellh/copystructure v1.0.0 // indirect github.com/mitchellh/reflectwalk v1.0.0 // indirect @@ -89,9 +80,9 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.32.1 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/client_model v0.4.0 // indirect + github.com/prometheus/common v0.42.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect github.com/segmentio/backo-go v1.0.0 // indirect github.com/shopspring/decimal v1.2.0 // indirect github.com/spf13/pflag v1.0.5 // indirect @@ -110,7 +101,7 @@ require ( golang.org/x/term v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect - gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/api v0.177.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 // indirect @@ -118,13 +109,18 @@ require ( google.golang.org/protobuf v1.34.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.25.0 // indirect - k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect + k8s.io/component-base v0.27.2 // indirect + k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/kubectl v0.24.0 // indirect - k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) +replace ( + github.com/codeready-toolchain/api v0.0.0-20240802163003-cce070815e69 => github.com/ranakan19/api v0.0.0-20240802215814-2146811fbdf7 + github.com/codeready-toolchain/toolchain-common v0.0.0-20240815144550-a209f6c3549d => github.com/ranakan19/toolchain-common v0.0.0-20240815204418-d488ba44374c +) + go 1.20 diff --git a/go.sum b/go.sum index 2a717b84f..4e69bd415 100644 --- a/go.sum +++ b/go.sum @@ -48,23 +48,12 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= -github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= -github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= -github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= -github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= @@ -82,9 +71,7 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA= github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -137,10 +124,6 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/codeready-toolchain/api v0.0.0-20240802163003-cce070815e69 h1:e6up2k4O7QdG6hu0iOwNGap60b932N0JXlweDmmvCAQ= -github.com/codeready-toolchain/api v0.0.0-20240802163003-cce070815e69/go.mod h1:ie9p4LenCCS0LsnbWp6/xwpFDdCWYE0KWzUO6Sk1g0E= -github.com/codeready-toolchain/toolchain-common v0.0.0-20240815144550-a209f6c3549d h1:t9f5qyyKkKQZMvz8L1hl00amfXo23fOcuuhmYIzsKmA= -github.com/codeready-toolchain/toolchain-common v0.0.0-20240815144550-a209f6c3549d/go.mod h1:ulg9vY3W6Lsrn84/qVneCIrTvMkBC1mzmQqGfYDv7lQ= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -167,8 +150,8 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= -github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= +github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -199,8 +182,8 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= @@ -225,25 +208,30 @@ github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTg github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v0.4.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= -github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= -github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= +github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= +github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -252,9 +240,6 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= -github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -315,8 +300,9 @@ github.com/google/go-github/v52 v52.0.0/go.mod h1:WJV6VEEUPuMo5pXqqa2ZCZEdbQqua4 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -331,6 +317,7 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= @@ -416,8 +403,9 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -433,14 +421,16 @@ github.com/mailgun/mailgun-go/v4 v4.8.1/go.mod h1:FJlF9rI5cQT+mrwujtJjPMbIVy3Ebo github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/migueleliasweb/go-github-mock v0.0.18 h1:0lWt9MYmZQGnQE2rFtjlft/YtD6hzxuN6JJRFpujzEI= github.com/migueleliasweb/go-github-mock v0.0.18/go.mod h1:CcgXcbMoRnf3rRVHqGssuBquZDIcaplxL2W6G+xs7kM= @@ -477,7 +467,6 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249/go.mod h1:mpRZBD8SJ55OIICQ3iWH0Yz3cjzA61JdqMLoWXeB2+8= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -492,16 +481,16 @@ github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9k github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= +github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/openshift/api v0.0.0-20230213134911-7ba313770556 h1:7W2fOhJicyEff24VaF7ASNzPtYvr+iSCVft4SIBAzaE= -github.com/openshift/api v0.0.0-20230213134911-7ba313770556/go.mod h1:aQ6LDasvHMvHZXqLHnX2GRmnfTWCF/iIwz8EMTTIE9A= +github.com/openshift/api v0.0.0-20240304080513-3e8192a10b13 h1:KNaEkpcVi4XGb86cA6FMJ8Wia7KWAembCUv8blIksTY= +github.com/openshift/api v0.0.0-20240304080513-3e8192a10b13/go.mod h1:yimSGmjsI+XF1mr+AKBs2//fSXIOhhetHGbMlBEfXbs= github.com/openshift/library-go v0.0.0-20230301092340-c13b89190a26 h1:vXYT3dX03Fm5FCX1284aTGoa5qBZFp3zMnIVaV9WOdg= github.com/openshift/library-go v0.0.0-20230301092340-c13b89190a26/go.mod h1:KPBAXGaq7pPmA+1wUVtKr5Axg3R68IomWDkzaOxIhxM= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -524,33 +513,41 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= +github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/ranakan19/api v0.0.0-20240802215814-2146811fbdf7 h1:mXPwQSZ50Cv24tQ2AHUcr1wwFYjx+WnVtkiM0lsyuVY= +github.com/ranakan19/api v0.0.0-20240802215814-2146811fbdf7/go.mod h1:blXQx8ZLooVqZ589EBtaAOmh13qLzGpDEnCBgjh9bv8= +github.com/ranakan19/toolchain-common v0.0.0-20240815204418-d488ba44374c h1:lCy8iQYLG2MZdBKOHkXqmJwJVmrm0eZvHjRlKMHRkIk= +github.com/ranakan19/toolchain-common v0.0.0-20240815204418-d488ba44374c/go.mod h1:dY9mptLCQXmWrDayrHhs6Ozrh0INQ/5Lqbcgywq2uy4= github.com/redhat-cop/operator-utils v1.3.3-0.20220121120056-862ef22b8cdf h1:fsZiv9XuFo8G7IyzFWjG02vqzJG7kSqFvD1Wiq3V/o8= github.com/redhat-cop/operator-utils v1.3.3-0.20220121120056-862ef22b8cdf/go.mod h1:FfTyeSCu+e2VLgeMh/1RFG8TSkVjKRPEyR6EmDt0RIw= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -669,15 +666,15 @@ go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -690,7 +687,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= @@ -889,9 +885,9 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -989,12 +985,14 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= +gomodules.xyz/jsonpatch/v2 v2.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= +gomodules.xyz/jsonpatch/v2 v2.3.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1119,8 +1117,9 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/h2non/gock.v1 v1.0.14 h1:fTeu9fcUvSnLNacYvYI54h+1/XEteDyHvrVCZEEEYNM= @@ -1161,28 +1160,28 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.22.1/go.mod h1:bh13rkTp3F1XEaLGykbyRD2QaTTzPm0e/BMd8ptFONY= k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= -k8s.io/api v0.25.0 h1:H+Q4ma2U/ww0iGB78ijZx6DRByPz6/733jIuFpX70e0= -k8s.io/api v0.25.0/go.mod h1:ttceV1GyV1i1rnmvzT3BST08N6nGt+dudGrquzVQWPk= +k8s.io/api v0.27.2 h1:+H17AJpUMvl+clT+BPnKf0E3ksMAzoBBg7CntpSuADo= +k8s.io/api v0.27.2/go.mod h1:ENmbocXfBT2ADujUXcBhHV55RIT31IIEvkntP6vZKS4= k8s.io/apiextensions-apiserver v0.22.1/go.mod h1:HeGmorjtRmRLE+Q8dJu6AYRoZccvCMsghwS8XTUYb2c= -k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= -k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= +k8s.io/apiextensions-apiserver v0.27.2 h1:iwhyoeS4xj9Y7v8YExhUwbVuBhMr3Q4bd/laClBV6Bo= +k8s.io/apiextensions-apiserver v0.27.2/go.mod h1:Oz9UdvGguL3ULgRdY9QMUzL2RZImotgxvGjdWRq6ZXQ= k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apimachinery v0.25.0 h1:MlP0r6+3XbkUG2itd6vp3oxbtdQLQI94fD5gCS+gnoU= -k8s.io/apimachinery v0.25.0/go.mod h1:qMx9eAk0sZQGsXGu86fab8tZdffHbwUfsvzqKn4mfB0= +k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= +k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= k8s.io/apiserver v0.22.1/go.mod h1:2mcM6dzSt+XndzVQJX21Gx0/Klo7Aen7i0Ai6tIa400= k8s.io/cli-runtime v0.22.1/go.mod h1:YqwGrlXeEk15Yn3em2xzr435UGwbrCw5x+COQoTYfoo= k8s.io/cli-runtime v0.24.0/go.mod h1:9XxoZDsEkRFUThnwqNviqzljtT/LdHtNWvcNFrAXl0A= k8s.io/client-go v0.22.1/go.mod h1:BquC5A4UOo4qVDUtoc04/+Nxp1MeHcVc1HJm1KmG8kk= k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= -k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E= -k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8= +k8s.io/client-go v0.27.2 h1:vDLSeuYvCHKeoQRhCXjxXO45nHVv2Ip4Fe0MfioMrhE= +k8s.io/client-go v0.27.2/go.mod h1:tY0gVmUsHrAmjzHX9zs7eCjxcBsf8IiNe7KQ52biTcQ= k8s.io/code-generator v0.22.1/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o= k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= k8s.io/component-base v0.22.1/go.mod h1:0D+Bl8rrnsPN9v0dyYvkqFfBeAd4u7n77ze+p8CMiPo= k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= -k8s.io/component-base v0.25.0 h1:haVKlLkPCFZhkcqB6WCvpVxftrg6+FK5x1ZuaIDaQ5Y= -k8s.io/component-base v0.25.0/go.mod h1:F2Sumv9CnbBlqrpdf7rKZTmmd2meJq0HizeyY/yAFxk= +k8s.io/component-base v0.27.2 h1:neju+7s/r5O4x4/txeUONNTS9r1HsPbyoPBAtHsDCpo= +k8s.io/component-base v0.27.2/go.mod h1:5UPk7EjfgrfgRIuDBFtsEFAe4DAvP3U+M8RTzoSJkpo= k8s.io/component-helpers v0.22.1/go.mod h1:QvBcDbX+qU5I2tMZABBF5fRwAlQwiv771IGBHK9WYh4= k8s.io/component-helpers v0.24.0/go.mod h1:Q2SlLm4h6g6lPTC9GMMfzdywfLSvJT2f1hOnnjaWD8c= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -1195,12 +1194,12 @@ k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= -k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= k8s.io/kubectl v0.22.1/go.mod h1:mjAOgEbMNMtZWxnfM6jd+nPjPsaoLqO5xanc78WcSbw= k8s.io/kubectl v0.24.0 h1:nA+WtMLVdXUs4wLogGd1mPTAesnLdBpCVgCmz3I7dXo= k8s.io/kubectl v0.24.0/go.mod h1:pdXkmCyHiRTqjYfyUJiXtbVNURhv0/Q1TyRhy2d5ic0= @@ -1209,18 +1208,18 @@ k8s.io/metrics v0.24.0/go.mod h1:jrLlFGdKl3X+szubOXPG0Lf2aVxuV3QJcbsgVRAM6fI= k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/controller-runtime v0.10.0/go.mod h1:GCdh6kqV6IY4LK0JLwX0Zm6g233RtVGdb/f0+KSfprg= -sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ= -sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= +sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= +sigs.k8s.io/controller-runtime v0.15.0/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g= sigs.k8s.io/kustomize/api v0.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI= sigs.k8s.io/kustomize/cmd/config v0.9.13/go.mod h1:7547FLF8W/lTaDf0BDqFTbZxM9zqwEJqCKN9sSR0xSs= diff --git a/main.go b/main.go index 71bec74f7..35388b621 100644 --- a/main.go +++ b/main.go @@ -460,7 +460,7 @@ func addMemberClusters(mgr ctrl.Manager, cl runtimeclient.Client, namespace stri // for some resources like SpaceRequest/SpaceBindingRequest we need the cache to be clustered scoped // because those resources are in user namespaces and not member operator namespace. if namespacedCache { - options.Namespace = memberConfig.OperatorNamespace + options.Cache.Namespaces = []string{memberConfig.OperatorNamespace} } }) if err != nil { diff --git a/pkg/counter/cache_test.go b/pkg/counter/cache_test.go index 96d688c0c..f12f606a0 100644 --- a/pkg/counter/cache_test.go +++ b/pkg/counter/cache_test.go @@ -2,6 +2,7 @@ package counter_test import ( "context" + runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" "sync" "testing" @@ -17,7 +18,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "k8s.io/apimachinery/pkg/runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" ) @@ -308,7 +308,7 @@ func TestInitializeCounterByLoadingExistingResources(t *testing.T) { "chocolate": 2, }), ) - initObjs := append([]runtime.Object{}, murs...) + initObjs := append([]runtimeclient.Object{}, murs...) initObjs = append(initObjs, usersignups...) initObjs = append(initObjs, spaces...) @@ -367,7 +367,7 @@ func TestForceInitializeCounterByLoadingExistingResources(t *testing.T) { ) // ... but config flag will force synchronization from resources toolchainConfig := commonconfig.NewToolchainConfigObjWithReset(t, testconfig.Metrics().ForceSynchronization(true)) - initObjs := append([]runtime.Object{}, murs...) + initObjs := append([]runtimeclient.Object{}, murs...) initObjs = append(initObjs, usersignups...) initObjs = append(initObjs, toolchainConfig) initObjs = append(initObjs, spaces...) @@ -409,7 +409,7 @@ func TestShouldNotInitializeAgain(t *testing.T) { spaces := CreateMultipleSpaces("user-", 10, "member-1") toolchainStatus := NewToolchainStatus( WithMember("member-1", WithSpaceCount(0))) - initObjs := append([]runtime.Object{}, murs...) + initObjs := append([]runtimeclient.Object{}, murs...) initObjs = append(initObjs, spaces...) InitializeCounters(t, toolchainStatus, initObjs...) fakeClient := test.NewFakeClient(t, initObjs...) @@ -442,7 +442,7 @@ func TestMultipleExecutionsInParallel(t *testing.T) { toolchainStatus := NewToolchainStatus( WithMember("member-1", WithSpaceCount(0)), WithMember("member-2", WithSpaceCount(0))) - initObjs := append([]runtime.Object{}, murs...) + initObjs := append([]runtimeclient.Object{}, murs...) initObjs = append(initObjs, spaces...) InitializeCounters(t, toolchainStatus, initObjs...) fakeClient := test.NewFakeClient(t, initObjs...) diff --git a/pkg/mapper/by_resource_name.go b/pkg/mapper/by_resource_name.go index 6a53ab0f1..c681a9447 100644 --- a/pkg/mapper/by_resource_name.go +++ b/pkg/mapper/by_resource_name.go @@ -1,13 +1,14 @@ package mapper import ( + "context" "k8s.io/apimachinery/pkg/types" runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) -func MapByResourceName(hostNamespace string) func(object runtimeclient.Object) []reconcile.Request { - return func(obj runtimeclient.Object) []reconcile.Request { +func MapByResourceName(hostNamespace string) func(ctx context.Context, object runtimeclient.Object) []reconcile.Request { + return func(ctx context.Context, obj runtimeclient.Object) []reconcile.Request { return []reconcile.Request{{ NamespacedName: types.NamespacedName{Namespace: hostNamespace, Name: obj.GetName()}, }} diff --git a/pkg/mapper/by_resource_name_test.go b/pkg/mapper/by_resource_name_test.go index 9f093c2aa..2387539c1 100644 --- a/pkg/mapper/by_resource_name_test.go +++ b/pkg/mapper/by_resource_name_test.go @@ -1,6 +1,7 @@ package mapper import ( + "context" "testing" toolchainv1alpha1 "github.com/codeready-toolchain/api/api/v1alpha1" @@ -18,7 +19,7 @@ func TestMapNSTemplateSet(t *testing.T) { }, } // when - req := MapByResourceName("host-operator")(NSTemplateSet) + req := MapByResourceName("host-operator")(context.TODO(), NSTemplateSet) // then require.Len(t, req, 1) @@ -37,7 +38,7 @@ func TestMapUserAccount(t *testing.T) { }, } // when - req := MapByResourceName("host-operator")(userAccount) + req := MapByResourceName("host-operator")(context.TODO(), userAccount) // then require.Len(t, req, 1) diff --git a/pkg/pending/cache_test.go b/pkg/pending/cache_test.go index ecadf9320..01f5beade 100644 --- a/pkg/pending/cache_test.go +++ b/pkg/pending/cache_test.go @@ -14,7 +14,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes/scheme" runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -292,7 +291,7 @@ func TestGetOldestPendingApprovalWithMultipleUserSignupsInParallel(t *testing.T) assert.Nil(t, foundPending) } -func newCache(t *testing.T, objectType runtimeclient.Object, listPendingObjects ListPendingObjects, initObjects ...runtime.Object) (*cache, *test.FakeClient) { +func newCache(t *testing.T, objectType runtimeclient.Object, listPendingObjects ListPendingObjects, initObjects ...runtimeclient.Object) (*cache, *test.FakeClient) { s := scheme.Scheme err := apis.AddToScheme(s) require.NoError(t, err) diff --git a/pkg/pending/mapper.go b/pkg/pending/mapper.go index 08e799978..2c90b84f8 100644 --- a/pkg/pending/mapper.go +++ b/pkg/pending/mapper.go @@ -38,7 +38,7 @@ func NewPendingObjectsMapper(client runtimeclient.Client, objectType runtimeclie } func (b ObjectsMapper) BuildMapToOldestPending(ctx context.Context) handler.MapFunc { - return func(obj runtimeclient.Object) []reconcile.Request { + return func(context context.Context, obj runtimeclient.Object) []reconcile.Request { return b.MapToOldestPending(ctx, obj) } } diff --git a/test/counter.go b/test/counter.go index 37cc1a46e..608a38556 100644 --- a/test/counter.go +++ b/test/counter.go @@ -16,10 +16,10 @@ import ( metricscommon "github.com/codeready-toolchain/toolchain-common/pkg/test/metrics" spacetest "github.com/codeready-toolchain/toolchain-common/pkg/test/space" commonsignup "github.com/codeready-toolchain/toolchain-common/pkg/test/usersignup" + runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "k8s.io/apimachinery/pkg/runtime" ) type CounterAssertion struct { @@ -69,16 +69,16 @@ func (a *CounterAssertion) HaveMasterUserRecordsPerDomain(expected toolchainv1al return a } -func CreateMultipleMurs(t *testing.T, prefix string, number int, targetCluster string) []runtime.Object { - murs := make([]runtime.Object, number) +func CreateMultipleMurs(t *testing.T, prefix string, number int, targetCluster string) []runtimeclient.Object { + murs := make([]runtimeclient.Object, number) for index := range murs { murs[index] = masteruserrecord.NewMasterUserRecord(t, fmt.Sprintf("%s%d", prefix, index), masteruserrecord.TargetCluster(targetCluster)) } return murs } -func CreateMultipleUserSignups(prefix string, number int) []runtime.Object { - usersignups := make([]runtime.Object, number) +func CreateMultipleUserSignups(prefix string, number int) []runtimeclient.Object { + usersignups := make([]runtimeclient.Object, number) for index := range usersignups { usersignups[index] = commonsignup.NewUserSignup( commonsignup.WithName(fmt.Sprintf("%s%d", prefix, index)), @@ -88,15 +88,15 @@ func CreateMultipleUserSignups(prefix string, number int) []runtime.Object { return usersignups } -func CreateMultipleSpaces(prefix string, number int, targetCluster string) []runtime.Object { - spaces := make([]runtime.Object, number) +func CreateMultipleSpaces(prefix string, number int, targetCluster string) []runtimeclient.Object { + spaces := make([]runtimeclient.Object, number) for index := range spaces { spaces[index] = spacetest.NewSpace(commontest.HostOperatorNs, fmt.Sprintf("%s%d", prefix, index), spacetest.WithSpecTargetCluster(targetCluster)) } return spaces } -func InitializeCounters(t *testing.T, toolchainStatus *toolchainv1alpha1.ToolchainStatus, initObjs ...runtime.Object) { +func InitializeCounters(t *testing.T, toolchainStatus *toolchainv1alpha1.ToolchainStatus, initObjs ...runtimeclient.Object) { os.Setenv("WATCH_NAMESPACE", commontest.HostOperatorNs) counter.Reset() t.Cleanup(counter.Reset)