Skip to content

Commit d70eed8

Browse files
authored
chore: Upgrades api_key resource to auto-generated SDK (#1879)
* rename * migration test * data_source_api_key * data_source_api_keys * read * create * update & delete * import * conn in tests * ExpandStringListFromSetSchema * fix test names * remove unneeded check (leftover)
1 parent b2a50fb commit d70eed8

14 files changed

+172
-152
lines changed

.github/workflows/migration-tests.yml

+10
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,16 @@ jobs:
8080
- 'internal/service/atlasuser/*.go'
8181
- 'internal/service/databaseuser/*.go'
8282
- 'internal/service/projectapikey/*.go'
83+
- 'internal/service/apikey/*.go'
84+
- 'internal/service/teams/*.go'
85+
- 'internal/service/cloudprovideraccess/*.go'
86+
- 'internal/service/customdbrole/*.go'
87+
- 'internal/service/maintenancewindow/*.go'
88+
- 'internal/service/customdnsconfigurationclusteraws/*.go'
89+
- 'internal/service/rolesorgid/*.go'
90+
- 'internal/service/orginvitation/*.go'
91+
- 'internal/service/organization/*.go'
92+
- 'internal/service/thirdpartyintegration/*.go'
8393
backup_online_archive:
8494
- 'internal/service/onlinearchive/*.go'
8595
advanced_cluster:

internal/common/conversion/misc.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"strings"
66

7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
78
"github.com/spf13/cast"
89
)
910

@@ -34,6 +35,13 @@ func ExpandStringList(list []any) (res []string) {
3435
for _, v := range list {
3536
res = append(res, v.(string))
3637
}
37-
3838
return
3939
}
40+
41+
func ExpandStringListFromSetSchema(set *schema.Set) []string {
42+
res := make([]string, set.Len())
43+
for i, v := range set.List() {
44+
res[i] = v.(string)
45+
}
46+
return res
47+
}

internal/service/accesslistapikey/data_source_accesslist_api_keys.go

-3
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,6 @@ func dataSourcePluralRead(ctx context.Context, d *schema.ResourceData, meta any)
9494
}
9595

9696
func flattenAccessListAPIKeys(ctx context.Context, orgID string, list []admin.UserAccessList) []map[string]any {
97-
if len(list) == 0 {
98-
return nil
99-
}
10097
results := make([]map[string]any, len(list))
10198
for k, elm := range list {
10299
results[k] = map[string]any{

internal/service/apikey/data_source_api_key.go

+5-7
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
func DataSource() *schema.Resource {
1414
return &schema.Resource{
15-
ReadContext: dataSourceMongoDBAtlasAPIKeyRead,
15+
ReadContext: dataSourceRead,
1616
Schema: map[string]*schema.Schema{
1717
"org_id": {
1818
Type: schema.TypeString,
@@ -41,13 +41,11 @@ func DataSource() *schema.Resource {
4141
}
4242
}
4343

44-
func dataSourceMongoDBAtlasAPIKeyRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
45-
// Get client connection.
46-
conn := meta.(*config.MongoDBClient).Atlas
47-
44+
func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
45+
connV2 := meta.(*config.MongoDBClient).AtlasV2
4846
orgID := d.Get("org_id").(string)
4947
apiKeyID := d.Get("api_key_id").(string)
50-
apiKey, _, err := conn.APIKeys.Get(ctx, orgID, apiKeyID)
48+
apiKey, _, err := connV2.ProgrammaticAPIKeysApi.GetApiKey(ctx, orgID, apiKeyID).Execute()
5149
if err != nil {
5250
return diag.FromErr(fmt.Errorf("error getting api key information: %s", err))
5351
}
@@ -60,7 +58,7 @@ func dataSourceMongoDBAtlasAPIKeyRead(ctx context.Context, d *schema.ResourceDat
6058
return diag.FromErr(fmt.Errorf("error setting `public_key`: %s", err))
6159
}
6260

63-
if err := d.Set("role_names", flattenOrgAPIKeyRoles(orgID, apiKey.Roles)); err != nil {
61+
if err := d.Set("role_names", flattenOrgAPIKeyRoles(orgID, apiKey.GetRoles())); err != nil {
6462
return diag.FromErr(fmt.Errorf("error setting `roles`: %s", err))
6563
}
6664

internal/service/apikey/data_source_api_key_test.go

+6-10
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,23 @@ func TestAccConfigDSAPIKey_basic(t *testing.T) {
2020
resource.ParallelTest(t, resource.TestCase{
2121
PreCheck: func() { acc.PreCheckBasic(t) },
2222
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
23-
CheckDestroy: testAccCheckMongoDBAtlasAPIKeyDestroy,
23+
CheckDestroy: checkDestroy,
2424
Steps: []resource.TestStep{
2525
{
26-
Config: testAccDSMongoDBAtlasAPIKeyConfig(orgID, description, roleName),
26+
Config: configDS(orgID, description, roleName),
2727
Check: resource.ComposeTestCheckFunc(
28-
// Test for Resource
29-
testAccCheckMongoDBAtlasAPIKeyExists(resourceName),
30-
resource.TestCheckResourceAttrSet(resourceName, "org_id"),
31-
resource.TestCheckResourceAttrSet(resourceName, "description"),
28+
checkExists(resourceName),
3229
resource.TestCheckResourceAttr(resourceName, "org_id", orgID),
3330
resource.TestCheckResourceAttr(resourceName, "description", description),
34-
// Test for Data source
35-
resource.TestCheckResourceAttrSet(dataSourceName, "org_id"),
36-
resource.TestCheckResourceAttrSet(dataSourceName, "description"),
31+
resource.TestCheckResourceAttr(dataSourceName, "org_id", orgID),
32+
resource.TestCheckResourceAttr(dataSourceName, "description", description),
3733
),
3834
},
3935
},
4036
})
4137
}
4238

43-
func testAccDSMongoDBAtlasAPIKeyConfig(orgID, apiKeyID, roleNames string) string {
39+
func configDS(orgID, apiKeyID, roleNames string) string {
4440
return fmt.Sprintf(`
4541
resource "mongodbatlas_api_key" "test" {
4642
org_id = "%s"

internal/service/apikey/data_source_api_keys.go

+25-13
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ import (
77
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
88
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/id"
99
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
1011
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
11-
12-
matlas "go.mongodb.org/atlas/mongodbatlas"
12+
"go.mongodb.org/atlas-sdk/v20231115005/admin"
1313
)
1414

1515
func PluralDataSource() *schema.Resource {
1616
return &schema.Resource{
17-
ReadContext: dataSourceMongoDBAtlasAPIKeysRead,
17+
ReadContext: dataSourcePluralRead,
1818
Schema: map[string]*schema.Schema{
1919
"org_id": {
2020
Type: schema.TypeString,
@@ -59,26 +59,38 @@ func PluralDataSource() *schema.Resource {
5959
}
6060
}
6161

62-
func dataSourceMongoDBAtlasAPIKeysRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
63-
// Get client connection.
64-
conn := meta.(*config.MongoDBClient).Atlas
65-
options := &matlas.ListOptions{
66-
PageNum: d.Get("page_num").(int),
67-
ItemsPerPage: d.Get("items_per_page").(int),
62+
func dataSourcePluralRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
63+
connV2 := meta.(*config.MongoDBClient).AtlasV2
64+
orgID := d.Get("org_id").(string)
65+
params := &admin.ListApiKeysApiParams{
66+
PageNum: conversion.IntPtr(d.Get("page_num").(int)),
67+
ItemsPerPage: conversion.IntPtr(d.Get("items_per_page").(int)),
68+
OrgId: orgID,
6869
}
6970

70-
orgID := d.Get("org_id").(string)
71+
apiKeys, _, err := connV2.ProgrammaticAPIKeysApi.ListApiKeysWithParams(ctx, params).Execute()
7172

72-
apiKeys, _, err := conn.APIKeys.List(ctx, orgID, options)
7373
if err != nil {
7474
return diag.FromErr(fmt.Errorf("error getting api keys information: %s", err))
7575
}
7676

77-
if err := d.Set("results", flattenOrgAPIKeys(ctx, conn, orgID, apiKeys)); err != nil {
77+
if err := d.Set("results", flattenOrgAPIKeys(ctx, orgID, apiKeys.GetResults())); err != nil {
7878
return diag.FromErr(fmt.Errorf("error setting `results`: %s", err))
7979
}
8080

8181
d.SetId(id.UniqueId())
82-
8382
return nil
8483
}
84+
85+
func flattenOrgAPIKeys(ctx context.Context, orgID string, apiKeys []admin.ApiKeyUserDetails) []map[string]any {
86+
results := make([]map[string]any, len(apiKeys))
87+
for k, apiKey := range apiKeys {
88+
results[k] = map[string]any{
89+
"api_key_id": apiKey.GetId(),
90+
"description": apiKey.GetDesc(),
91+
"public_key": apiKey.GetPublicKey(),
92+
"role_names": flattenOrgAPIKeyRoles(orgID, apiKey.GetRoles()),
93+
}
94+
}
95+
return results
96+
}

internal/service/apikey/data_source_api_keys_test.go

+5-11
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,23 @@ func TestAccConfigDSAPIKeys_basic(t *testing.T) {
2020
resource.ParallelTest(t, resource.TestCase{
2121
PreCheck: func() { acc.PreCheckBasic(t) },
2222
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
23-
CheckDestroy: testAccCheckMongoDBAtlasAPIKeyDestroy,
23+
CheckDestroy: checkDestroy,
2424
Steps: []resource.TestStep{
2525
{
26-
Config: testAccDSMongoDBAtlasAPIKeysConfig(orgID, description, roleName),
26+
Config: configDSPlural(orgID, description, roleName),
2727
Check: resource.ComposeTestCheckFunc(
28-
// Test for Resource
29-
testAccCheckMongoDBAtlasAPIKeyExists(resourceName),
30-
resource.TestCheckResourceAttrSet(resourceName, "org_id"),
31-
resource.TestCheckResourceAttrSet(resourceName, "description"),
32-
28+
checkExists(resourceName),
3329
resource.TestCheckResourceAttr(resourceName, "org_id", orgID),
3430
resource.TestCheckResourceAttr(resourceName, "description", description),
35-
36-
// Test for Data source
37-
resource.TestCheckResourceAttrSet(dataSourceName, "org_id"),
31+
resource.TestCheckResourceAttr(dataSourceName, "org_id", orgID),
3832
resource.TestCheckResourceAttrSet(dataSourceName, "results.#"),
3933
),
4034
},
4135
},
4236
})
4337
}
4438

45-
func testAccDSMongoDBAtlasAPIKeysConfig(orgID, description, roleNames string) string {
39+
func configDSPlural(orgID, description, roleNames string) string {
4640
return fmt.Sprintf(`
4741
resource "mongodbatlas_api_key" "test" {
4842
org_id = "%s"

0 commit comments

Comments
 (0)