Skip to content

Commit fa8aa89

Browse files
authored
feat: Adds auto_indexing attribute to resource_serverless_instance (#2100)
* auto_indexing in data sources * auto_indexing in resource * doc * refactor tests * test for auto_indexing * doc change * fix doc * simplify test * fix test * auto_indexing in its test
1 parent 107c4b1 commit fa8aa89

11 files changed

+180
-164
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,11 @@
11
package privatelinkendpointserverless_test
22

33
import (
4-
"os"
54
"testing"
65

7-
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
8-
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
96
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/mig"
107
)
118

129
func TestMigServerlessPrivateLinkEndpoint_basic(t *testing.T) {
13-
var (
14-
resourceName = "mongodbatlas_privatelink_endpoint_serverless.test"
15-
orgID = os.Getenv("MONGODB_ATLAS_ORG_ID")
16-
projectName = acc.RandomProjectName()
17-
instanceName = acc.RandomClusterName()
18-
config = configBasic(orgID, projectName, instanceName, true)
19-
)
20-
21-
resource.Test(t, resource.TestCase{
22-
PreCheck: func() { mig.PreCheckBasic(t) },
23-
CheckDestroy: checkDestroy,
24-
Steps: []resource.TestStep{
25-
{
26-
ExternalProviders: mig.ExternalProviders(),
27-
Config: config,
28-
Check: resource.ComposeTestCheckFunc(
29-
checkExists(resourceName),
30-
resource.TestCheckResourceAttr(resourceName, "instance_name", instanceName),
31-
),
32-
},
33-
mig.TestStepCheckEmptyPlan(config),
34-
},
35-
})
10+
mig.CreateAndRunTest(t, basicTestCase(t))
3611
}

internal/service/privatelinkendpointserverless/resource_privatelink_endpoint_serverless_test.go

+20-35
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package privatelinkendpointserverless_test
33
import (
44
"context"
55
"fmt"
6-
"os"
76
"testing"
87

98
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
@@ -12,58 +11,44 @@ import (
1211
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
1312
)
1413

15-
func TestAccServerlessPrivateLinkEndpoint_basic(t *testing.T) {
16-
var (
17-
resourceName = "mongodbatlas_privatelink_endpoint_serverless.test"
18-
orgID = os.Getenv("MONGODB_ATLAS_ORG_ID")
19-
projectName = acc.RandomProjectName()
20-
instanceName = acc.RandomClusterName()
21-
)
14+
const (
15+
resourceName = "mongodbatlas_privatelink_endpoint_serverless.test"
16+
)
2217

23-
resource.ParallelTest(t, resource.TestCase{
24-
PreCheck: func() { acc.PreCheckBasic(t) },
25-
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
26-
CheckDestroy: checkDestroy,
27-
Steps: []resource.TestStep{
28-
{
29-
Config: configBasic(orgID, projectName, instanceName, true),
30-
Check: resource.ComposeTestCheckFunc(
31-
checkExists(resourceName),
32-
resource.TestCheckResourceAttr(resourceName, "instance_name", instanceName),
33-
),
34-
},
35-
},
36-
})
18+
func TestAccServerlessPrivateLinkEndpoint_basic(t *testing.T) {
19+
resource.ParallelTest(t, *basicTestCase(t))
3720
}
3821

39-
func TestAccServerlessPrivateLinkEndpoint_importBasic(t *testing.T) {
22+
func basicTestCase(tb testing.TB) *resource.TestCase {
23+
tb.Helper()
24+
4025
var (
41-
resourceName = "mongodbatlas_privatelink_endpoint_serverless.test"
42-
orgID = os.Getenv("MONGODB_ATLAS_ORG_ID")
43-
projectName = acc.RandomProjectName()
26+
projectID = acc.ProjectIDExecution(tb)
4427
instanceName = acc.RandomClusterName()
4528
)
46-
resource.ParallelTest(t, resource.TestCase{
47-
PreCheck: func() { acc.PreCheckBasic(t) },
29+
30+
return &resource.TestCase{
31+
PreCheck: func() { acc.PreCheckBasic(tb) },
4832
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
4933
CheckDestroy: checkDestroy,
5034
Steps: []resource.TestStep{
5135
{
52-
Config: configBasic(orgID, projectName, instanceName, true),
36+
Config: configBasic(projectID, instanceName, true),
5337
Check: resource.ComposeTestCheckFunc(
38+
checkExists(resourceName),
5439
resource.TestCheckResourceAttr(resourceName, "instance_name", instanceName),
5540
),
5641
},
5742
{
58-
Config: configBasic(orgID, projectName, instanceName, false),
43+
Config: configBasic(projectID, instanceName, false),
5944
ResourceName: resourceName,
60-
ImportStateIdFunc: importStateIDFuncBasic(resourceName),
45+
ImportStateIdFunc: importStateIDFunc(resourceName),
6146
ImportState: true,
6247
ImportStateVerify: true,
6348
ImportStateVerifyIgnore: []string{"connection_strings_private_endpoint_srv"},
6449
},
6550
},
66-
})
51+
}
6752
}
6853

6954
func checkDestroy(state *terraform.State) error {
@@ -80,7 +65,7 @@ func checkDestroy(state *terraform.State) error {
8065
return nil
8166
}
8267

83-
func configBasic(orgID, projectName, instanceName string, ignoreConnectionStrings bool) string {
68+
func configBasic(projectID, instanceName string, ignoreConnectionStrings bool) string {
8469
return fmt.Sprintf(`
8570
8671
resource "mongodbatlas_privatelink_endpoint_serverless" "test" {
@@ -90,7 +75,7 @@ func configBasic(orgID, projectName, instanceName string, ignoreConnectionString
9075
}
9176
9277
%s
93-
`, acc.ConfigServerlessInstanceBasic(orgID, projectName, instanceName, ignoreConnectionStrings))
78+
`, acc.ConfigServerlessInstance(projectID, instanceName, ignoreConnectionStrings, nil, nil))
9479
}
9580

9681
func checkExists(resourceName string) resource.TestCheckFunc {
@@ -111,7 +96,7 @@ func checkExists(resourceName string) resource.TestCheckFunc {
11196
}
11297
}
11398

114-
func importStateIDFuncBasic(resourceName string) resource.ImportStateIdFunc {
99+
func importStateIDFunc(resourceName string) resource.ImportStateIdFunc {
115100
return func(s *terraform.State) (string, error) {
116101
rs, ok := s.RootModule().Resources[resourceName]
117102
if !ok {

internal/service/serverlessinstance/data_source_serverless_instance.go

+14
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ func dataSourceSchema() map[string]*schema.Schema {
9292
Optional: true,
9393
Computed: true,
9494
},
95+
"auto_indexing": {
96+
Type: schema.TypeBool,
97+
Optional: true,
98+
Computed: true,
99+
},
95100
"tags": &advancedcluster.DSTagsSchema,
96101
}
97102
}
@@ -160,6 +165,15 @@ func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.
160165
if err := d.Set("continuous_backup_enabled", instance.ServerlessBackupOptions.GetServerlessContinuousBackupEnabled()); err != nil {
161166
return diag.Errorf(errorServerlessInstanceSetting, "continuous_backup_enabled", d.Id(), err)
162167
}
168+
169+
autoIndexing, _, err := connV2.PerformanceAdvisorApi.GetServerlessAutoIndexing(ctx, projectID.(string), instanceName.(string)).Execute()
170+
if err != nil {
171+
return diag.Errorf("error getting serverless instance information for auto_indexing: %s", err)
172+
}
173+
if err := d.Set("auto_indexing", autoIndexing); err != nil {
174+
return diag.Errorf(errorServerlessInstanceSetting, "auto_indexing", d.Id(), err)
175+
}
176+
163177
if err := d.Set("tags", conversion.FlattenTags(instance.GetTags())); err != nil {
164178
return diag.Errorf(advancedcluster.ErrorClusterAdvancedSetting, "tags", d.Id(), err)
165179
}

internal/service/serverlessinstance/data_source_serverless_instances.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,29 @@ func PluralDataSource() *schema.Resource {
3333

3434
func dataSourcePluralRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
3535
connV2 := meta.(*config.MongoDBClient).AtlasV2
36-
projectID, projectIDOK := d.GetOk("project_id")
36+
projectIDValue, projectIDOK := d.GetOk("project_id")
3737
if !(projectIDOK) {
3838
return diag.Errorf("project_id must be configured")
3939
}
40+
projectID := projectIDValue.(string)
4041
options := &admin.ListServerlessInstancesApiParams{
4142
ItemsPerPage: conversion.IntPtr(500),
4243
IncludeCount: conversion.Pointer(true),
43-
GroupId: projectID.(string),
44+
GroupId: projectID,
4445
}
4546

4647
serverlessInstances, err := getServerlessList(ctx, connV2, options, 0)
4748
if err != nil {
4849
return diag.Errorf("error getting serverless instances information: %s", err)
4950
}
5051

51-
flatServerlessInstances := flattenServerlessInstances(serverlessInstances)
52+
autoIndexingList := make([]bool, len(serverlessInstances))
53+
for i := range serverlessInstances {
54+
resp, _, _ := connV2.PerformanceAdvisorApi.GetServerlessAutoIndexing(ctx, projectID, serverlessInstances[i].GetName()).Execute()
55+
autoIndexingList[i] = resp
56+
}
57+
58+
flatServerlessInstances := flattenServerlessInstances(serverlessInstances, autoIndexingList)
5259
if err := d.Set("results", flatServerlessInstances); err != nil {
5360
return diag.Errorf("error setting `results` for serverless instances: %s", err)
5461
}
@@ -82,7 +89,7 @@ func getServerlessList(ctx context.Context, connV2 *admin.APIClient, options *ad
8289
return list, nil
8390
}
8491

85-
func flattenServerlessInstances(serverlessInstances []admin.ServerlessInstanceDescription) []map[string]any {
92+
func flattenServerlessInstances(serverlessInstances []admin.ServerlessInstanceDescription, autoIndexingList []bool) []map[string]any {
8693
var serverlessInstancesMap []map[string]any
8794
if len(serverlessInstances) == 0 {
8895
return nil
@@ -104,6 +111,7 @@ func flattenServerlessInstances(serverlessInstances []admin.ServerlessInstanceDe
104111
"termination_protection_enabled": serverlessInstances[i].GetTerminationProtectionEnabled(),
105112
"continuous_backup_enabled": serverlessInstances[i].ServerlessBackupOptions.GetServerlessContinuousBackupEnabled(),
106113
"tags": conversion.FlattenTags(serverlessInstances[i].GetTags()),
114+
"auto_indexing": autoIndexingList[i],
107115
}
108116
}
109117
return serverlessInstancesMap

internal/service/serverlessinstance/resource_serverless_instance.go

+40-2
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ func resourceSchema() map[string]*schema.Schema {
114114
Optional: true,
115115
Computed: true,
116116
},
117+
"auto_indexing": {
118+
Type: schema.TypeBool,
119+
Optional: true,
120+
Computed: true,
121+
},
117122
"tags": &advancedcluster.RSTagsSchema,
118123
}
119124
}
@@ -164,6 +169,18 @@ func resourceCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.
164169
return diag.Errorf("error creating MongoDB Serverless Instance: %s", err)
165170
}
166171

172+
if _, ok := d.GetOkExists("auto_indexing"); ok {
173+
params := &admin.SetServerlessAutoIndexingApiParams{
174+
GroupId: projectID,
175+
ClusterName: name,
176+
Enable: conversion.Pointer(d.Get("auto_indexing").(bool)),
177+
}
178+
_, _, err := connV2.PerformanceAdvisorApi.SetServerlessAutoIndexingWithParams(ctx, params).Execute()
179+
if err != nil {
180+
return diag.Errorf("error creating MongoDB Serverless Instance setting auto_indexing: %s", err)
181+
}
182+
}
183+
167184
d.SetId(conversion.EncodeStateID(map[string]string{
168185
"project_id": projectID,
169186
"name": name,
@@ -240,14 +257,22 @@ func resourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Di
240257
return diag.Errorf(errorServerlessInstanceSetting, "tags", d.Id(), err)
241258
}
242259

260+
autoIndexing, _, err := connV2.PerformanceAdvisorApi.GetServerlessAutoIndexing(ctx, projectID, instanceName).Execute()
261+
if err != nil {
262+
return diag.Errorf("error getting serverless instance information for auto_indexing: %s", err)
263+
}
264+
if err := d.Set("auto_indexing", autoIndexing); err != nil {
265+
return diag.Errorf(errorServerlessInstanceSetting, "auto_indexing", d.Id(), err)
266+
}
267+
243268
return nil
244269
}
245270

246271
func resourceUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
247272
connV2 := meta.(*config.MongoDBClient).AtlasV2
248273
ids := conversion.DecodeStateID(d.Id())
249274
projectID := ids["project_id"]
250-
instanceName := ids["name"]
275+
name := ids["name"]
251276

252277
if d.HasChange("termination_protection_enabled") || d.HasChange("continuous_backup_enabled") || d.HasChange("tags") {
253278
serverlessBackupOptions := &admin.ClusterServerlessBackupOptions{
@@ -263,7 +288,7 @@ func resourceUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.
263288
params.Tags = conversion.ExpandTagsFromSetSchema(d)
264289
}
265290

266-
_, _, err := connV2.ServerlessInstancesApi.UpdateServerlessInstance(ctx, projectID, instanceName, params).Execute()
291+
_, _, err := connV2.ServerlessInstancesApi.UpdateServerlessInstance(ctx, projectID, name, params).Execute()
267292
if err != nil {
268293
return diag.Errorf("error updating serverless instance: %s", err)
269294
}
@@ -282,6 +307,19 @@ func resourceUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.
282307
return diag.Errorf("error updating MongoDB Serverless Instance: %s", err)
283308
}
284309
}
310+
311+
if d.HasChange("auto_indexing") {
312+
params := &admin.SetServerlessAutoIndexingApiParams{
313+
GroupId: projectID,
314+
ClusterName: name,
315+
Enable: conversion.Pointer(d.Get("auto_indexing").(bool)),
316+
}
317+
_, _, err := connV2.PerformanceAdvisorApi.SetServerlessAutoIndexingWithParams(ctx, params).Execute()
318+
if err != nil {
319+
return diag.Errorf("error updating MongoDB Serverless Instance setting auto_indexing: %s", err)
320+
}
321+
}
322+
285323
return resourceRead(ctx, d, meta)
286324
}
287325

Original file line numberDiff line numberDiff line change
@@ -1,36 +1,11 @@
11
package serverlessinstance_test
22

33
import (
4-
"os"
54
"testing"
65

7-
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
8-
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
96
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/mig"
107
)
118

129
func TestMigServerlessInstance_basic(t *testing.T) {
13-
var (
14-
orgID = os.Getenv("MONGODB_ATLAS_ORG_ID")
15-
projectName = acc.RandomProjectName()
16-
instanceName = acc.RandomClusterName()
17-
config = acc.ConfigServerlessInstanceBasic(orgID, projectName, instanceName, true)
18-
)
19-
resource.ParallelTest(t, resource.TestCase{
20-
PreCheck: func() { mig.PreCheckBasic(t) },
21-
CheckDestroy: checkDestroy,
22-
Steps: []resource.TestStep{
23-
{
24-
ExternalProviders: mig.ExternalProviders(),
25-
Config: config,
26-
Check: resource.ComposeTestCheckFunc(
27-
checkConnectionStringPrivateEndpointIsPresentWithNoElement(resourceName),
28-
checkExists(resourceName),
29-
resource.TestCheckResourceAttr(resourceName, "name", instanceName),
30-
resource.TestCheckResourceAttr(resourceName, "termination_protection_enabled", "false"),
31-
),
32-
},
33-
mig.TestStepCheckEmptyPlan(config),
34-
},
35-
})
10+
mig.CreateAndRunTest(t, basicTestCase(t, mig.ProjectIDGlobal(t)))
3611
}

0 commit comments

Comments
 (0)