Skip to content

Commit f0d488a

Browse files
authored
tools/scaffolder: fix and simplify indexer generation (#2985)
1 parent 2c8cbcf commit f0d488a

File tree

13 files changed

+239
-226
lines changed

13 files changed

+239
-226
lines changed

internal/generated/controller/cluster/handler.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
atlas "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/atlas"
3131
reconciler "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/reconciler"
3232
indexers "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/generated/indexers"
33-
indexer "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/indexer"
3433
akov2generated "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
3534
ctrlstate "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/controller/state"
3635
result "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/result"
@@ -151,16 +150,9 @@ func (h *Handler) For() (client.Object, builder.Predicates) {
151150
obj := &akov2generated.Cluster{}
152151
return obj, builder.WithPredicates(h.predicates...)
153152
}
154-
func (h *Handler) clusterForGroupMapFunc() handler.MapFunc {
155-
return indexer.ProjectsIndexMapperFunc(indexers.ClusterByGroupIndex, func() *akov2generated.ClusterList {
156-
return &akov2generated.ClusterList{}
157-
}, indexers.ClusterRequestsFromGroup, h.Client, h.Log)
158-
}
159-
160-
// SetupWithManager sets up the controller with the Manager
161153
func (h *Handler) SetupWithManager(mgr controllerruntime.Manager, rec reconcile.Reconciler, defaultOptions controller.Options) error {
162154
h.Client = mgr.GetClient()
163-
return controllerruntime.NewControllerManagedBy(mgr).Named("Cluster").For(h.For()).Watches(&akov2generated.Group{}, handler.EnqueueRequestsFromMapFunc(h.clusterForGroupMapFunc()), builder.WithPredicates(predicate.ResourceVersionChangedPredicate{})).WithOptions(defaultOptions).Complete(rec)
155+
return controllerruntime.NewControllerManagedBy(mgr).Named("Cluster").For(h.For()).Watches(&akov2generated.Group{}, handler.EnqueueRequestsFromMapFunc(indexers.NewClusterByGroupMapFunc(h.Client)), builder.WithPredicates(predicate.ResourceVersionChangedPredicate{})).WithOptions(defaultOptions).Complete(rec)
164156
}
165157

166158
// getSDKClientSet creates an Atlas SDK client set using credentials from the resource's connection secret

internal/generated/controller/databaseuser/handler.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
atlas "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/atlas"
3131
reconciler "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/reconciler"
3232
indexers "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/generated/indexers"
33-
indexer "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/indexer"
3433
akov2generated "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
3534
ctrlstate "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/controller/state"
3635
result "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/result"
@@ -151,16 +150,9 @@ func (h *Handler) For() (client.Object, builder.Predicates) {
151150
obj := &akov2generated.DatabaseUser{}
152151
return obj, builder.WithPredicates(h.predicates...)
153152
}
154-
func (h *Handler) databaseuserForGroupMapFunc() handler.MapFunc {
155-
return indexer.ProjectsIndexMapperFunc(indexers.DatabaseUserByGroupIndex, func() *akov2generated.DatabaseUserList {
156-
return &akov2generated.DatabaseUserList{}
157-
}, indexers.DatabaseUserRequestsFromGroup, h.Client, h.Log)
158-
}
159-
160-
// SetupWithManager sets up the controller with the Manager
161153
func (h *Handler) SetupWithManager(mgr controllerruntime.Manager, rec reconcile.Reconciler, defaultOptions controller.Options) error {
162154
h.Client = mgr.GetClient()
163-
return controllerruntime.NewControllerManagedBy(mgr).Named("DatabaseUser").For(h.For()).Watches(&akov2generated.Group{}, handler.EnqueueRequestsFromMapFunc(h.databaseuserForGroupMapFunc()), builder.WithPredicates(predicate.ResourceVersionChangedPredicate{})).WithOptions(defaultOptions).Complete(rec)
155+
return controllerruntime.NewControllerManagedBy(mgr).Named("DatabaseUser").For(h.For()).Watches(&akov2generated.Group{}, handler.EnqueueRequestsFromMapFunc(indexers.NewDatabaseUserByGroupMapFunc(h.Client)), builder.WithPredicates(predicate.ResourceVersionChangedPredicate{})).WithOptions(defaultOptions).Complete(rec)
164156
}
165157

166158
// getSDKClientSet creates an Atlas SDK client set using credentials from the resource's connection secret

internal/generated/controller/flexcluster/handler.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
atlas "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/atlas"
3131
reconciler "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/controller/reconciler"
3232
indexers "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/generated/indexers"
33-
indexer "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/indexer"
3433
akov2generated "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
3534
ctrlstate "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/controller/state"
3635
result "github.com/mongodb/mongodb-atlas-kubernetes/v2/pkg/result"
@@ -151,16 +150,9 @@ func (h *Handler) For() (client.Object, builder.Predicates) {
151150
obj := &akov2generated.FlexCluster{}
152151
return obj, builder.WithPredicates(h.predicates...)
153152
}
154-
func (h *Handler) flexclusterForGroupMapFunc() handler.MapFunc {
155-
return indexer.ProjectsIndexMapperFunc(indexers.FlexClusterByGroupIndex, func() *akov2generated.FlexClusterList {
156-
return &akov2generated.FlexClusterList{}
157-
}, indexers.FlexClusterRequestsFromGroup, h.Client, h.Log)
158-
}
159-
160-
// SetupWithManager sets up the controller with the Manager
161153
func (h *Handler) SetupWithManager(mgr controllerruntime.Manager, rec reconcile.Reconciler, defaultOptions controller.Options) error {
162154
h.Client = mgr.GetClient()
163-
return controllerruntime.NewControllerManagedBy(mgr).Named("FlexCluster").For(h.For()).Watches(&akov2generated.Group{}, handler.EnqueueRequestsFromMapFunc(h.flexclusterForGroupMapFunc()), builder.WithPredicates(predicate.ResourceVersionChangedPredicate{})).WithOptions(defaultOptions).Complete(rec)
155+
return controllerruntime.NewControllerManagedBy(mgr).Named("FlexCluster").For(h.For()).Watches(&akov2generated.Group{}, handler.EnqueueRequestsFromMapFunc(indexers.NewFlexClusterByGroupMapFunc(h.Client)), builder.WithPredicates(predicate.ResourceVersionChangedPredicate{})).WithOptions(defaultOptions).Complete(rec)
164156
}
165157

166158
// getSDKClientSet creates an Atlas SDK client set using credentials from the resource's connection secret

internal/generated/controller/group/handler.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,6 @@ func (h *Handler) For() (client.Object, builder.Predicates) {
147147
obj := &akov2generated.Group{}
148148
return obj, builder.WithPredicates(h.predicates...)
149149
}
150-
151-
// SetupWithManager sets up the controller with the Manager
152150
func (h *Handler) SetupWithManager(mgr controllerruntime.Manager, rec reconcile.Reconciler, defaultOptions controller.Options) error {
153151
h.Client = mgr.GetClient()
154152
return controllerruntime.NewControllerManagedBy(mgr).Named("Group").For(h.For()).WithOptions(defaultOptions).Complete(rec)

internal/generated/indexers/clusterbygroup.go

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,14 @@
1515
package indexer
1616

1717
import (
18+
"context"
19+
1820
zap "go.uber.org/zap"
21+
fields "k8s.io/apimachinery/pkg/fields"
1922
types "k8s.io/apimachinery/pkg/types"
2023
client "sigs.k8s.io/controller-runtime/pkg/client"
24+
handler "sigs.k8s.io/controller-runtime/pkg/handler"
25+
log "sigs.k8s.io/controller-runtime/pkg/log"
2126
reconcile "sigs.k8s.io/controller-runtime/pkg/reconcile"
2227

2328
v1 "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
@@ -56,13 +61,31 @@ func (i *ClusterByGroupIndexer) Keys(object client.Object) []string {
5661
}
5762
return keys
5863
}
59-
func ClusterRequestsFromGroup(list *v1.ClusterList) []reconcile.Request {
60-
requests := make([]reconcile.Request, 0, len(list.Items))
61-
for _, item := range list.Items {
62-
requests = append(requests, reconcile.Request{NamespacedName: types.NamespacedName{
63-
Name: item.Name,
64-
Namespace: item.Namespace,
65-
}})
64+
65+
func NewClusterByGroupMapFunc(kubeClient client.Client) handler.MapFunc {
66+
return func(ctx context.Context, obj client.Object) []reconcile.Request {
67+
logger := log.FromContext(ctx)
68+
69+
listOpts := &client.ListOptions{FieldSelector: fields.OneTermEqualSelector(ClusterByGroupIndex, types.NamespacedName{
70+
Name: obj.GetName(),
71+
Namespace: obj.GetNamespace(),
72+
}.String())}
73+
74+
list := &v1.ClusterList{}
75+
err := kubeClient.List(ctx, list, listOpts)
76+
if err != nil {
77+
logger.Error(err, "failed to list Cluster objects")
78+
return nil
79+
}
80+
81+
requests := make([]reconcile.Request, 0, len(list.Items))
82+
for _, item := range list.Items {
83+
requests = append(requests, reconcile.Request{NamespacedName: types.NamespacedName{
84+
Name: item.Name,
85+
Namespace: item.Namespace,
86+
}})
87+
}
88+
89+
return requests
6690
}
67-
return requests
6891
}

internal/generated/indexers/databaseuserbygroup.go

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,14 @@
1515
package indexer
1616

1717
import (
18+
"context"
19+
1820
zap "go.uber.org/zap"
21+
fields "k8s.io/apimachinery/pkg/fields"
1922
types "k8s.io/apimachinery/pkg/types"
2023
client "sigs.k8s.io/controller-runtime/pkg/client"
24+
handler "sigs.k8s.io/controller-runtime/pkg/handler"
25+
log "sigs.k8s.io/controller-runtime/pkg/log"
2126
reconcile "sigs.k8s.io/controller-runtime/pkg/reconcile"
2227

2328
v1 "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
@@ -56,13 +61,31 @@ func (i *DatabaseUserByGroupIndexer) Keys(object client.Object) []string {
5661
}
5762
return keys
5863
}
59-
func DatabaseUserRequestsFromGroup(list *v1.DatabaseUserList) []reconcile.Request {
60-
requests := make([]reconcile.Request, 0, len(list.Items))
61-
for _, item := range list.Items {
62-
requests = append(requests, reconcile.Request{NamespacedName: types.NamespacedName{
63-
Name: item.Name,
64-
Namespace: item.Namespace,
65-
}})
64+
65+
func NewDatabaseUserByGroupMapFunc(kubeClient client.Client) handler.MapFunc {
66+
return func(ctx context.Context, obj client.Object) []reconcile.Request {
67+
logger := log.FromContext(ctx)
68+
69+
listOpts := &client.ListOptions{FieldSelector: fields.OneTermEqualSelector(DatabaseUserByGroupIndex, types.NamespacedName{
70+
Name: obj.GetName(),
71+
Namespace: obj.GetNamespace(),
72+
}.String())}
73+
74+
list := &v1.DatabaseUserList{}
75+
err := kubeClient.List(ctx, list, listOpts)
76+
if err != nil {
77+
logger.Error(err, "failed to list DatabaseUser objects")
78+
return nil
79+
}
80+
81+
requests := make([]reconcile.Request, 0, len(list.Items))
82+
for _, item := range list.Items {
83+
requests = append(requests, reconcile.Request{NamespacedName: types.NamespacedName{
84+
Name: item.Name,
85+
Namespace: item.Namespace,
86+
}})
87+
}
88+
89+
return requests
6690
}
67-
return requests
6891
}

internal/generated/indexers/flexclusterbygroup.go

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,14 @@
1515
package indexer
1616

1717
import (
18+
"context"
19+
1820
zap "go.uber.org/zap"
21+
fields "k8s.io/apimachinery/pkg/fields"
1922
types "k8s.io/apimachinery/pkg/types"
2023
client "sigs.k8s.io/controller-runtime/pkg/client"
24+
handler "sigs.k8s.io/controller-runtime/pkg/handler"
25+
log "sigs.k8s.io/controller-runtime/pkg/log"
2126
reconcile "sigs.k8s.io/controller-runtime/pkg/reconcile"
2227

2328
v1 "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/nextapi/generated/v1"
@@ -56,13 +61,31 @@ func (i *FlexClusterByGroupIndexer) Keys(object client.Object) []string {
5661
}
5762
return keys
5863
}
59-
func FlexClusterRequestsFromGroup(list *v1.FlexClusterList) []reconcile.Request {
60-
requests := make([]reconcile.Request, 0, len(list.Items))
61-
for _, item := range list.Items {
62-
requests = append(requests, reconcile.Request{NamespacedName: types.NamespacedName{
63-
Name: item.Name,
64-
Namespace: item.Namespace,
65-
}})
64+
65+
func NewFlexClusterByGroupMapFunc(kubeClient client.Client) handler.MapFunc {
66+
return func(ctx context.Context, obj client.Object) []reconcile.Request {
67+
logger := log.FromContext(ctx)
68+
69+
listOpts := &client.ListOptions{FieldSelector: fields.OneTermEqualSelector(FlexClusterByGroupIndex, types.NamespacedName{
70+
Name: obj.GetName(),
71+
Namespace: obj.GetNamespace(),
72+
}.String())}
73+
74+
list := &v1.FlexClusterList{}
75+
err := kubeClient.List(ctx, list, listOpts)
76+
if err != nil {
77+
logger.Error(err, "failed to list FlexCluster objects")
78+
return nil
79+
}
80+
81+
requests := make([]reconcile.Request, 0, len(list.Items))
82+
for _, item := range list.Items {
83+
requests = append(requests, reconcile.Request{NamespacedName: types.NamespacedName{
84+
Name: item.Name,
85+
Namespace: item.Namespace,
86+
}})
87+
}
88+
89+
return requests
6690
}
67-
return requests
6891
}

internal/indexer/indexer.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"sigs.k8s.io/controller-runtime/pkg/client"
2323
"sigs.k8s.io/controller-runtime/pkg/cluster"
2424

25+
indexer "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/generated/indexers"
2526
"github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/version"
2627
)
2728

@@ -76,6 +77,7 @@ func RegisterAll(ctx context.Context, c cluster.Cluster, logger *zap.Logger) err
7677
// add experimental indexers here
7778
indexers = append(indexers,
7879
NewAtlasDataFederationByProjectIDIndexer(ctx, c.GetClient(), logger),
80+
indexer.NewFlexClusterByGroupIndexer(logger),
7981
)
8082
}
8183
return Register(ctx, c, indexers...)

0 commit comments

Comments
 (0)