@@ -75,10 +75,81 @@ func TestAccResourceMongoDBAtlasCloudBackupSchedule_basic(t *testing.T) {
7575 resource .TestCheckResourceAttr (resourceName , "policy_item_monthly.0.retention_value" , "3" ),
7676 ),
7777 },
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+ },
78116 },
79117 })
80118}
81119
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+ }
82153func TestAccResourceMongoDBAtlasCloudBackupSchedule_onepolicy (t * testing.T ) {
83154 var (
84155 resourceName = "mongodbatlas_cloud_backup_schedule.schedule_test"
@@ -476,3 +547,173 @@ resource "mongodbatlas_cloud_backup_schedule" "schedule_test" {
476547}
477548 ` , projectID , clusterName , policy .FrequencyInterval , policy .RetentionUnit , policy .RetentionValue )
478549}
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