Skip to content

Commit f65f3fb

Browse files
authored
chore: Updates online_archive resource with new SDK (#1875)
* update SDK * update logic for data_process_region * rename resource functions * tests * change comment
1 parent 5092677 commit f65f3fb

5 files changed

+87
-98
lines changed

internal/config/client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ var (
3131
type MongoDBClient struct {
3232
Atlas *matlasClient.Client
3333
AtlasV2 *admin.APIClient
34-
Atlas20231001002 *admin20231001002.APIClient // Needed to avoid breaking changes in federated_settings_identity_provider and online_archive resources.
34+
Atlas20231001002 *admin20231001002.APIClient // Needed to avoid breaking changes in federated_settings_identity_provider resource.
3535
Config *Config
3636
}
3737

internal/service/onlinearchive/data_source_online_archive.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -216,12 +216,12 @@ func schemaOnlineArchive() map[string]*schema.Schema {
216216
}
217217

218218
func dataSourceMongoDBAtlasOnlineArchiveRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
219-
conn20231001002 := meta.(*config.MongoDBClient).Atlas20231001002
219+
connV2 := meta.(*config.MongoDBClient).AtlasV2
220220
projectID := d.Get("project_id").(string)
221221
clusterName := d.Get("cluster_name").(string)
222222
archiveID := d.Get("archive_id").(string)
223223

224-
archive, _, err := conn20231001002.OnlineArchiveApi.GetOnlineArchive(ctx, projectID, archiveID, clusterName).Execute()
224+
archive, _, err := connV2.OnlineArchiveApi.GetOnlineArchive(ctx, projectID, archiveID, clusterName).Execute()
225225

226226
if err != nil {
227227
return diag.FromErr(fmt.Errorf("error reading Online Archive datasource with id %s: %s", archiveID, err.Error()))
@@ -245,18 +245,18 @@ func dataSourceMongoDBAtlasOnlineArchiveRead(ctx context.Context, d *schema.Reso
245245
}
246246

247247
func dataSourceMongoDBAtlasOnlineArchivesRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
248-
conn20231001002 := meta.(*config.MongoDBClient).Atlas20231001002
248+
connV2 := meta.(*config.MongoDBClient).AtlasV2
249249

250250
projectID := d.Get("project_id").(string)
251251
clusterName := d.Get("cluster_name").(string)
252252

253-
archives, _, err := conn20231001002.OnlineArchiveApi.ListOnlineArchives(ctx, projectID, clusterName).Execute()
253+
archives, _, err := connV2.OnlineArchiveApi.ListOnlineArchives(ctx, projectID, clusterName).Execute()
254254

255255
if err != nil {
256256
return diag.FromErr(fmt.Errorf("error getting Online Archives list for project(%s) in cluster (%s): (%s)", projectID, clusterName, err.Error()))
257257
}
258258

259-
input := archives.Results
259+
input := archives.GetResults()
260260
results := make([]map[string]any, 0, len(input))
261261
for i := range input {
262262
archiveData := fromOnlineArchiveToMap(&input[i])

internal/service/onlinearchive/resource_online_archive.go

+55-66
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
1717
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
1818
"github.com/mwielbut/pointy"
19-
admin20231001002 "go.mongodb.org/atlas-sdk/v20231001002/admin"
19+
"go.mongodb.org/atlas-sdk/v20231115005/admin"
2020
)
2121

2222
const (
@@ -27,19 +27,19 @@ const (
2727

2828
func Resource() *schema.Resource {
2929
return &schema.Resource{
30-
Schema: getMongoDBAtlasOnlineArchiveSchema(),
31-
CreateContext: resourceMongoDBAtlasOnlineArchiveCreate,
32-
ReadContext: resourceMongoDBAtlasOnlineArchiveRead,
33-
DeleteContext: resourceMongoDBAtlasOnlineArchiveDelete,
34-
UpdateContext: resourceMongoDBAtlasOnlineArchiveUpdate,
30+
Schema: resourceSchema(),
31+
CreateContext: resourceCreate,
32+
ReadContext: resourceRead,
33+
DeleteContext: resourceDelete,
34+
UpdateContext: resourceUpdate,
3535
Importer: &schema.ResourceImporter{
36-
StateContext: resourceMongoDBAtlasOnlineArchiveImportState,
36+
StateContext: resourceImport,
3737
},
3838
}
3939
}
4040

4141
// https://docs.atlas.mongodb.com/reference/api/online-archive-create-one
42-
func getMongoDBAtlasOnlineArchiveSchema() map[string]*schema.Schema {
42+
func resourceSchema() map[string]*schema.Schema {
4343
return map[string]*schema.Schema{
4444
// argument values
4545
"project_id": {
@@ -217,13 +217,13 @@ func getMongoDBAtlasOnlineArchiveSchema() map[string]*schema.Schema {
217217
}
218218
}
219219

220-
func resourceMongoDBAtlasOnlineArchiveCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
221-
conn20231001002 := meta.(*config.MongoDBClient).Atlas20231001002
220+
func resourceCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
221+
connV2 := meta.(*config.MongoDBClient).AtlasV2
222222
projectID := d.Get("project_id").(string)
223223
clusterName := d.Get("cluster_name").(string)
224224

225225
inputRequest := mapToArchivePayload(d)
226-
outputRequest, _, err := conn20231001002.OnlineArchiveApi.CreateOnlineArchive(ctx, projectID, clusterName, &inputRequest).Execute()
226+
outputRequest, _, err := connV2.OnlineArchiveApi.CreateOnlineArchive(ctx, projectID, clusterName, &inputRequest).Execute()
227227

228228
if err != nil {
229229
return diag.FromErr(fmt.Errorf(errorOnlineArchivesCreate, err))
@@ -241,7 +241,7 @@ func resourceMongoDBAtlasOnlineArchiveCreate(ctx context.Context, d *schema.Reso
241241
stateConf := &retry.StateChangeConf{
242242
Pending: []string{"PENDING", "ARCHIVING", "PAUSING", "PAUSED", "ORPHANED", "REPEATING"},
243243
Target: []string{"IDLE", "ACTIVE"},
244-
Refresh: resourceOnlineRefreshFunc(ctx, projectID, clusterName, archiveID, conn20231001002),
244+
Refresh: resourceOnlineRefreshFunc(ctx, projectID, clusterName, archiveID, connV2),
245245
Timeout: 3 * time.Hour,
246246
MinTimeout: 1 * time.Minute,
247247
Delay: 3 * time.Minute,
@@ -254,10 +254,10 @@ func resourceMongoDBAtlasOnlineArchiveCreate(ctx context.Context, d *schema.Reso
254254
}
255255
}
256256

257-
return resourceMongoDBAtlasOnlineArchiveRead(ctx, d, meta)
257+
return resourceRead(ctx, d, meta)
258258
}
259259

260-
func resourceOnlineRefreshFunc(ctx context.Context, projectID, clusterName, archiveID string, client *admin20231001002.APIClient) retry.StateRefreshFunc {
260+
func resourceOnlineRefreshFunc(ctx context.Context, projectID, clusterName, archiveID string, client *admin.APIClient) retry.StateRefreshFunc {
261261
return func() (any, string, error) {
262262
c, resp, err := client.OnlineArchiveApi.GetOnlineArchive(ctx, projectID, archiveID, clusterName).Execute()
263263

@@ -285,15 +285,15 @@ func resourceOnlineRefreshFunc(ctx context.Context, projectID, clusterName, arch
285285
}
286286
}
287287

288-
func resourceMongoDBAtlasOnlineArchiveRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
289-
conn20231001002 := meta.(*config.MongoDBClient).Atlas20231001002
288+
func resourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
289+
connV2 := meta.(*config.MongoDBClient).AtlasV2
290290
ids := conversion.DecodeStateID(d.Id())
291291

292292
archiveID := ids["archive_id"]
293293
projectID := ids["project_id"]
294294
clusterName := ids["cluster_name"]
295295

296-
onlineArchive, resp, err := conn20231001002.OnlineArchiveApi.GetOnlineArchive(context.Background(), projectID, archiveID, clusterName).Execute()
296+
onlineArchive, resp, err := connV2.OnlineArchiveApi.GetOnlineArchive(context.Background(), projectID, archiveID, clusterName).Execute()
297297
if err != nil {
298298
if resp != nil && resp.StatusCode == http.StatusNotFound {
299299
d.SetId("")
@@ -312,7 +312,7 @@ func resourceMongoDBAtlasOnlineArchiveRead(ctx context.Context, d *schema.Resour
312312
return nil
313313
}
314314

315-
func resourceMongoDBAtlasOnlineArchiveDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
315+
func resourceDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
316316
conn := meta.(*config.MongoDBClient).Atlas
317317
ids := conversion.DecodeStateID(d.Id())
318318
atlasID := ids["archive_id"]
@@ -332,8 +332,8 @@ func resourceMongoDBAtlasOnlineArchiveDelete(ctx context.Context, d *schema.Reso
332332
return nil
333333
}
334334

335-
func resourceMongoDBAtlasOnlineArchiveImportState(ctx context.Context, d *schema.ResourceData, meta any) ([]*schema.ResourceData, error) {
336-
conn20231001002 := meta.(*config.MongoDBClient).Atlas20231001002
335+
func resourceImport(ctx context.Context, d *schema.ResourceData, meta any) ([]*schema.ResourceData, error) {
336+
connV2 := meta.(*config.MongoDBClient).AtlasV2
337337
parts := strings.Split(d.Id(), "-")
338338

339339
var projectID, clusterName, archiveID string
@@ -350,7 +350,7 @@ func resourceMongoDBAtlasOnlineArchiveImportState(ctx context.Context, d *schema
350350
projectID, clusterName, archiveID = parts[0], parts[1], parts[2]
351351
}
352352

353-
outOnlineArchive, _, err := conn20231001002.OnlineArchiveApi.GetOnlineArchive(ctx, projectID, archiveID, clusterName).Execute()
353+
outOnlineArchive, _, err := connV2.OnlineArchiveApi.GetOnlineArchive(ctx, projectID, archiveID, clusterName).Execute()
354354

355355
if err != nil {
356356
return nil, fmt.Errorf("could not import Online Archive %s in project %s, error %s", archiveID, projectID, err.Error())
@@ -377,9 +377,9 @@ func resourceMongoDBAtlasOnlineArchiveImportState(ctx context.Context, d *schema
377377
return []*schema.ResourceData{d}, nil
378378
}
379379

380-
func mapToArchivePayload(d *schema.ResourceData) admin20231001002.BackupOnlineArchiveCreate {
380+
func mapToArchivePayload(d *schema.ResourceData) admin.BackupOnlineArchiveCreate {
381381
// shared input
382-
requestInput := admin20231001002.BackupOnlineArchiveCreate{
382+
requestInput := admin.BackupOnlineArchiveCreate{
383383
DbName: d.Get("db_name").(string),
384384
CollName: d.Get("coll_name").(string),
385385
}
@@ -393,57 +393,55 @@ func mapToArchivePayload(d *schema.ResourceData) admin20231001002.BackupOnlineAr
393393
requestInput.Schedule = mapSchedule(d)
394394

395395
if partitions, ok := d.GetOk("partition_fields"); ok {
396-
list := partitions.([]any)
397-
398-
if len(list) > 0 {
399-
partitionList := make([]admin20231001002.PartitionField, 0, len(list))
396+
if list := partitions.([]any); len(list) > 0 {
397+
partitionList := make([]admin.PartitionField, 0, len(list))
400398
for _, partition := range list {
401399
item := partition.(map[string]any)
402-
query := admin20231001002.PartitionField{
400+
query := admin.PartitionField{
403401
FieldName: item["field_name"].(string),
404402
Order: item["order"].(int),
405403
}
406-
407404
if dbType, ok := item["field_type"]; ok && dbType != nil {
408405
if dbType.(string) != "" {
409-
query.FieldType = admin20231001002.PtrString(dbType.(string))
406+
query.FieldType = admin.PtrString(dbType.(string))
410407
}
411408
}
412-
413409
partitionList = append(partitionList, query)
414410
}
415-
416-
requestInput.PartitionFields = partitionList
411+
requestInput.PartitionFields = &partitionList
417412
}
418413
}
419414

420415
return requestInput
421416
}
422417

423-
func resourceMongoDBAtlasOnlineArchiveUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
424-
conn20231001002 := meta.(*config.MongoDBClient).Atlas20231001002
418+
func resourceUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
419+
connV2 := meta.(*config.MongoDBClient).AtlasV2
425420

426421
ids := conversion.DecodeStateID(d.Id())
427422

428423
atlasID := ids["archive_id"]
429424
projectID := ids["project_id"]
430425
clusterName := ids["cluster_name"]
431426

427+
if dataProcessRegionHasChange := d.HasChange("data_process_region"); dataProcessRegionHasChange {
428+
return diag.FromErr(fmt.Errorf("error updating Mongo Online Archive id: %s, data_process_region can't be modified", atlasID))
429+
}
430+
432431
// if the criteria or the pausedHasChange is enable then perform an update
433432
pausedHasChange := d.HasChange("paused")
434433
criteriaHasChange := d.HasChange("criteria")
435434
dataExpirationRuleHasChange := d.HasChange("data_expiration_rule")
436-
dataProcessRegionHasChange := d.HasChange("data_process_region")
437435
scheduleHasChange := d.HasChange("schedule")
438436

439437
collectionTypeHasChange := d.HasChange("collection_type")
440438

441439
// nothing to do, let's go
442-
if !pausedHasChange && !criteriaHasChange && !collectionTypeHasChange && !scheduleHasChange && !dataExpirationRuleHasChange && !dataProcessRegionHasChange {
440+
if !pausedHasChange && !criteriaHasChange && !collectionTypeHasChange && !scheduleHasChange && !dataExpirationRuleHasChange {
443441
return nil
444442
}
445443

446-
request := admin20231001002.BackupOnlineArchive{}
444+
request := admin.BackupOnlineArchive{}
447445

448446
// reading current value
449447
if pausedHasChange {
@@ -459,39 +457,30 @@ func resourceMongoDBAtlasOnlineArchiveUpdate(ctx context.Context, d *schema.Reso
459457
newExpirationRule := mapDataExpirationRule(d)
460458
if newExpirationRule == nil {
461459
// expiration rule has been removed from tf config, empty dataExpirationRule object needs to be sent in patch request
462-
request.DataExpirationRule = &admin20231001002.DataExpirationRule{}
460+
request.DataExpirationRule = &admin.DataExpirationRule{}
463461
} else {
464462
request.DataExpirationRule = newExpirationRule
465463
}
466464
}
467465

468-
if dataProcessRegionHasChange {
469-
newDataProcessRegion := mapDataProcessRegion(d)
470-
if newDataProcessRegion == nil {
471-
request.DataProcessRegion = &admin20231001002.DataProcessRegion{}
472-
} else {
473-
request.DataProcessRegion = newDataProcessRegion
474-
}
475-
}
476-
477466
if scheduleHasChange {
478467
request.Schedule = mapSchedule(d)
479468
}
480469

481470
if collType := d.Get("collection_type").(string); collectionTypeHasChange && collType != "" {
482-
request.CollectionType = admin20231001002.PtrString(collType)
471+
request.CollectionType = admin.PtrString(collType)
483472
}
484473

485-
_, _, err := conn20231001002.OnlineArchiveApi.UpdateOnlineArchive(ctx, projectID, atlasID, clusterName, &request).Execute()
474+
_, _, err := connV2.OnlineArchiveApi.UpdateOnlineArchive(ctx, projectID, atlasID, clusterName, &request).Execute()
486475

487476
if err != nil {
488477
return diag.FromErr(fmt.Errorf("error updating Mongo Online Archive id: %s %s", atlasID, err.Error()))
489478
}
490479

491-
return resourceMongoDBAtlasOnlineArchiveRead(ctx, d, meta)
480+
return resourceRead(ctx, d, meta)
492481
}
493482

494-
func fromOnlineArchiveToMap(in *admin20231001002.BackupOnlineArchive) map[string]any {
483+
func fromOnlineArchiveToMap(in *admin.BackupOnlineArchive) map[string]any {
495484
// computed attribute
496485
schemaVals := map[string]any{
497486
"cluster_name": in.ClusterName,
@@ -567,7 +556,7 @@ func fromOnlineArchiveToMap(in *admin20231001002.BackupOnlineArchive) map[string
567556
schemaVals["data_process_region"] = []any{dataProcessRegion}
568557
}
569558

570-
partitionFields := in.PartitionFields
559+
partitionFields := in.GetPartitionFields()
571560
if len(partitionFields) == 0 {
572561
return schemaVals
573562
}
@@ -586,10 +575,10 @@ func fromOnlineArchiveToMap(in *admin20231001002.BackupOnlineArchive) map[string
586575
return schemaVals
587576
}
588577

589-
func mapDataExpirationRule(d *schema.ResourceData) *admin20231001002.DataExpirationRule {
578+
func mapDataExpirationRule(d *schema.ResourceData) *admin.DataExpirationRule {
590579
if dataExpireRules, ok := d.GetOk("data_expiration_rule"); ok && len(dataExpireRules.([]any)) > 0 {
591580
dataExpireRule := dataExpireRules.([]any)[0].(map[string]any)
592-
result := admin20231001002.DataExpirationRule{}
581+
result := admin.DataExpirationRule{}
593582
if expireAfterDays, ok := dataExpireRule["expire_after_days"]; ok {
594583
result.ExpireAfterDays = pointy.Int(expireAfterDays.(int))
595584
}
@@ -598,10 +587,10 @@ func mapDataExpirationRule(d *schema.ResourceData) *admin20231001002.DataExpirat
598587
return nil
599588
}
600589

601-
func mapDataProcessRegion(d *schema.ResourceData) *admin20231001002.DataProcessRegion {
590+
func mapDataProcessRegion(d *schema.ResourceData) *admin.CreateDataProcessRegion {
602591
if dataProcessRegions, ok := d.GetOk("data_process_region"); ok && len(dataProcessRegions.([]any)) > 0 {
603592
dataProcessRegion := dataProcessRegions.([]any)[0].(map[string]any)
604-
result := admin20231001002.DataProcessRegion{}
593+
result := admin.CreateDataProcessRegion{}
605594
if cloudProvider, ok := dataProcessRegion["cloud_provider"]; ok {
606595
result.CloudProvider = pointy.String(cloudProvider.(string))
607596
}
@@ -613,43 +602,43 @@ func mapDataProcessRegion(d *schema.ResourceData) *admin20231001002.DataProcessR
613602
return nil
614603
}
615604

616-
func mapCriteria(d *schema.ResourceData) admin20231001002.Criteria {
605+
func mapCriteria(d *schema.ResourceData) admin.Criteria {
617606
criteriaList := d.Get("criteria").([]any)
618607

619608
criteria := criteriaList[0].(map[string]any)
620609

621-
criteriaInput := admin20231001002.Criteria{
622-
Type: admin20231001002.PtrString(criteria["type"].(string)),
610+
criteriaInput := admin.Criteria{
611+
Type: admin.PtrString(criteria["type"].(string)),
623612
}
624613

625614
if criteriaInput.Type != nil && *criteriaInput.Type == "DATE" {
626615
if dateField := criteria["date_field"].(string); dateField != "" {
627-
criteriaInput.DateField = admin20231001002.PtrString(dateField)
616+
criteriaInput.DateField = admin.PtrString(dateField)
628617
}
629618

630619
criteriaInput.ExpireAfterDays = pointy.Int(criteria["expire_after_days"].(int))
631620

632621
// optional
633622
if dformat, ok := criteria["date_format"]; ok && dformat.(string) != "" {
634-
criteriaInput.DateFormat = admin20231001002.PtrString(dformat.(string))
623+
criteriaInput.DateFormat = admin.PtrString(dformat.(string))
635624
}
636625
}
637626

638627
if criteriaInput.Type != nil && *criteriaInput.Type == "CUSTOM" {
639628
if query := criteria["query"].(string); query != "" {
640-
criteriaInput.Query = admin20231001002.PtrString(query)
629+
criteriaInput.Query = admin.PtrString(query)
641630
}
642631
}
643632

644633
// Pending update client missing QUERY field
645634
return criteriaInput
646635
}
647636

648-
func mapSchedule(d *schema.ResourceData) *admin20231001002.OnlineArchiveSchedule {
637+
func mapSchedule(d *schema.ResourceData) *admin.OnlineArchiveSchedule {
649638
// scheduleInput := &matlas.OnlineArchiveSchedule{
650639

651640
// We have to provide schedule.type="DEFAULT" when the schedule block is not provided or removed
652-
scheduleInput := &admin20231001002.OnlineArchiveSchedule{
641+
scheduleInput := &admin.OnlineArchiveSchedule{
653642
Type: scheduleTypeDefault,
654643
}
655644

@@ -668,7 +657,7 @@ func mapSchedule(d *schema.ResourceData) *admin20231001002.OnlineArchiveSchedule
668657
}
669658

670659
scheduleTFConfig := scheduleTFConfigList[0].(map[string]any)
671-
scheduleInput = &admin20231001002.OnlineArchiveSchedule{
660+
scheduleInput = &admin.OnlineArchiveSchedule{
672661
Type: scheduleTFConfig["type"].(string),
673662
}
674663

0 commit comments

Comments
 (0)