diff --git a/controller/konnect/watch.go b/controller/konnect/watch.go index 32f24800..e3ec24b3 100644 --- a/controller/konnect/watch.go +++ b/controller/konnect/watch.go @@ -5,6 +5,7 @@ import ( "fmt" "reflect" + "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" ctrllog "sigs.k8s.io/controller-runtime/pkg/log" @@ -106,3 +107,27 @@ func controlPlaneIsRefKonnectNamespacedRef[ } return cpRef, cpRef.Type == configurationv1alpha1.ControlPlaneRefKonnectNamespacedRef } + +// objectListToReconcileRequests converts a list of objects to a list of reconcile requests. +func objectListToReconcileRequests[ + T any, + TPtr interface { + *T + client.Object + }, +]( + items []T, +) []ctrl.Request { + ret := make([]ctrl.Request, 0, len(items)) + for _, item := range items { + var e TPtr = &item + ret = append(ret, ctrl.Request{ + NamespacedName: types.NamespacedName{ + Namespace: e.GetNamespace(), + Name: e.GetName(), + }, + }) + } + + return ret +} diff --git a/controller/konnect/watch_credentialacl.go b/controller/konnect/watch_credentialacl.go index c60b27fc..cddbc791 100644 --- a/controller/konnect/watch_credentialacl.go +++ b/controller/konnect/watch_credentialacl.go @@ -205,16 +205,6 @@ func kongCredentialACLForKongConsumer( return nil } - var ret []reconcile.Request - for _, cred := range l.Items { - ret = append(ret, reconcile.Request{ - NamespacedName: types.NamespacedName{ - Namespace: cred.Namespace, - Name: cred.Name, - }, - }, - ) - } - return ret + return objectListToReconcileRequests(l.Items) } } diff --git a/controller/konnect/watch_credentialapikey.go b/controller/konnect/watch_credentialapikey.go index 975d7782..976d5639 100644 --- a/controller/konnect/watch_credentialapikey.go +++ b/controller/konnect/watch_credentialapikey.go @@ -205,16 +205,6 @@ func kongCredentialAPIKeyForKongConsumer( return nil } - var ret []reconcile.Request - for _, cred := range l.Items { - ret = append(ret, reconcile.Request{ - NamespacedName: types.NamespacedName{ - Namespace: cred.Namespace, - Name: cred.Name, - }, - }, - ) - } - return ret + return objectListToReconcileRequests(l.Items) } } diff --git a/controller/konnect/watch_credentialbasicauth.go b/controller/konnect/watch_credentialbasicauth.go index 4cbb9359..d889feba 100644 --- a/controller/konnect/watch_credentialbasicauth.go +++ b/controller/konnect/watch_credentialbasicauth.go @@ -205,16 +205,6 @@ func kongCredentialBasicAuthForKongConsumer( return nil } - var ret []reconcile.Request - for _, cred := range l.Items { - ret = append(ret, reconcile.Request{ - NamespacedName: types.NamespacedName{ - Namespace: cred.Namespace, - Name: cred.Name, - }, - }, - ) - } - return ret + return objectListToReconcileRequests(l.Items) } } diff --git a/controller/konnect/watch_credentialjwt.go b/controller/konnect/watch_credentialjwt.go index 1fdc314f..0f812a95 100644 --- a/controller/konnect/watch_credentialjwt.go +++ b/controller/konnect/watch_credentialjwt.go @@ -205,16 +205,6 @@ func kongCredentialJWTForKongConsumer( return nil } - var ret []reconcile.Request - for _, cred := range l.Items { - ret = append(ret, reconcile.Request{ - NamespacedName: types.NamespacedName{ - Namespace: cred.Namespace, - Name: cred.Name, - }, - }, - ) - } - return ret + return objectListToReconcileRequests(l.Items) } } diff --git a/controller/konnect/watch_kongconsumer.go b/controller/konnect/watch_kongconsumer.go index 688fd340..99c025e1 100644 --- a/controller/konnect/watch_kongconsumer.go +++ b/controller/konnect/watch_kongconsumer.go @@ -4,7 +4,6 @@ import ( "context" "fmt" - "github.com/samber/lo" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -215,13 +214,7 @@ func enqueueKongConsumerForKongConsumerGroup( }); err != nil { return nil } - return lo.Map(l.Items, func(consumer configurationv1.KongConsumer, _ int) reconcile.Request { - return reconcile.Request{ - NamespacedName: types.NamespacedName{ - Namespace: consumer.Namespace, - Name: consumer.Name, - }, - } - }) + + return objectListToReconcileRequests(l.Items) } } diff --git a/controller/konnect/watch_kongsni.go b/controller/konnect/watch_kongsni.go index 029dd4e4..57b17668 100644 --- a/controller/konnect/watch_kongsni.go +++ b/controller/konnect/watch_kongsni.go @@ -55,7 +55,7 @@ func kongSNIRefersToKonnectGatewayControlPlane( return true } - return cert.Spec.ControlPlaneRef != nil && cert.Spec.ControlPlaneRef.Type == configurationv1alpha1.ControlPlaneRefKonnectNamespacedRef + return objHasControlPlaneRefKonnectNamespacedRef(&cert) } } @@ -82,15 +82,6 @@ func enqueueKongSNIForKongCertificate( return nil } - ret := make([]reconcile.Request, 0, len(sniList.Items)) - for _, sni := range sniList.Items { - ret = append(ret, reconcile.Request{ - NamespacedName: types.NamespacedName{ - Namespace: sni.Namespace, - Name: sni.Name, - }, - }) - } - return ret + return objectListToReconcileRequests(sniList.Items) } } diff --git a/controller/konnect/watch_test.go b/controller/konnect/watch_test.go index bb2f096b..1eceb323 100644 --- a/controller/konnect/watch_test.go +++ b/controller/konnect/watch_test.go @@ -4,6 +4,7 @@ import ( "testing" "github.com/stretchr/testify/require" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fakectrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client/fake" "github.com/kong/gateway-operator/controller/konnect/constraints" @@ -41,3 +42,41 @@ func testReconciliationWatchOptionsForEntity[ _ = watchOptions }) } + +func TestObjectListToReconcileRequests(t *testing.T) { + t.Run("KongConsumer", func(t *testing.T) { + tests := []struct { + name string + list []configurationv1.KongConsumer + }{ + { + name: "KongConsumer", + list: []configurationv1.KongConsumer{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "consumer1", + Namespace: "default", + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "consumer2", + Namespace: "default", + }, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + requests := objectListToReconcileRequests(tt.list) + require.Len(t, requests, len(tt.list)) + for i, item := range tt.list { + require.Equal(t, item.GetName(), requests[i].Name) + require.Equal(t, item.GetNamespace(), requests[i].Namespace) + } + }) + } + }) +}