Skip to content

Commit

Permalink
chore: Upgrades api_key resource to auto-generated SDK (#1879)
Browse files Browse the repository at this point in the history
* 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)
  • Loading branch information
lantoli committed Jan 30, 2024
1 parent b2a50fb commit d70eed8
Show file tree
Hide file tree
Showing 14 changed files with 172 additions and 152 deletions.
10 changes: 10 additions & 0 deletions .github/workflows/migration-tests.yml
Expand Up @@ -80,6 +80,16 @@ jobs:
- 'internal/service/atlasuser/*.go'
- 'internal/service/databaseuser/*.go'
- 'internal/service/projectapikey/*.go'
- 'internal/service/apikey/*.go'
- 'internal/service/teams/*.go'
- 'internal/service/cloudprovideraccess/*.go'
- 'internal/service/customdbrole/*.go'
- 'internal/service/maintenancewindow/*.go'
- 'internal/service/customdnsconfigurationclusteraws/*.go'
- 'internal/service/rolesorgid/*.go'
- 'internal/service/orginvitation/*.go'
- 'internal/service/organization/*.go'
- 'internal/service/thirdpartyintegration/*.go'
backup_online_archive:
- 'internal/service/onlinearchive/*.go'
advanced_cluster:
Expand Down
10 changes: 9 additions & 1 deletion internal/common/conversion/misc.go
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/spf13/cast"
)

Expand Down Expand Up @@ -34,6 +35,13 @@ func ExpandStringList(list []any) (res []string) {
for _, v := range list {
res = append(res, v.(string))
}

return
}

func ExpandStringListFromSetSchema(set *schema.Set) []string {
res := make([]string, set.Len())
for i, v := range set.List() {
res[i] = v.(string)
}
return res
}
File renamed without changes.
Expand Up @@ -94,9 +94,6 @@ func dataSourcePluralRead(ctx context.Context, d *schema.ResourceData, meta any)
}

func flattenAccessListAPIKeys(ctx context.Context, orgID string, list []admin.UserAccessList) []map[string]any {
if len(list) == 0 {
return nil
}
results := make([]map[string]any, len(list))
for k, elm := range list {
results[k] = map[string]any{
Expand Down
12 changes: 5 additions & 7 deletions internal/service/apikey/data_source_api_key.go
Expand Up @@ -12,7 +12,7 @@ import (

func DataSource() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceMongoDBAtlasAPIKeyRead,
ReadContext: dataSourceRead,
Schema: map[string]*schema.Schema{
"org_id": {
Type: schema.TypeString,
Expand Down Expand Up @@ -41,13 +41,11 @@ func DataSource() *schema.Resource {
}
}

func dataSourceMongoDBAtlasAPIKeyRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
// Get client connection.
conn := meta.(*config.MongoDBClient).Atlas

func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
connV2 := meta.(*config.MongoDBClient).AtlasV2
orgID := d.Get("org_id").(string)
apiKeyID := d.Get("api_key_id").(string)
apiKey, _, err := conn.APIKeys.Get(ctx, orgID, apiKeyID)
apiKey, _, err := connV2.ProgrammaticAPIKeysApi.GetApiKey(ctx, orgID, apiKeyID).Execute()
if err != nil {
return diag.FromErr(fmt.Errorf("error getting api key information: %s", err))
}
Expand All @@ -60,7 +58,7 @@ func dataSourceMongoDBAtlasAPIKeyRead(ctx context.Context, d *schema.ResourceDat
return diag.FromErr(fmt.Errorf("error setting `public_key`: %s", err))
}

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

Expand Down
16 changes: 6 additions & 10 deletions internal/service/apikey/data_source_api_key_test.go
Expand Up @@ -20,27 +20,23 @@ func TestAccConfigDSAPIKey_basic(t *testing.T) {
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acc.PreCheckBasic(t) },
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
CheckDestroy: testAccCheckMongoDBAtlasAPIKeyDestroy,
CheckDestroy: checkDestroy,
Steps: []resource.TestStep{
{
Config: testAccDSMongoDBAtlasAPIKeyConfig(orgID, description, roleName),
Config: configDS(orgID, description, roleName),
Check: resource.ComposeTestCheckFunc(
// Test for Resource
testAccCheckMongoDBAtlasAPIKeyExists(resourceName),
resource.TestCheckResourceAttrSet(resourceName, "org_id"),
resource.TestCheckResourceAttrSet(resourceName, "description"),
checkExists(resourceName),
resource.TestCheckResourceAttr(resourceName, "org_id", orgID),
resource.TestCheckResourceAttr(resourceName, "description", description),
// Test for Data source
resource.TestCheckResourceAttrSet(dataSourceName, "org_id"),
resource.TestCheckResourceAttrSet(dataSourceName, "description"),
resource.TestCheckResourceAttr(dataSourceName, "org_id", orgID),
resource.TestCheckResourceAttr(dataSourceName, "description", description),
),
},
},
})
}

func testAccDSMongoDBAtlasAPIKeyConfig(orgID, apiKeyID, roleNames string) string {
func configDS(orgID, apiKeyID, roleNames string) string {
return fmt.Sprintf(`
resource "mongodbatlas_api_key" "test" {
org_id = "%s"
Expand Down
38 changes: 25 additions & 13 deletions internal/service/apikey/data_source_api_keys.go
Expand Up @@ -7,14 +7,14 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/id"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"

matlas "go.mongodb.org/atlas/mongodbatlas"
"go.mongodb.org/atlas-sdk/v20231115005/admin"
)

func PluralDataSource() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceMongoDBAtlasAPIKeysRead,
ReadContext: dataSourcePluralRead,
Schema: map[string]*schema.Schema{
"org_id": {
Type: schema.TypeString,
Expand Down Expand Up @@ -59,26 +59,38 @@ func PluralDataSource() *schema.Resource {
}
}

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

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

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

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

d.SetId(id.UniqueId())

return nil
}

func flattenOrgAPIKeys(ctx context.Context, orgID string, apiKeys []admin.ApiKeyUserDetails) []map[string]any {
results := make([]map[string]any, len(apiKeys))
for k, apiKey := range apiKeys {
results[k] = map[string]any{
"api_key_id": apiKey.GetId(),
"description": apiKey.GetDesc(),
"public_key": apiKey.GetPublicKey(),
"role_names": flattenOrgAPIKeyRoles(orgID, apiKey.GetRoles()),
}
}
return results
}
16 changes: 5 additions & 11 deletions internal/service/apikey/data_source_api_keys_test.go
Expand Up @@ -20,29 +20,23 @@ func TestAccConfigDSAPIKeys_basic(t *testing.T) {
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acc.PreCheckBasic(t) },
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
CheckDestroy: testAccCheckMongoDBAtlasAPIKeyDestroy,
CheckDestroy: checkDestroy,
Steps: []resource.TestStep{
{
Config: testAccDSMongoDBAtlasAPIKeysConfig(orgID, description, roleName),
Config: configDSPlural(orgID, description, roleName),
Check: resource.ComposeTestCheckFunc(
// Test for Resource
testAccCheckMongoDBAtlasAPIKeyExists(resourceName),
resource.TestCheckResourceAttrSet(resourceName, "org_id"),
resource.TestCheckResourceAttrSet(resourceName, "description"),

checkExists(resourceName),
resource.TestCheckResourceAttr(resourceName, "org_id", orgID),
resource.TestCheckResourceAttr(resourceName, "description", description),

// Test for Data source
resource.TestCheckResourceAttrSet(dataSourceName, "org_id"),
resource.TestCheckResourceAttr(dataSourceName, "org_id", orgID),
resource.TestCheckResourceAttrSet(dataSourceName, "results.#"),
),
},
},
})
}

func testAccDSMongoDBAtlasAPIKeysConfig(orgID, description, roleNames string) string {
func configDSPlural(orgID, description, roleNames string) string {
return fmt.Sprintf(`
resource "mongodbatlas_api_key" "test" {
org_id = "%s"
Expand Down

0 comments on commit d70eed8

Please sign in to comment.