Skip to content

Commit 1171c7b

Browse files
authored
refactor: Migrates mongodbatlas_organization resource & data sources to new Atlas SDK (#1834)
1 parent 6491cdd commit 1171c7b

5 files changed

+152
-63
lines changed

internal/service/organization/data_source_organization.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
88
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
910
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
1011
)
1112

@@ -47,27 +48,28 @@ func DataSource() *schema.Resource {
4748

4849
func dataSourceMongoDBAtlasOrganizationRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
4950
// Get client connection.
50-
conn := meta.(*config.MongoDBClient).Atlas
51+
conn := meta.(*config.MongoDBClient).AtlasV2
5152
orgID := d.Get("org_id").(string)
5253

53-
organization, _, err := conn.Organizations.Get(ctx, orgID)
54+
organization, _, err := conn.OrganizationsApi.GetOrganization(ctx, orgID).Execute()
55+
5456
if err != nil {
5557
return diag.FromErr(fmt.Errorf("error getting organizations information: %s", err))
5658
}
5759

58-
if err := d.Set("name", organization.Name); err != nil {
60+
if err := d.Set("name", organization.GetName()); err != nil {
5961
return diag.FromErr(fmt.Errorf("error setting `name`: %s", err))
6062
}
6163

62-
if err := d.Set("is_deleted", organization.IsDeleted); err != nil {
64+
if err := d.Set("is_deleted", organization.GetIsDeleted()); err != nil {
6365
return diag.FromErr(fmt.Errorf("error setting `is_deleted`: %s", err))
6466
}
6567

66-
if err := d.Set("links", flattenOrganizationLinks(organization.Links)); err != nil {
68+
if err := d.Set("links", flattenOrganizationLinks(organization.GetLinks())); err != nil {
6769
return diag.FromErr(fmt.Errorf("error setting `is_deleted`: %s", err))
6870
}
6971

70-
d.SetId(organization.ID)
72+
d.SetId(organization.GetId())
7173

7274
return nil
7375
}

internal/service/organization/data_source_organizations.go

+19-20
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import (
44
"context"
55
"fmt"
66

7+
"go.mongodb.org/atlas-sdk/v20231115003/admin"
8+
79
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
810
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/id"
911
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10-
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
1112
"github.com/mwielbut/pointy"
1213

13-
matlas "go.mongodb.org/atlas/mongodbatlas"
14+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/constant"
15+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
1416
)
1517

1618
func PluralDataSource() *schema.Resource {
@@ -22,8 +24,9 @@ func PluralDataSource() *schema.Resource {
2224
Optional: true,
2325
},
2426
"include_deleted_orgs": {
25-
Type: schema.TypeBool,
26-
Optional: true,
27+
Type: schema.TypeBool,
28+
Optional: true,
29+
Deprecated: fmt.Sprintf(constant.DeprecationParamByDate, "January 2025"),
2730
},
2831
"page_num": {
2932
Type: schema.TypeInt,
@@ -79,29 +82,25 @@ func PluralDataSource() *schema.Resource {
7982

8083
func dataSourceMongoDBAtlasOrganizationsRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
8184
// Get client connection.
82-
conn := meta.(*config.MongoDBClient).Atlas
85+
conn := meta.(*config.MongoDBClient).AtlasV2
8386

84-
options := &matlas.ListOptions{
85-
PageNum: d.Get("page_num").(int),
86-
ItemsPerPage: d.Get("items_per_page").(int),
87+
organizationOptions := &admin.ListOrganizationsApiParams{
88+
PageNum: pointy.Int(d.Get("page_num").(int)),
89+
ItemsPerPage: pointy.Int(d.Get("items_per_page").(int)),
90+
Name: pointy.String(d.Get("name").(string)),
8791
}
8892

89-
organizationOptions := &matlas.OrganizationsListOptions{
90-
Name: d.Get("name").(string),
91-
IncludeDeletedOrgs: pointy.Bool(d.Get("include_deleted_orgs").(bool)),
92-
ListOptions: *options,
93-
}
93+
organizations, _, err := conn.OrganizationsApi.ListOrganizationsWithParams(ctx, organizationOptions).Execute()
9494

95-
organizations, _, err := conn.Organizations.List(ctx, organizationOptions)
9695
if err != nil {
9796
return diag.FromErr(fmt.Errorf("error getting organization information: %s", err))
9897
}
9998

100-
if err := d.Set("results", flattenOrganizations(organizations.Results)); err != nil {
99+
if err := d.Set("results", flattenOrganizations(organizations.GetResults())); err != nil {
101100
return diag.FromErr(fmt.Errorf("error setting `results`: %s", err))
102101
}
103102

104-
if err := d.Set("total_count", organizations.TotalCount); err != nil {
103+
if err := d.Set("total_count", organizations.GetTotalCount()); err != nil {
105104
return diag.FromErr(fmt.Errorf("error setting `total_count`: %s", err))
106105
}
107106

@@ -110,7 +109,7 @@ func dataSourceMongoDBAtlasOrganizationsRead(ctx context.Context, d *schema.Reso
110109
return nil
111110
}
112111

113-
func flattenOrganizationLinks(links []*matlas.Link) []map[string]any {
112+
func flattenOrganizationLinks(links []admin.Link) []map[string]any {
114113
linksList := make([]map[string]any, 0)
115114

116115
for _, link := range links {
@@ -124,7 +123,7 @@ func flattenOrganizationLinks(links []*matlas.Link) []map[string]any {
124123
return linksList
125124
}
126125

127-
func flattenOrganizations(organizations []*matlas.Organization) []map[string]any {
126+
func flattenOrganizations(organizations []admin.AtlasOrganization) []map[string]any {
128127
var results []map[string]any
129128

130129
if len(organizations) == 0 {
@@ -135,10 +134,10 @@ func flattenOrganizations(organizations []*matlas.Organization) []map[string]any
135134

136135
for k, organization := range organizations {
137136
results[k] = map[string]any{
138-
"id": organization.ID,
137+
"id": organization.Id,
139138
"name": organization.Name,
140139
"is_deleted": organization.IsDeleted,
141-
"links": flattenOrganizationLinks(organization.Links),
140+
"links": flattenOrganizationLinks(organization.GetLinks()),
142141
}
143142
}
144143

internal/service/organization/resource_organization.go

+24-21
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import (
66
"log"
77
"net/http"
88

9+
"go.mongodb.org/atlas-sdk/v20231115003/admin"
10+
911
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1012
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
13+
"github.com/mwielbut/pointy"
14+
1115
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
1216
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
13-
"github.com/mwielbut/pointy"
14-
matlas "go.mongodb.org/atlas/mongodbatlas"
1517
)
1618

1719
func Resource() *schema.Resource {
@@ -64,8 +66,8 @@ func Resource() *schema.Resource {
6466
}
6567

6668
func resourceMongoDBAtlasOrganizationCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
67-
conn := meta.(*config.MongoDBClient).Atlas
68-
organization, resp, err := conn.Organizations.Create(ctx, newCreateOrganizationRequest(d))
69+
conn := meta.(*config.MongoDBClient).AtlasV2
70+
organization, resp, err := conn.OrganizationsApi.CreateOrganization(ctx, newCreateOrganizationRequest(d)).Execute()
6971
if err != nil {
7072
if resp != nil && resp.StatusCode == http.StatusNotFound {
7173
d.SetId("")
@@ -75,20 +77,20 @@ func resourceMongoDBAtlasOrganizationCreate(ctx context.Context, d *schema.Resou
7577
return diag.FromErr(fmt.Errorf("error create Organization: %s", err))
7678
}
7779

78-
if err := d.Set("private_key", organization.APIKey.PrivateKey); err != nil {
80+
if err := d.Set("private_key", organization.ApiKey.GetPrivateKey()); err != nil {
7981
return diag.FromErr(fmt.Errorf("error setting `private_key`: %s", err))
8082
}
8183

82-
if err := d.Set("public_key", organization.APIKey.PublicKey); err != nil {
84+
if err := d.Set("public_key", organization.ApiKey.GetPublicKey()); err != nil {
8385
return diag.FromErr(fmt.Errorf("error setting `public_key`: %s", err))
8486
}
8587

86-
if err := d.Set("org_id", organization.Organization.ID); err != nil {
88+
if err := d.Set("org_id", organization.Organization.GetId()); err != nil {
8789
return diag.FromErr(fmt.Errorf("error setting `org_id`: %s", err))
8890
}
8991

9092
d.SetId(conversion.EncodeStateID(map[string]string{
91-
"org_id": organization.Organization.ID,
93+
"org_id": organization.Organization.GetId(),
9294
}))
9395

9496
return resourceMongoDBAtlasOrganizationRead(ctx, d, meta)
@@ -103,12 +105,12 @@ func resourceMongoDBAtlasOrganizationRead(ctx context.Context, d *schema.Resourc
103105
}
104106

105107
clients, _ := cfg.NewClient(ctx)
106-
conn := clients.(*config.MongoDBClient).Atlas
108+
conn := clients.(*config.MongoDBClient).AtlasV2
107109

108110
ids := conversion.DecodeStateID(d.Id())
109111
orgID := ids["org_id"]
110112

111-
organization, resp, err := conn.Organizations.Get(ctx, orgID)
113+
organization, resp, err := conn.OrganizationsApi.GetOrganization(ctx, orgID).Execute()
112114
if err != nil {
113115
if resp != nil && resp.StatusCode == http.StatusNotFound {
114116
log.Printf("warning Organization deleted will recreate: %s \n", err.Error())
@@ -118,7 +120,7 @@ func resourceMongoDBAtlasOrganizationRead(ctx context.Context, d *schema.Resourc
118120
return diag.FromErr(fmt.Errorf("error reading organization information: %s", err))
119121
}
120122
d.SetId(conversion.EncodeStateID(map[string]string{
121-
"org_id": organization.ID,
123+
"org_id": organization.GetId(),
122124
}))
123125
return nil
124126
}
@@ -132,14 +134,14 @@ func resourceMongoDBAtlasOrganizationUpdate(ctx context.Context, d *schema.Resou
132134
}
133135

134136
clients, _ := cfg.NewClient(ctx)
135-
conn := clients.(*config.MongoDBClient).Atlas
137+
conn := clients.(*config.MongoDBClient).AtlasV2
136138
ids := conversion.DecodeStateID(d.Id())
137139
orgID := ids["org_id"]
138140

139-
updateRequest := new(matlas.Organization)
141+
updateRequest := new(admin.AtlasOrganization)
140142
if d.HasChange("name") {
141143
updateRequest.Name = d.Get("name").(string)
142-
_, _, err := conn.Organizations.Update(ctx, orgID, updateRequest)
144+
_, _, err := conn.OrganizationsApi.RenameOrganization(ctx, orgID, updateRequest).Execute()
143145
if err != nil {
144146
return diag.FromErr(fmt.Errorf("error updating Organization: %s", err))
145147
}
@@ -156,28 +158,29 @@ func resourceMongoDBAtlasOrganizationDelete(ctx context.Context, d *schema.Resou
156158
}
157159

158160
clients, _ := cfg.NewClient(ctx)
159-
conn := clients.(*config.MongoDBClient).Atlas
161+
conn := clients.(*config.MongoDBClient).AtlasV2
160162
ids := conversion.DecodeStateID(d.Id())
161163
orgID := ids["org_id"]
162164

163-
if _, err := conn.Organizations.Delete(ctx, orgID); err != nil {
165+
if _, _, err := conn.OrganizationsApi.DeleteOrganization(ctx, orgID).Execute(); err != nil {
164166
return diag.FromErr(fmt.Errorf("error Organization: %s", err))
165167
}
166168
return nil
167169
}
168170

169-
func newCreateOrganizationRequest(d *schema.ResourceData) *matlas.CreateOrganizationRequest {
170-
createRequest := &matlas.CreateOrganizationRequest{
171+
func newCreateOrganizationRequest(d *schema.ResourceData) *admin.CreateOrganizationRequest {
172+
createRequest := &admin.CreateOrganizationRequest{
171173
Name: d.Get("name").(string),
172-
OrgOwnerID: pointy.String(d.Get("org_owner_id").(string)),
173-
APIKey: &matlas.APIKeyInput{
174+
OrgOwnerId: pointy.String(d.Get("org_owner_id").(string)),
175+
176+
ApiKey: &admin.CreateAtlasOrganizationApiKey{
174177
Roles: conversion.ExpandStringList(d.Get("role_names").(*schema.Set).List()),
175178
Desc: d.Get("description").(string),
176179
},
177180
}
178181

179182
if federationSettingsID, ok := d.Get("federation_settings_id").(string); ok && federationSettingsID != "" {
180-
createRequest.FederationSettingsID = &federationSettingsID
183+
createRequest.FederationSettingsId = &federationSettingsID
181184
}
182185

183186
return createRequest
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package organization_test
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
9+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-testing/plancheck"
11+
12+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
13+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/mig"
14+
)
15+
16+
func TestAccMigrationConfigRSOrganization_Basic(t *testing.T) {
17+
acc.SkipTestForCI(t)
18+
var (
19+
resourceName = "mongodbatlas_organization.test"
20+
orgOwnerID = os.Getenv("MONGODB_ATLAS_ORG_OWNER_ID")
21+
name = fmt.Sprintf("test-acc-organization-%s", acctest.RandString(5))
22+
description = "test Key for Acceptance tests"
23+
roleName = "ORG_OWNER"
24+
)
25+
26+
resource.Test(t, resource.TestCase{
27+
Steps: []resource.TestStep{
28+
{
29+
ExternalProviders: mig.ExternalProviders(),
30+
Config: testAccMongoDBAtlasOrganizationConfigBasic(orgOwnerID, name, description, roleName),
31+
Check: resource.ComposeTestCheckFunc(
32+
resource.TestCheckResourceAttrSet(resourceName, "org_id"),
33+
resource.TestCheckResourceAttrSet(resourceName, "description"),
34+
resource.TestCheckResourceAttr(resourceName, "description", description),
35+
),
36+
},
37+
{
38+
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
39+
Config: testAccMongoDBAtlasOrganizationConfigBasic(orgOwnerID, name, description, roleName),
40+
ConfigPlanChecks: resource.ConfigPlanChecks{
41+
PreApply: []plancheck.PlanCheck{
42+
acc.DebugPlan(),
43+
plancheck.ExpectEmptyPlan(),
44+
},
45+
},
46+
},
47+
},
48+
})
49+
}

0 commit comments

Comments
 (0)