Skip to content

Commit e5d48d2

Browse files
authored
CLOUDP-332090/proper-pagination (#119)
* fix: pagination fix for ipAcessList * fix: pagination fix for clusters * fix: pagination fix for flex clusters * fix: pagination fix for database users * fix: pagination fix for identity providers in federated auth * fix: pagination fix for third party integrations * fix: pagination fix for network containers * fix: pagination fix for serverless instances (deprecated) * fix: pagination fix for streams * fix: pagination fix for alert configurations * chore: clean and scale up tests * chore: clean up project pagination * chore: clean-up code after fetching all pages
1 parent e38e28c commit e5d48d2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1027
-734
lines changed

internal/kubernetes/operator/config_exporter.go

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828
"github.com/mongodb/atlas-cli-plugin-kubernetes/internal/kubernetes/operator/project"
2929
"github.com/mongodb/atlas-cli-plugin-kubernetes/internal/kubernetes/operator/resources"
3030
"github.com/mongodb/atlas-cli-plugin-kubernetes/internal/kubernetes/operator/streamsprocessing"
31-
"github.com/mongodb/atlas-cli-plugin-kubernetes/internal/pointer"
3231
"github.com/mongodb/atlas-cli-plugin-kubernetes/internal/store"
3332
"go.mongodb.org/atlas-sdk/v20241113004/admin"
3433
"k8s.io/apimachinery/pkg/runtime"
@@ -448,17 +447,12 @@ func fetchClusterNames(clustersProvider store.AllClustersLister, projectID strin
448447
result := make([]string, 0, DefaultClustersCount)
449448

450449
flexResult := make(map[string]struct{}, DefaultClustersCount)
451-
flexClusters, err := clustersProvider.ListFlexClusters(
452-
&admin.ListFlexClustersApiParams{
453-
GroupId: projectID,
454-
ItemsPerPage: pointer.Get(maxClusters),
455-
},
456-
)
450+
flexClusters, err := clustersProvider.ListFlexClusters(projectID)
457451
if err != nil {
458452
return nil, err
459453
}
460454

461-
for _, cluster := range flexClusters.GetResults() {
455+
for _, cluster := range flexClusters {
462456
if reflect.ValueOf(cluster).IsZero() {
463457
continue
464458
}
@@ -467,7 +461,7 @@ func fetchClusterNames(clustersProvider store.AllClustersLister, projectID strin
467461
flexResult[cluster.GetName()] = struct{}{}
468462
}
469463

470-
clusters, err := clustersProvider.ProjectClusters(projectID, &store.ListOptions{ItemsPerPage: maxClusters})
464+
clusters, err := clustersProvider.ListAtlasClusters(projectID)
471465
if err != nil {
472466
return nil, err
473467
}
@@ -476,7 +470,7 @@ func fetchClusterNames(clustersProvider store.AllClustersLister, projectID strin
476470
return nil, ErrNoCloudManagerClusters
477471
}
478472

479-
for _, cluster := range clusters.GetResults() {
473+
for _, cluster := range clusters {
480474
if reflect.ValueOf(cluster).IsZero() {
481475
continue
482476
}
@@ -489,7 +483,7 @@ func fetchClusterNames(clustersProvider store.AllClustersLister, projectID strin
489483
result = append(result, cluster.GetName())
490484
}
491485

492-
serverlessInstances, err := clustersProvider.ServerlessInstances(projectID, &store.ListOptions{ItemsPerPage: maxClusters})
486+
serverlessInstances, err := clustersProvider.ServerlessInstances(projectID)
493487
if err != nil {
494488
return nil, err
495489
}
@@ -498,7 +492,7 @@ func fetchClusterNames(clustersProvider store.AllClustersLister, projectID strin
498492
return result, nil
499493
}
500494

501-
for _, cluster := range serverlessInstances.GetResults() {
495+
for _, cluster := range serverlessInstances {
502496
// Deduplicate non-migrated instances
503497
if _, ok := flexResult[cluster.GetName()]; ok {
504498
continue
@@ -552,11 +546,11 @@ func (e *ConfigExporter) exportAtlasStreamProcessing(projectName string) ([]runt
552546
return nil, nil
553547
}
554548

555-
instancesList, err := e.dataProvider.ProjectStreams(&admin.ListStreamInstancesApiParams{GroupId: e.projectID})
549+
instancesList, err := e.dataProvider.ProjectStreams(e.projectID)
556550
if err != nil {
557551
return nil, err
558552
}
559-
instances := instancesList.GetResults()
553+
instances := instancesList
560554
result := make([]runtime.Object, 0, len(instances))
561555

562556
for i := range instances {

internal/kubernetes/operator/config_exporter_test.go

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ func TestExportAtlasStreamProcessing(t *testing.T) {
151151
ctl := gomock.NewController(t)
152152
atlasOperatorGenericStore := mocks.NewMockOperatorGenericStore(ctl)
153153
atlasOperatorGenericStore.EXPECT().
154-
ProjectStreams(&admin.ListStreamInstancesApiParams{GroupId: projectID}).
154+
ProjectStreams(projectID).
155155
Return(nil, errors.New("failed to list streams instances"))
156156

157157
featureValidator := mocks.NewMockFeatureValidator(ctl)
@@ -174,8 +174,8 @@ func TestExportAtlasStreamProcessing(t *testing.T) {
174174
ctl := gomock.NewController(t)
175175
atlasOperatorGenericStore := mocks.NewMockOperatorGenericStore(ctl)
176176
atlasOperatorGenericStore.EXPECT().
177-
ProjectStreams(&admin.ListStreamInstancesApiParams{GroupId: projectID}).
178-
Return(&admin.PaginatedApiStreamsTenant{Results: &[]admin.StreamsTenant{{Name: pointer.Get("instance-0")}}}, nil)
177+
ProjectStreams(projectID).
178+
Return([]admin.StreamsTenant{{Name: pointer.Get("instance-0")}}, nil)
179179
atlasOperatorGenericStore.EXPECT().
180180
StreamsConnections(projectID, "instance-0").
181181
Return(nil, errors.New("failed to list streams connections"))
@@ -200,8 +200,8 @@ func TestExportAtlasStreamProcessing(t *testing.T) {
200200
ctl := gomock.NewController(t)
201201
atlasOperatorGenericStore := mocks.NewMockOperatorGenericStore(ctl)
202202
atlasOperatorGenericStore.EXPECT().
203-
ProjectStreams(&admin.ListStreamInstancesApiParams{GroupId: projectID}).
204-
Return(&admin.PaginatedApiStreamsTenant{Results: &[]admin.StreamsTenant{{Name: pointer.Get("instance-0")}}}, nil)
203+
ProjectStreams(projectID).
204+
Return([]admin.StreamsTenant{{Name: pointer.Get("instance-0")}}, nil)
205205
atlasOperatorGenericStore.EXPECT().
206206
StreamsConnections(projectID, "instance-0").
207207
Return(
@@ -233,25 +233,22 @@ func TestExportAtlasStreamProcessing(t *testing.T) {
233233
ctl := gomock.NewController(t)
234234
atlasOperatorGenericStore := mocks.NewMockOperatorGenericStore(ctl)
235235
atlasOperatorGenericStore.EXPECT().
236-
ProjectStreams(&admin.ListStreamInstancesApiParams{GroupId: projectID}).
237-
Return(
238-
&admin.PaginatedApiStreamsTenant{
239-
Results: &[]admin.StreamsTenant{
240-
{
241-
Id: pointer.Get("instance-0-id"),
242-
Name: pointer.Get("instance-0"),
243-
DataProcessRegion: &admin.StreamsDataProcessRegion{
244-
CloudProvider: "AWS",
245-
Region: "VIRGINIA_USA",
246-
},
247-
StreamConfig: &admin.StreamConfig{
248-
Tier: pointer.Get("SP30"),
249-
},
250-
Hostnames: &[]string{"https://server1", "https://server2"},
251-
GroupId: pointer.Get(projectID),
252-
},
236+
ProjectStreams(projectID).
237+
Return([]admin.StreamsTenant{
238+
{
239+
Id: pointer.Get("instance-0-id"),
240+
Name: pointer.Get("instance-0"),
241+
DataProcessRegion: &admin.StreamsDataProcessRegion{
242+
CloudProvider: "AWS",
243+
Region: "VIRGINIA_USA",
253244
},
245+
StreamConfig: &admin.StreamConfig{
246+
Tier: pointer.Get("SP30"),
247+
},
248+
Hostnames: &[]string{"https://server1", "https://server2"},
249+
GroupId: pointer.Get(projectID),
254250
},
251+
},
255252
nil,
256253
)
257254
atlasOperatorGenericStore.EXPECT().
@@ -463,19 +460,17 @@ func Test_ExportFederatedAuth(t *testing.T) {
463460
store.EXPECT().GetConnectedOrgConfig(&admin.GetConnectedOrgConfigApiParams{FederationSettingsId: *federationSettings.Id, OrgId: orgID}).
464461
Return(orgConfig, nil)
465462

466-
identityProvider := &admin.FederationIdentityProvider{
463+
identityProvider := admin.FederationIdentityProvider{
467464
SsoDebugEnabled: pointer.Get(true),
468465
OktaIdpId: *federationSettings.IdentityProviderId,
469466
Id: "TestIdentityProviderID",
470467
}
471-
paginatedResult := &admin.PaginatedFederationIdentityProvider{
472-
Results: &[]admin.FederationIdentityProvider{
473-
*identityProvider,
474-
},
475-
TotalCount: pointer.Get(1),
476-
}
477-
store.EXPECT().IdentityProviders(&admin.ListIdentityProvidersApiParams{FederationSettingsId: *federationSettings.Id}).
478-
Return(paginatedResult, nil)
468+
469+
store.EXPECT().
470+
IdentityProviders(&admin.ListIdentityProvidersApiParams{
471+
FederationSettingsId: *federationSettings.Id,
472+
}).
473+
Return([]admin.FederationIdentityProvider{identityProvider}, nil)
479474

480475
firstProject := &admin.Group{Id: pointer.Get("test-project-1"), Name: "test-project-name-1", OrgId: orgID}
481476
secondProject := &admin.Group{Id: pointer.Get("test-project-1"), Name: "test-project-name-2", OrgId: orgID}

internal/kubernetes/operator/dbusers/dbusers.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,19 @@ import (
3535
const timeFormatISO8601 = "2006-01-02T15:04:05.999Z"
3636

3737
func BuildDBUsers(provider store.OperatorDBUsersStore, projectID, projectName, targetNamespace, credentials string, dictionary map[string]string, version string, independentResource bool) ([]*akov2.AtlasDatabaseUser, []*corev1.Secret, error) {
38-
users, err := provider.DatabaseUsers(projectID, &store.ListOptions{})
38+
users, err := provider.DatabaseUsers(projectID)
3939
if err != nil {
4040
return nil, nil, err
4141
}
4242

43-
if len(users.GetResults()) == 0 {
43+
if len(users) == 0 {
4444
return nil, nil, nil
4545
}
4646

4747
mappedUsers := map[string]*akov2.AtlasDatabaseUser{}
48-
relatedSecrets := make([]*corev1.Secret, 0, len(users.GetResults()))
48+
relatedSecrets := make([]*corev1.Secret, 0, len(users))
4949

50-
for _, u := range users.GetResults() {
50+
for _, u := range users {
5151
user := pointer.Get(u)
5252
resourceName := suggestResourceName(projectName, user.Username, mappedUsers, dictionary)
5353
labels := convertUserLabels(user)
@@ -98,7 +98,7 @@ func BuildDBUsers(provider store.OperatorDBUsersStore, projectID, projectName, t
9898
}
9999
}
100100

101-
result := make([]*akov2.AtlasDatabaseUser, 0, len(users.GetResults()))
101+
result := make([]*akov2.AtlasDatabaseUser, 0, len(users))
102102
for _, mappedUser := range mappedUsers {
103103
result = append(result, mappedUser)
104104
}

internal/kubernetes/operator/dbusers/dbusers_test.go

Lines changed: 52 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131
"github.com/mongodb/atlas-cli-plugin-kubernetes/internal/kubernetes/operator/secrets"
3232
"github.com/mongodb/atlas-cli-plugin-kubernetes/internal/mocks"
3333
"github.com/mongodb/atlas-cli-plugin-kubernetes/internal/pointer"
34-
"github.com/mongodb/atlas-cli-plugin-kubernetes/internal/store"
3534
akoapi "github.com/mongodb/mongodb-atlas-kubernetes/v2/api"
3635
akov2 "github.com/mongodb/mongodb-atlas-kubernetes/v2/api/v1"
3736
akov2common "github.com/mongodb/mongodb-atlas-kubernetes/v2/api/v1/common"
@@ -172,12 +171,7 @@ func TestBuildDBUsers(t *testing.T) {
172171
Username: "TestUsername",
173172
}
174173

175-
listOptions := &store.ListOptions{}
176-
mockUserStore.EXPECT().DatabaseUsers(projectID, listOptions).Return(&atlasv2.PaginatedApiAtlasDatabaseUser{
177-
Results: &[]atlasv2.CloudDatabaseUser{
178-
user,
179-
},
180-
}, nil)
174+
mockUserStore.EXPECT().DatabaseUsers(projectID).Return([]atlasv2.CloudDatabaseUser{user}, nil)
181175

182176
creds := projectName + credentialSuffix
183177
users, relatedSecrets, err := BuildDBUsers(mockUserStore, projectID, projectName, targetNamespace, creds, dictionary, resourceVersion, false)
@@ -264,71 +258,68 @@ func TestBuildDBUsers(t *testing.T) {
264258
})
265259

266260
t.Run("Can build AtlasDatabaseUser when k8s resource name conflicts", func(t *testing.T) {
267-
atlasUsers := atlasv2.PaginatedApiAtlasDatabaseUser{
268-
Results: &[]atlasv2.CloudDatabaseUser{
269-
{
270-
DatabaseName: "TestDB",
271-
DeleteAfterDate: pointer.Get(time.Now()),
272-
Labels: &[]atlasv2.ComponentLabel{
273-
{
274-
Key: pointer.Get("TestLabelKey"),
275-
Value: pointer.Get("TestLabelValue"),
276-
},
261+
atlasUsers := []atlasv2.CloudDatabaseUser{
262+
{
263+
DatabaseName: "TestDB",
264+
DeleteAfterDate: pointer.Get(time.Now()),
265+
Labels: &[]atlasv2.ComponentLabel{
266+
{
267+
Key: pointer.Get("TestLabelKey"),
268+
Value: pointer.Get("TestLabelValue"),
277269
},
278-
LdapAuthType: pointer.Get("TestType"),
279-
X509Type: pointer.Get("TestX509"),
280-
AwsIAMType: pointer.Get("TestAWSIAMType"),
281-
GroupId: "0",
282-
Roles: &[]atlasv2.DatabaseUserRole{
283-
{
284-
RoleName: "TestRoleName",
285-
DatabaseName: "TestRoleDatabaseName",
286-
CollectionName: pointer.Get("TestCollectionName"),
287-
},
270+
},
271+
LdapAuthType: pointer.Get("TestType"),
272+
X509Type: pointer.Get("TestX509"),
273+
AwsIAMType: pointer.Get("TestAWSIAMType"),
274+
GroupId: "0",
275+
Roles: &[]atlasv2.DatabaseUserRole{
276+
{
277+
RoleName: "TestRoleName",
278+
DatabaseName: "TestRoleDatabaseName",
279+
CollectionName: pointer.Get("TestCollectionName"),
288280
},
289-
Scopes: &[]atlasv2.UserScope{
290-
{
291-
Name: "TestScopeName",
292-
Type: "CLUSTER",
293-
},
281+
},
282+
Scopes: &[]atlasv2.UserScope{
283+
{
284+
Name: "TestScopeName",
285+
Type: "CLUSTER",
294286
},
295-
Password: pointer.Get("TestPassword"),
296-
Username: "TestUsername",
297287
},
298-
{
299-
DatabaseName: "TestDB",
300-
DeleteAfterDate: pointer.Get(time.Now()),
301-
Labels: &[]atlasv2.ComponentLabel{
302-
{
303-
Key: pointer.Get("TestLabelKey"),
304-
Value: pointer.Get("TestLabelValue"),
305-
},
288+
Password: pointer.Get("TestPassword"),
289+
Username: "TestUsername",
290+
},
291+
{
292+
DatabaseName: "TestDB",
293+
DeleteAfterDate: pointer.Get(time.Now()),
294+
Labels: &[]atlasv2.ComponentLabel{
295+
{
296+
Key: pointer.Get("TestLabelKey"),
297+
Value: pointer.Get("TestLabelValue"),
306298
},
307-
LdapAuthType: pointer.Get("TestType"),
308-
X509Type: pointer.Get("TestX509"),
309-
AwsIAMType: pointer.Get("TestAWSIAMType"),
310-
GroupId: "0",
311-
Roles: &[]atlasv2.DatabaseUserRole{
312-
{
313-
RoleName: "TestRoleName",
314-
DatabaseName: "TestRoleDatabaseName",
315-
CollectionName: pointer.Get("TestCollectionName"),
316-
},
299+
},
300+
LdapAuthType: pointer.Get("TestType"),
301+
X509Type: pointer.Get("TestX509"),
302+
AwsIAMType: pointer.Get("TestAWSIAMType"),
303+
GroupId: "0",
304+
Roles: &[]atlasv2.DatabaseUserRole{
305+
{
306+
RoleName: "TestRoleName",
307+
DatabaseName: "TestRoleDatabaseName",
308+
CollectionName: pointer.Get("TestCollectionName"),
317309
},
318-
Scopes: &[]atlasv2.UserScope{
319-
{
320-
Name: "TestScopeName",
321-
Type: "CLUSTER",
322-
},
310+
},
311+
Scopes: &[]atlasv2.UserScope{
312+
{
313+
Name: "TestScopeName",
314+
Type: "CLUSTER",
323315
},
324-
Password: pointer.Get("TestPassword"),
325-
Username: "testUsername",
326316
},
317+
Password: pointer.Get("TestPassword"),
318+
Username: "testUsername",
327319
},
328320
}
329321

330-
listOptions := &store.ListOptions{}
331-
mockUserStore.EXPECT().DatabaseUsers(projectID, listOptions).Return(&atlasUsers, nil)
322+
mockUserStore.EXPECT().DatabaseUsers(projectID).Return(atlasUsers, nil)
332323

333324
creds := projectName + credentialSuffix
334325
users, relatedSecrets, err := BuildDBUsers(mockUserStore, projectID, projectName, targetNamespace, creds, dictionary, resourceVersion, false)

internal/kubernetes/operator/federatedauthentication/federatedauthentication.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ func GetIdentityProviderForFederatedSettings(st store.IdentityProviderLister, fe
165165
return nil, fmt.Errorf("failed to retrieve the federation setting's identity providers: %w", err)
166166
}
167167

168-
for _, identityProvider := range identityProviders.GetResults() {
168+
for _, identityProvider := range identityProviders {
169169
if identityProvider.GetOktaIdpId() == identityProviderID {
170170
return &identityProvider, nil
171171
}

0 commit comments

Comments
 (0)