Skip to content

Commit bd18b59

Browse files
authored
fix: added a validation for restore_window_days (#300)
1 parent c82481c commit bd18b59

2 files changed

+106
-1
lines changed

mongodbatlas/resource_mongodbatlas_cloud_provider_snapshot_backup_policy.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -251,11 +251,14 @@ func snapshotScheduleUpdate(d *schema.ResourceData, conn *matlas.Client, project
251251
req := &matlas.CloudProviderSnapshotBackupPolicy{
252252
ReferenceHourOfDay: pointy.Int64(cast.ToInt64(d.Get("reference_hour_of_day"))),
253253
ReferenceMinuteOfHour: pointy.Int64(cast.ToInt64(d.Get("reference_minute_of_hour"))),
254-
RestoreWindowDays: pointy.Int64(cast.ToInt64(d.Get("restore_window_days"))),
255254
UpdateSnapshots: pointy.Bool(cast.ToBool(d.Get("update_snapshots").(bool))),
256255
Policies: expandPolicies(d),
257256
}
258257

258+
if rwd, ok := d.GetOk("restore_window_days"); ok {
259+
req.RestoreWindowDays = pointy.Int64(cast.ToInt64(rwd))
260+
}
261+
259262
_, _, err := conn.CloudProviderSnapshotBackupPolicies.Update(context.Background(), projectID, clusterName, req)
260263
if err != nil {
261264
return fmt.Errorf(errorSnapshotBackupPolicyUpdate, err)

mongodbatlas/resource_mongodbatlas_cloud_provider_snapshot_backup_policy_test.go

+102
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,49 @@ func TestAccResourceMongoDBAtlasCloudProviderSnapshotBackupPolicy_basic(t *testi
5959
})
6060
}
6161

62+
func TestAccResourceMongoDBAtlasCloudProviderSnapshotBackupPolicy_withoutRestoreWindowDays(t *testing.T) {
63+
var (
64+
resourceName = "mongodbatlas_cloud_provider_snapshot_backup_policy.test"
65+
projectID = os.Getenv("MONGODB_ATLAS_PROJECT_ID")
66+
clusterName = fmt.Sprintf("test-acc-%s", acctest.RandString(10))
67+
)
68+
69+
resource.ParallelTest(t, resource.TestCase{
70+
PreCheck: func() { testAccPreCheck(t) },
71+
Providers: testAccProviders,
72+
CheckDestroy: testAccCheckMongoDBAtlasCloudProviderSnapshotBackupPolicyDestroy,
73+
Steps: []resource.TestStep{
74+
{
75+
Config: testAccMongoDBAtlasCloudProviderSnapshotBackupPolicyConfigWithoutRestoreDays(projectID, clusterName, &matlas.CloudProviderSnapshotBackupPolicy{
76+
ReferenceHourOfDay: pointy.Int64(3),
77+
ReferenceMinuteOfHour: pointy.Int64(45),
78+
}),
79+
Check: resource.ComposeTestCheckFunc(
80+
testAccCheckMongoDBAtlasCloudProviderSnapshotBackupPolicyExists(resourceName),
81+
resource.TestCheckResourceAttr(resourceName, "project_id", projectID),
82+
resource.TestCheckResourceAttr(resourceName, "cluster_name", clusterName),
83+
resource.TestCheckResourceAttr(resourceName, "reference_hour_of_day", "3"),
84+
resource.TestCheckResourceAttr(resourceName, "reference_minute_of_hour", "45"),
85+
),
86+
},
87+
{
88+
Config: testAccMongoDBAtlasCloudProviderSnapshotBackupPolicyConfigWithoutRestoreDays(projectID, clusterName, &matlas.CloudProviderSnapshotBackupPolicy{
89+
ReferenceHourOfDay: pointy.Int64(0),
90+
ReferenceMinuteOfHour: pointy.Int64(0),
91+
}),
92+
Check: resource.ComposeTestCheckFunc(
93+
testAccCheckMongoDBAtlasCloudProviderSnapshotBackupPolicyExists(resourceName),
94+
resource.TestCheckResourceAttr(resourceName, "project_id", projectID),
95+
resource.TestCheckResourceAttr(resourceName, "cluster_name", clusterName),
96+
resource.TestCheckResourceAttr(resourceName, "reference_minute_of_hour", "0"),
97+
resource.TestCheckResourceAttr(resourceName, "reference_hour_of_day", "0"),
98+
resource.TestCheckResourceAttr(resourceName, "restore_window_days", "7"),
99+
),
100+
},
101+
},
102+
})
103+
}
104+
62105
func TestAccResourceMongoDBAtlasCloudProviderSnapshotBackupPolicy_importBasic(t *testing.T) {
63106
SkipTestImport(t)
64107
var (
@@ -214,3 +257,62 @@ func testAccMongoDBAtlasCloudProviderSnapshotBackupPolicyConfig(projectID, clust
214257
}
215258
`, projectID, clusterName, *p.ReferenceHourOfDay, *p.ReferenceMinuteOfHour, *p.RestoreWindowDays)
216259
}
260+
261+
func testAccMongoDBAtlasCloudProviderSnapshotBackupPolicyConfigWithoutRestoreDays(projectID, clusterName string, p *matlas.CloudProviderSnapshotBackupPolicy) string {
262+
return fmt.Sprintf(`
263+
resource "mongodbatlas_cluster" "my_cluster" {
264+
project_id = "%s"
265+
name = "%s"
266+
disk_size_gb = 5
267+
268+
// Provider Settings "block"
269+
provider_name = "AWS"
270+
provider_region_name = "EU_CENTRAL_1"
271+
provider_instance_size_name = "M10"
272+
provider_backup_enabled = true //enable cloud provider snapshots
273+
provider_disk_iops = 100
274+
provider_encrypt_ebs_volume = false
275+
}
276+
277+
resource "mongodbatlas_cloud_provider_snapshot_backup_policy" "test" {
278+
project_id = mongodbatlas_cluster.my_cluster.project_id
279+
cluster_name = mongodbatlas_cluster.my_cluster.name
280+
281+
reference_hour_of_day = %d
282+
reference_minute_of_hour = %d
283+
284+
policies {
285+
id = mongodbatlas_cluster.my_cluster.snapshot_backup_policy.0.policies.0.id
286+
287+
policy_item {
288+
id = mongodbatlas_cluster.my_cluster.snapshot_backup_policy.0.policies.0.policy_item.0.id
289+
frequency_interval = 1
290+
frequency_type = "hourly"
291+
retention_unit = "days"
292+
retention_value = 1
293+
}
294+
policy_item {
295+
id = mongodbatlas_cluster.my_cluster.snapshot_backup_policy.0.policies.0.policy_item.1.id
296+
frequency_interval = 1
297+
frequency_type = "daily"
298+
retention_unit = "days"
299+
retention_value = 2
300+
}
301+
policy_item {
302+
id = mongodbatlas_cluster.my_cluster.snapshot_backup_policy.0.policies.0.policy_item.2.id
303+
frequency_interval = 4
304+
frequency_type = "weekly"
305+
retention_unit = "weeks"
306+
retention_value = 3
307+
}
308+
policy_item {
309+
id = mongodbatlas_cluster.my_cluster.snapshot_backup_policy.0.policies.0.policy_item.3.id
310+
frequency_interval = 5
311+
frequency_type = "monthly"
312+
retention_unit = "months"
313+
retention_value = 4
314+
}
315+
}
316+
}
317+
`, projectID, clusterName, *p.ReferenceHourOfDay, *p.ReferenceMinuteOfHour)
318+
}

0 commit comments

Comments
 (0)