Skip to content

Commit 89bc12b

Browse files
authored
chore: Upgrades auditing resource to auto-generated SDK (#1881)
* rename * change test name to run in CI * fix checkDestroy * connV2 in tests * datasource * read * create * update & delete
1 parent cf26ffe commit 89bc12b

File tree

6 files changed

+162
-113
lines changed

6 files changed

+162
-113
lines changed

.github/workflows/migration-tests.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ jobs:
6363
stream: ${{ steps.filter.outputs.stream == 'true' || env.mustTrigger == 'true' }}
6464
federation: ${{ steps.filter.outputs.federation == 'true' || env.mustTrigger == 'true' }}
6565
search_deployment: ${{ steps.filter.outputs.search_deployment == 'true' || env.mustTrigger == 'true' }}
66+
generic: ${{ steps.filter.outputs.generic == 'true' || env.mustTrigger == 'true' }}
6667
steps:
6768
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
6869
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50
@@ -101,6 +102,10 @@ jobs:
101102
- 'internal/service/federateddatabaseinstance/*.go'
102103
search_deployment:
103104
- 'internal/service/searchdeployment/*.go'
105+
generic:
106+
- 'internal/service/backupcompliancepolicy/*.go'
107+
- 'internal/service/auditing/*.go'
108+
- 'internal/service/x509authenticationdatabaseuser/*.go'
104109
105110
project:
106111
needs: [ change-detection, get-provider-version ]
@@ -297,3 +302,31 @@ jobs:
297302
MONGODB_ATLAS_LAST_VERSION: ${{ needs.get-provider-version.outputs.provider_version }}
298303
TEST_REGEX: "^TestAccMigrationSearchDeployment"
299304
run: make testacc
305+
306+
generic:
307+
needs: [ change-detection, get-provider-version ]
308+
if: ${{ needs.change-detection.outputs.generic == 'true' || inputs.test_group == 'generic' }}
309+
runs-on: ubuntu-latest
310+
steps:
311+
- name: Checkout
312+
uses: actions/checkout@v4
313+
- name: Set up Go
314+
uses: actions/setup-go@v5
315+
with:
316+
go-version-file: 'go.mod'
317+
- uses: hashicorp/setup-terraform@v3
318+
with:
319+
terraform_version: ${{ env.terraform_version }}
320+
terraform_wrapper: false
321+
- name: Migration Tests
322+
env:
323+
MONGODB_ATLAS_PUBLIC_KEY: ${{ secrets.MONGODB_ATLAS_PUBLIC_KEY_CLOUD_DEV }}
324+
MONGODB_ATLAS_PRIVATE_KEY: ${{ secrets.MONGODB_ATLAS_PRIVATE_KEY_CLOUD_DEV }}
325+
CA_CERT: ${{ secrets.CA_CERT }}
326+
MONGODB_ATLAS_ORG_ID: ${{ vars.MONGODB_ATLAS_ORG_ID_CLOUD_DEV }}
327+
MONGODB_ATLAS_BASE_URL: ${{ vars.MONGODB_ATLAS_BASE_URL }}
328+
MONGODB_ATLAS_PROJECT_OWNER_ID: ${{ vars.MONGODB_ATLAS_PROJECT_OWNER_ID }}
329+
MONGODB_ATLAS_LAST_VERSION: ${{ needs.get-provider-version.outputs.provider_version }}
330+
TEST_REGEX: "^TestAccMigrationGeneric"
331+
run: make testacc
332+

internal/service/auditing/data_source_auditing.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
func DataSource() *schema.Resource {
1313
return &schema.Resource{
14-
ReadContext: dataSourceMongoDBAtlasAuditingRead,
14+
ReadContext: dataSourceRead,
1515
Schema: map[string]*schema.Schema{
1616
"project_id": {
1717
Type: schema.TypeString,
@@ -37,28 +37,28 @@ func DataSource() *schema.Resource {
3737
}
3838
}
3939

40-
func dataSourceMongoDBAtlasAuditingRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
41-
conn := meta.(*config.MongoDBClient).Atlas
40+
func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
41+
connV2 := meta.(*config.MongoDBClient).AtlasV2
4242
projectID := d.Get("project_id").(string)
4343

44-
auditing, _, err := conn.Auditing.Get(ctx, projectID)
44+
auditing, _, err := connV2.AuditingApi.GetAuditingConfiguration(ctx, projectID).Execute()
4545
if err != nil {
4646
return diag.FromErr(fmt.Errorf(errorAuditingRead, projectID, err))
4747
}
4848

49-
if err := d.Set("audit_authorization_success", auditing.AuditAuthorizationSuccess); err != nil {
49+
if err := d.Set("audit_authorization_success", auditing.GetAuditAuthorizationSuccess()); err != nil {
5050
return diag.FromErr(fmt.Errorf(errorAuditingRead, projectID, err))
5151
}
5252

53-
if err := d.Set("audit_filter", auditing.AuditFilter); err != nil {
53+
if err := d.Set("audit_filter", auditing.GetAuditFilter()); err != nil {
5454
return diag.FromErr(fmt.Errorf(errorAuditingRead, projectID, err))
5555
}
5656

57-
if err := d.Set("enabled", auditing.Enabled); err != nil {
57+
if err := d.Set("enabled", auditing.GetEnabled()); err != nil {
5858
return diag.FromErr(fmt.Errorf(errorAuditingRead, projectID, err))
5959
}
6060

61-
if err := d.Set("configuration_type", auditing.ConfigurationType); err != nil {
61+
if err := d.Set("configuration_type", auditing.GetConfigurationType()); err != nil {
6262
return diag.FromErr(fmt.Errorf(errorAuditingRead, projectID, err))
6363
}
6464

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,39 @@
11
package auditing_test
22

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

7+
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
88
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
99
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
10-
matlas "go.mongodb.org/atlas/mongodbatlas"
1110
)
1211

13-
func TestAccAdvDSAuditing_basic(t *testing.T) {
12+
func TestAccGenericAuditingDS_basic(t *testing.T) {
1413
var (
15-
auditing matlas.Auditing
1614
dataSourceName = "data.mongodbatlas_auditing.test"
17-
projectID = os.Getenv("MONGODB_ATLAS_PROJECT_ID")
15+
orgID = os.Getenv("MONGODB_ATLAS_ORG_ID")
16+
projectName = acctest.RandomWithPrefix("test-acc")
1817
auditAuth = true
1918
auditFilter = "{ 'atype': 'authenticate', 'param': { 'user': 'auditAdmin', 'db': 'admin', 'mechanism': 'SCRAM-SHA-1' }}"
2019
enabled = true
2120
)
2221

2322
resource.ParallelTest(t, resource.TestCase{
24-
PreCheck: func() { acc.PreCheck(t) },
23+
PreCheck: func() { acc.PreCheckBasic(t) },
2524
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
2625
Steps: []resource.TestStep{
2726
{
28-
Config: testAccMongoDBAtlasDataSourceAuditingConfig(projectID, auditFilter, auditAuth, enabled),
27+
Config: configBasic(orgID, projectName, auditFilter, auditAuth, enabled),
2928
Check: resource.ComposeTestCheckFunc(
30-
testAccCheckMongoDBAtlasAuditingExists("mongodbatlas_auditing.test", &auditing),
29+
checkExists("mongodbatlas_auditing.test"),
3130
resource.TestCheckResourceAttrSet(dataSourceName, "project_id"),
32-
33-
resource.TestCheckResourceAttr(dataSourceName, "project_id", projectID),
3431
resource.TestCheckResourceAttr(dataSourceName, "audit_filter", auditFilter),
3532
resource.TestCheckResourceAttr(dataSourceName, "audit_authorization_success", "true"),
3633
resource.TestCheckResourceAttr(dataSourceName, "enabled", "true"),
3734
resource.TestCheckResourceAttr(dataSourceName, "configuration_type", "FILTER_JSON"),
3835
),
3936
},
40-
{
41-
Config: testAccMongoDBAtlasDataSourceAuditingConfig(projectID, "{}", false, false),
42-
Check: resource.ComposeTestCheckFunc(
43-
testAccCheckMongoDBAtlasAuditingExists("mongodbatlas_auditing.test", &auditing),
44-
resource.TestCheckResourceAttrSet(dataSourceName, "project_id"),
45-
46-
resource.TestCheckResourceAttr(dataSourceName, "project_id", projectID),
47-
resource.TestCheckResourceAttr(dataSourceName, "audit_filter", "{}"),
48-
resource.TestCheckResourceAttr(dataSourceName, "audit_authorization_success", "false"),
49-
resource.TestCheckResourceAttr(dataSourceName, "enabled", "false"),
50-
resource.TestCheckResourceAttr(dataSourceName, "configuration_type", "FILTER_JSON"),
51-
),
52-
},
5337
},
5438
})
5539
}
56-
57-
func testAccMongoDBAtlasDataSourceAuditingConfig(projectID, auditFilter string, auditAuth, enabled bool) string {
58-
return fmt.Sprintf(`
59-
resource "mongodbatlas_auditing" "test" {
60-
project_id = "%s"
61-
audit_filter = "%s"
62-
audit_authorization_success = %t
63-
enabled = %t
64-
}
65-
66-
data "mongodbatlas_auditing" "test" {
67-
project_id = "${mongodbatlas_auditing.test.id}"
68-
}
69-
`, projectID, auditFilter, auditAuth, enabled)
70-
}

internal/service/auditing/resource_auditing.go

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,25 @@ import (
77

88
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
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"
1112
"github.com/mwielbut/pointy"
12-
matlas "go.mongodb.org/atlas/mongodbatlas"
13+
"go.mongodb.org/atlas-sdk/v20231115005/admin"
1314
)
1415

1516
const (
1617
errorAuditingCreate = "error creating MongoDB Auditing (%s): %s"
1718
errorAuditingUpdate = "error updating MongoDB Auditing (%s): %s"
1819
errorAuditingRead = "error reading MongoDB Auditing (%s): %s"
20+
errorAuditingDelete = "error deleting MongoDB Auditing (%s): %s"
1921
)
2022

2123
func Resource() *schema.Resource {
2224
return &schema.Resource{
23-
CreateContext: resourceMongoDBAtlasAuditingCreate,
24-
ReadContext: resourceMongoDBAtlasAuditingRead,
25-
UpdateContext: resourceMongoDBAtlasAuditingUpdate,
26-
DeleteContext: resourceMongoDBAtlasAuditingDelete,
25+
CreateContext: resourceCreate,
26+
ReadContext: resourceRead,
27+
UpdateContext: resourceUpdate,
28+
DeleteContext: resourceDelete,
2729
Importer: &schema.ResourceImporter{
2830
StateContext: schema.ImportStatePassthroughContext,
2931
},
@@ -56,38 +58,35 @@ func Resource() *schema.Resource {
5658
}
5759
}
5860

59-
func resourceMongoDBAtlasAuditingCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
60-
conn := meta.(*config.MongoDBClient).Atlas
61-
61+
func resourceCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
62+
connV2 := meta.(*config.MongoDBClient).AtlasV2
6263
projectID := d.Get("project_id").(string)
63-
auditingReq := &matlas.Auditing{}
64+
auditingReq := &admin.AuditLog{}
6465

6566
if auditAuth, ok := d.GetOk("audit_authorization_success"); ok {
6667
auditingReq.AuditAuthorizationSuccess = pointy.Bool(auditAuth.(bool))
6768
}
6869

6970
if auditFilter, ok := d.GetOk("audit_filter"); ok {
70-
auditingReq.AuditFilter = auditFilter.(string)
71+
auditingReq.AuditFilter = conversion.StringPtr(auditFilter.(string))
7172
}
7273

7374
if enabled, ok := d.GetOk("enabled"); ok {
7475
auditingReq.Enabled = pointy.Bool(enabled.(bool))
7576
}
7677

77-
_, _, err := conn.Auditing.Configure(ctx, projectID, auditingReq)
78+
_, _, err := connV2.AuditingApi.UpdateAuditingConfiguration(ctx, projectID, auditingReq).Execute()
7879
if err != nil {
7980
return diag.FromErr(fmt.Errorf(errorAuditingCreate, projectID, err))
8081
}
8182

8283
d.SetId(projectID)
83-
84-
return resourceMongoDBAtlasAuditingRead(ctx, d, meta)
84+
return resourceRead(ctx, d, meta)
8585
}
8686

87-
func resourceMongoDBAtlasAuditingRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
88-
conn := meta.(*config.MongoDBClient).Atlas
89-
90-
auditing, resp, err := conn.Auditing.Get(context.Background(), d.Id())
87+
func resourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
88+
connV2 := meta.(*config.MongoDBClient).AtlasV2
89+
auditing, resp, err := connV2.AuditingApi.GetAuditingConfiguration(ctx, d.Id()).Execute()
9190
if err != nil {
9291
if resp != nil && resp.StatusCode == http.StatusNotFound {
9392
d.SetId("")
@@ -97,65 +96,58 @@ func resourceMongoDBAtlasAuditingRead(ctx context.Context, d *schema.ResourceDat
9796
return diag.FromErr(fmt.Errorf(errorAuditingRead, d.Id(), err))
9897
}
9998

100-
if err := d.Set("audit_authorization_success", auditing.AuditAuthorizationSuccess); err != nil {
99+
if err := d.Set("audit_authorization_success", auditing.GetAuditAuthorizationSuccess()); err != nil {
101100
return diag.FromErr(fmt.Errorf(errorAuditingRead, d.Id(), err))
102101
}
103102

104-
if err := d.Set("audit_filter", auditing.AuditFilter); err != nil {
103+
if err := d.Set("audit_filter", auditing.GetAuditFilter()); err != nil {
105104
return diag.FromErr(fmt.Errorf(errorAuditingRead, d.Id(), err))
106105
}
107106

108-
if err := d.Set("enabled", auditing.Enabled); err != nil {
107+
if err := d.Set("enabled", auditing.GetEnabled()); err != nil {
109108
return diag.FromErr(fmt.Errorf(errorAuditingRead, d.Id(), err))
110109
}
111110

112-
if err := d.Set("configuration_type", auditing.ConfigurationType); err != nil {
111+
if err := d.Set("configuration_type", auditing.GetConfigurationType()); err != nil {
113112
return diag.FromErr(fmt.Errorf(errorAuditingRead, d.Id(), err))
114113
}
115114

116115
return nil
117116
}
118117

119-
func resourceMongoDBAtlasAuditingUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
120-
// Get the client connection.
121-
conn := meta.(*config.MongoDBClient).Atlas
122-
123-
auditingReq := &matlas.Auditing{}
118+
func resourceUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
119+
connV2 := meta.(*config.MongoDBClient).AtlasV2
120+
auditingReq := &admin.AuditLog{}
124121

125122
if d.HasChange("audit_authorization_success") {
126123
auditingReq.AuditAuthorizationSuccess = pointy.Bool((d.Get("audit_authorization_success").(bool)))
127124
}
128125

129126
if d.HasChange("audit_filter") {
130-
auditingReq.AuditFilter = d.Get("audit_filter").(string)
127+
auditingReq.AuditFilter = conversion.StringPtr(d.Get("audit_filter").(string))
131128
}
132129

133130
if d.HasChange("enabled") {
134131
auditingReq.Enabled = pointy.Bool(d.Get("enabled").(bool))
135132
}
136133

137-
_, _, err := conn.Auditing.Configure(ctx, d.Id(), auditingReq)
134+
_, _, err := connV2.AuditingApi.UpdateAuditingConfiguration(ctx, d.Id(), auditingReq).Execute()
138135
if err != nil {
139136
return diag.FromErr(fmt.Errorf(errorAuditingUpdate, d.Id(), err))
140137
}
141138

142139
return nil
143140
}
144141

145-
func resourceMongoDBAtlasAuditingDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
146-
// Get the client connection.
147-
conn := meta.(*config.MongoDBClient).Atlas
148-
149-
auditingReq := &matlas.Auditing{}
150-
151-
auditingReq.Enabled = pointy.Bool(false)
152-
153-
_, _, err := conn.Auditing.Configure(ctx, d.Id(), auditingReq)
142+
func resourceDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
143+
connV2 := meta.(*config.MongoDBClient).AtlasV2
144+
auditingReq := &admin.AuditLog{
145+
Enabled: pointy.Bool(false),
146+
}
147+
_, _, err := connV2.AuditingApi.UpdateAuditingConfiguration(ctx, d.Id(), auditingReq).Execute()
154148
if err != nil {
155-
return diag.FromErr(fmt.Errorf(errorAuditingUpdate, d.Id(), err))
149+
return diag.FromErr(fmt.Errorf(errorAuditingDelete, d.Id(), err))
156150
}
157-
158151
d.SetId("")
159-
160152
return nil
161153
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package auditing_test
2+
3+
import (
4+
"os"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
8+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-testing/plancheck"
10+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
11+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/mig"
12+
)
13+
14+
func TestAccMigrationGenericAuditing_basic(t *testing.T) {
15+
var (
16+
resourceName = "mongodbatlas_auditing.test"
17+
orgID = os.Getenv("MONGODB_ATLAS_ORG_ID")
18+
projectName = acctest.RandomWithPrefix("test-acc")
19+
auditAuth = true
20+
auditFilter = "{ 'atype': 'authenticate', 'param': { 'user': 'auditAdmin', 'db': 'admin', 'mechanism': 'SCRAM-SHA-1' }}"
21+
enabled = true
22+
)
23+
24+
resource.ParallelTest(t, resource.TestCase{
25+
PreCheck: func() { mig.PreCheckBasic(t) },
26+
CheckDestroy: checkDestroy,
27+
Steps: []resource.TestStep{
28+
{
29+
Config: configBasic(orgID, projectName, auditFilter, auditAuth, enabled),
30+
ExternalProviders: mig.ExternalProviders(),
31+
Check: resource.ComposeTestCheckFunc(
32+
checkExists(resourceName),
33+
resource.TestCheckResourceAttrSet(resourceName, "project_id"),
34+
resource.TestCheckResourceAttrSet(resourceName, "audit_filter"),
35+
resource.TestCheckResourceAttrSet(resourceName, "audit_authorization_success"),
36+
resource.TestCheckResourceAttrSet(resourceName, "enabled"),
37+
resource.TestCheckResourceAttr(resourceName, "audit_filter", auditFilter),
38+
resource.TestCheckResourceAttr(resourceName, "audit_authorization_success", "true"),
39+
resource.TestCheckResourceAttr(resourceName, "enabled", "true"),
40+
resource.TestCheckResourceAttr(resourceName, "configuration_type", "FILTER_JSON"),
41+
),
42+
},
43+
{
44+
ProtoV6ProviderFactories: acc.TestAccProviderV6Factories,
45+
Config: configBasic(orgID, projectName, auditFilter, auditAuth, enabled),
46+
ConfigPlanChecks: resource.ConfigPlanChecks{
47+
PreApply: []plancheck.PlanCheck{
48+
acc.DebugPlan(),
49+
plancheck.ExpectEmptyPlan(),
50+
},
51+
},
52+
},
53+
},
54+
})
55+
}

0 commit comments

Comments
 (0)