@@ -75,10 +75,81 @@ func TestAccResourceMongoDBAtlasCloudBackupSchedule_basic(t *testing.T) {
75
75
resource .TestCheckResourceAttr (resourceName , "policy_item_monthly.0.retention_value" , "3" ),
76
76
),
77
77
},
78
+ {
79
+ Config : testAccMongoDBAtlasCloudBackupScheduleAdvancedPoliciesConfig (projectID , clusterName , & matlas.CloudProviderSnapshotBackupPolicy {
80
+ ReferenceHourOfDay : pointy .Int64 (0 ),
81
+ ReferenceMinuteOfHour : pointy .Int64 (0 ),
82
+ RestoreWindowDays : pointy .Int64 (7 ),
83
+ }),
84
+ Check : resource .ComposeTestCheckFunc (
85
+ testAccCheckMongoDBAtlasCloudBackupScheduleExists (resourceName ),
86
+ resource .TestCheckResourceAttr (resourceName , "project_id" , projectID ),
87
+ resource .TestCheckResourceAttr (resourceName , "cluster_name" , clusterName ),
88
+ resource .TestCheckResourceAttr (resourceName , "auto_export_enabled" , "false" ),
89
+ resource .TestCheckResourceAttr (resourceName , "reference_hour_of_day" , "0" ),
90
+ resource .TestCheckResourceAttr (resourceName , "reference_minute_of_hour" , "0" ),
91
+ resource .TestCheckResourceAttr (resourceName , "restore_window_days" , "7" ),
92
+ resource .TestCheckResourceAttr (resourceName , "policy_item_hourly.#" , "1" ),
93
+ resource .TestCheckResourceAttr (resourceName , "policy_item_daily.#" , "1" ),
94
+ resource .TestCheckResourceAttr (resourceName , "policy_item_weekly.#" , "2" ),
95
+ resource .TestCheckResourceAttr (resourceName , "policy_item_monthly.#" , "2" ),
96
+ resource .TestCheckResourceAttr (resourceName , "policy_item_hourly.0.frequency_interval" , "2" ),
97
+ resource .TestCheckResourceAttr (resourceName , "policy_item_hourly.0.retention_unit" , "days" ),
98
+ resource .TestCheckResourceAttr (resourceName , "policy_item_hourly.0.retention_value" , "1" ),
99
+ resource .TestCheckResourceAttr (resourceName , "policy_item_daily.0.frequency_interval" , "1" ),
100
+ resource .TestCheckResourceAttr (resourceName , "policy_item_daily.0.retention_unit" , "days" ),
101
+ resource .TestCheckResourceAttr (resourceName , "policy_item_daily.0.retention_value" , "4" ),
102
+ resource .TestCheckResourceAttr (resourceName , "policy_item_weekly.0.frequency_interval" , "4" ),
103
+ resource .TestCheckResourceAttr (resourceName , "policy_item_weekly.0.retention_unit" , "weeks" ),
104
+ resource .TestCheckResourceAttr (resourceName , "policy_item_weekly.0.retention_value" , "2" ),
105
+ resource .TestCheckResourceAttr (resourceName , "policy_item_monthly.0.frequency_interval" , "5" ),
106
+ resource .TestCheckResourceAttr (resourceName , "policy_item_monthly.0.retention_unit" , "months" ),
107
+ resource .TestCheckResourceAttr (resourceName , "policy_item_monthly.0.retention_value" , "3" ),
108
+ resource .TestCheckResourceAttr (resourceName , "policy_item_weekly.1.frequency_interval" , "5" ),
109
+ resource .TestCheckResourceAttr (resourceName , "policy_item_weekly.1.retention_unit" , "weeks" ),
110
+ resource .TestCheckResourceAttr (resourceName , "policy_item_weekly.1.retention_value" , "5" ),
111
+ resource .TestCheckResourceAttr (resourceName , "policy_item_monthly.1.frequency_interval" , "6" ),
112
+ resource .TestCheckResourceAttr (resourceName , "policy_item_monthly.1.retention_unit" , "months" ),
113
+ resource .TestCheckResourceAttr (resourceName , "policy_item_monthly.1.retention_value" , "4" ),
114
+ ),
115
+ },
78
116
},
79
117
})
80
118
}
81
119
120
+ func TestAccResourceMongoDBAtlasCloudBackupSchedule_export (t * testing.T ) {
121
+ var (
122
+ resourceName = "mongodbatlas_cloud_backup_schedule.schedule_test"
123
+ projectID = os .Getenv ("MONGODB_ATLAS_PROJECT_ID" )
124
+ clusterName = fmt .Sprintf ("test-acc-%s" , acctest .RandString (10 ))
125
+ policyName = acctest .RandomWithPrefix ("test-acc" )
126
+ roleName = acctest .RandomWithPrefix ("test-acc" )
127
+ )
128
+
129
+ resource .ParallelTest (t , resource.TestCase {
130
+ PreCheck : func () { testAccPreCheck (t ) },
131
+ ProviderFactories : testAccProviderFactories ,
132
+
133
+ Steps : []resource.TestStep {
134
+ {
135
+ Config : testAccMongoDBAtlasCloudBackupScheduleExportPoliciesConfig (projectID , clusterName , policyName , roleName ),
136
+ Check : resource .ComposeTestCheckFunc (
137
+ testAccCheckMongoDBAtlasCloudBackupScheduleExists (resourceName ),
138
+ resource .TestCheckResourceAttr (resourceName , "project_id" , projectID ),
139
+ resource .TestCheckResourceAttr (resourceName , "cluster_name" , clusterName ),
140
+ resource .TestCheckResourceAttr (resourceName , "auto_export_enabled" , "true" ),
141
+ resource .TestCheckResourceAttr (resourceName , "reference_hour_of_day" , "20" ),
142
+ resource .TestCheckResourceAttr (resourceName , "reference_minute_of_hour" , "5" ),
143
+ resource .TestCheckResourceAttr (resourceName , "restore_window_days" , "4" ),
144
+ resource .TestCheckResourceAttr (resourceName , "policy_item_daily.#" , "1" ),
145
+ resource .TestCheckResourceAttr (resourceName , "policy_item_daily.0.frequency_interval" , "1" ),
146
+ resource .TestCheckResourceAttr (resourceName , "policy_item_daily.0.retention_unit" , "days" ),
147
+ resource .TestCheckResourceAttr (resourceName , "policy_item_daily.0.retention_value" , "4" ),
148
+ ),
149
+ },
150
+ },
151
+ })
152
+ }
82
153
func TestAccResourceMongoDBAtlasCloudBackupSchedule_onepolicy (t * testing.T ) {
83
154
var (
84
155
resourceName = "mongodbatlas_cloud_backup_schedule.schedule_test"
@@ -476,3 +547,173 @@ resource "mongodbatlas_cloud_backup_schedule" "schedule_test" {
476
547
}
477
548
` , projectID , clusterName , policy .FrequencyInterval , policy .RetentionUnit , policy .RetentionValue )
478
549
}
550
+
551
+ func testAccMongoDBAtlasCloudBackupScheduleAdvancedPoliciesConfig (projectID , clusterName string , p * matlas.CloudProviderSnapshotBackupPolicy ) string {
552
+ return fmt .Sprintf (`
553
+ resource "mongodbatlas_cluster" "my_cluster" {
554
+ project_id = "%s"
555
+ name = "%s"
556
+ disk_size_gb = 5
557
+
558
+ // Provider Settings "block"
559
+ provider_name = "AWS"
560
+ provider_region_name = "EU_CENTRAL_1"
561
+ provider_instance_size_name = "M10"
562
+ cloud_backup = true //enable cloud provider snapshots
563
+ }
564
+
565
+ resource "mongodbatlas_cloud_backup_schedule" "schedule_test" {
566
+ project_id = mongodbatlas_cluster.my_cluster.project_id
567
+ cluster_name = mongodbatlas_cluster.my_cluster.name
568
+ auto_export_enabled = false
569
+ reference_hour_of_day = %d
570
+ reference_minute_of_hour = %d
571
+ restore_window_days = %d
572
+
573
+ policy_item_hourly {
574
+ frequency_interval = 2
575
+ retention_unit = "days"
576
+ retention_value = 1
577
+ }
578
+ policy_item_daily {
579
+ frequency_interval = 1
580
+ retention_unit = "days"
581
+ retention_value = 4
582
+ }
583
+ policy_item_weekly {
584
+ frequency_interval = 4
585
+ retention_unit = "weeks"
586
+ retention_value = 2
587
+ }
588
+ policy_item_weekly {
589
+ frequency_interval = 5
590
+ retention_unit = "weeks"
591
+ retention_value = 5
592
+ }
593
+ policy_item_monthly {
594
+ frequency_interval = 5
595
+ retention_unit = "months"
596
+ retention_value = 3
597
+ }
598
+ policy_item_monthly {
599
+ frequency_interval = 6
600
+ retention_unit = "months"
601
+ retention_value = 4
602
+ }
603
+ }
604
+ ` , projectID , clusterName , * p .ReferenceHourOfDay , * p .ReferenceMinuteOfHour , * p .RestoreWindowDays )
605
+ }
606
+
607
+ func testAccMongoDBAtlasCloudBackupScheduleExportPoliciesConfig (projectID , clusterName , policyName , roleName string ) string {
608
+ return fmt .Sprintf (`
609
+
610
+ locals {
611
+ mongodbatlas_project_id = %[1]q
612
+ }
613
+
614
+ resource "mongodbatlas_cluster" "my_cluster" {
615
+ project_id = %[1]q
616
+ name = %[2]q
617
+ disk_size_gb = 5
618
+
619
+ // Provider Settings "block"
620
+ provider_name = "AWS"
621
+ provider_region_name = "EU_CENTRAL_1"
622
+ provider_instance_size_name = "M10"
623
+ cloud_backup = true //enable cloud provider snapshots
624
+ depends_on = ["mongodbatlas_cloud_backup_snapshot_export_bucket.test"]
625
+ }
626
+
627
+ resource "mongodbatlas_cloud_backup_schedule" "schedule_test" {
628
+ project_id = mongodbatlas_cluster.my_cluster.project_id
629
+ cluster_name = mongodbatlas_cluster.my_cluster.name
630
+ auto_export_enabled = true
631
+ reference_hour_of_day = 20
632
+ reference_minute_of_hour = "05"
633
+ restore_window_days = 4
634
+
635
+ policy_item_daily {
636
+ frequency_interval = 1
637
+ retention_unit = "days"
638
+ retention_value = 4
639
+ }
640
+ export {
641
+ export_bucket_id = mongodbatlas_cloud_backup_snapshot_export_bucket.test.export_bucket_id
642
+ frequency_type = "daily"
643
+ }
644
+ }
645
+
646
+ resource "aws_s3_bucket" "backup" {
647
+ bucket = "${local.mongodbatlas_project_id}-s3-mongodb-backups"
648
+ force_destroy = true
649
+ object_lock_configuration {
650
+ object_lock_enabled = "Enabled"
651
+ }
652
+ }
653
+
654
+ resource "mongodbatlas_cloud_provider_access_setup" "setup_only" {
655
+ project_id = %[1]q
656
+ provider_name = "AWS"
657
+ }
658
+
659
+ resource "mongodbatlas_cloud_provider_access_authorization" "auth_role" {
660
+ project_id = %[1]q
661
+ role_id = mongodbatlas_cloud_provider_access_setup.setup_only.role_id
662
+
663
+ aws {
664
+ iam_assumed_role_arn = aws_iam_role.test_role.arn
665
+ }
666
+ }
667
+
668
+ resource "mongodbatlas_cloud_backup_snapshot_export_bucket" "test" {
669
+ project_id = %[1]q
670
+
671
+ iam_role_id = mongodbatlas_cloud_provider_access_authorization.auth_role.role_id
672
+ bucket_name = aws_s3_bucket.backup.bucket
673
+ cloud_provider = "AWS"
674
+ }
675
+
676
+ resource "aws_iam_role_policy" "test_policy" {
677
+ name = %[1]q
678
+ role = aws_iam_role.test_role.id
679
+
680
+ policy = <<-EOF
681
+ {
682
+ "Version": "2012-10-17",
683
+ "Statement": [
684
+ {
685
+ "Effect": "Allow",
686
+ "Action": "*",
687
+ "Resource": "*"
688
+ }
689
+ ]
690
+ }
691
+ EOF
692
+ }
693
+
694
+ resource "aws_iam_role" "test_role" {
695
+ name = %[4]q
696
+
697
+ assume_role_policy = <<EOF
698
+ {
699
+ "Version": "2012-10-17",
700
+ "Statement": [
701
+ {
702
+ "Effect": "Allow",
703
+ "Principal": {
704
+ "AWS": "${mongodbatlas_cloud_provider_access_setup.setup_only.aws_config.0.atlas_aws_account_arn}"
705
+ },
706
+ "Action": "sts:AssumeRole",
707
+ "Condition": {
708
+ "StringEquals": {
709
+ "sts:ExternalId": "${mongodbatlas_cloud_provider_access_setup.setup_only.aws_config.0.atlas_assumed_role_external_id}"
710
+ }
711
+ }
712
+ }
713
+ ]
714
+ }
715
+ EOF
716
+
717
+ }
718
+ ` , projectID , clusterName , policyName , roleName )
719
+ }
0 commit comments