Skip to content

Commit f37cf72

Browse files
Release staging v1.4.3 (#787)
* Updated serverless instance documentation to be correct (#782) * INTMDB-335 and INTMDB-348: backup - Add option for multiple weekly monthly schedules and fix autoexport (#784) * INTMDB-335: Add option for multiple weekly monthly schedules and Fix missing auto_export_enabled flag setting add test for export example * Correct restore_window_days * Split out export test * Update CHANGELOG.md * Set export to computed to avoid drift in existing configurations * Update CHANGELOG.md * Add support for delaying deletion of mongodbatlas_cloud_backup_snapshot_export_bucket * Delete __debug_bin * Add additional user supplied PR * Update CHANGELOG.md * INTMDB-323 Remove beta requirement for serverless (#783) * Removed serverless beta documentation and resource requirement * Added commented out example beta features and added an early return to avoid lint errors * Removed text about serverless being in preview, it's not * Addressed nit, removed examples Co-authored-by: Dosty Everts <[email protected]>
1 parent be4414d commit f37cf72

8 files changed

+366
-29
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# Changelog
22

3+
## [v1.4.3](https://github.com/mongodb/terraform-provider-mongodbatlas/tree/v1.4.3) (2022-07-12)
4+
## Fixed
5+
6+
* INTMDB-335: Add option for multiple weekly monthly schedules @martinstibbe in [\#784](https://github.com/mongodb/terraform-provider-mongodbatlas/pull/784)
7+
* INTMDB-348: autoexport parameter not being set via provider [\#784](https://github.com/mongodb/terraform-provider-mongodbatlas/pull/784)
8+
* INTMDB-323: Removed the requirement to set `MONGODB_ATLAS_ENABLE_BETA` to use serverless and update the docs to match. [\#783](https://github.com/mongodb/terraform-provider-mongodbatlas/pull/783)
9+
* INTMDB-330 Fixed Serverless Instance Import Documentation. Closes [\#754](https://github.com/mongodb/terraform-provider-mongodbatlas/issues/754)
10+
* Fix typo in custom_db_role documentation [\#780](https://github.com/mongodb/terraform-provider-mongodbatlas/pull/780)
11+
* Fix typo in federated_settings_org_configs documentation [\#779](https://github.com/mongodb/terraform-provider-mongodbatlas/pull/779)
12+
13+
**Full Changelog**: https://github.com/mongodb/terraform-provider-mongodbatlas/compare/v1.4.2...v1.4.3
14+
315
## [v1.4.2](https://github.com/mongodb/terraform-provider-mongodbatlas/tree/v1.4.2) (2022-07-7)
416
## What's Changed
517

mongodbatlas/provider.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ func getDataSourcesMap() map[string]*schema.Resource {
136136
"mongodbatlas_federated_settings_org_configs": dataSourceMongoDBAtlasFederatedSettingsOrganizationConfigs(),
137137
"mongodbatlas_federated_settings_org_role_mapping": dataSourceMongoDBAtlasFederatedSettingsOrganizationRoleMapping(),
138138
"mongodbatlas_federated_settings_org_role_mappings": dataSourceMongoDBAtlasFederatedSettingsOrganizationRoleMappings(),
139+
"mongodbatlas_serverless_instance": dataSourceMongoDBAtlasServerlessInstance(),
140+
"mongodbatlas_serverless_instances": dataSourceMongoDBAtlasServerlessInstances(),
139141
}
140142
return dataSourcesMap
141143
}
@@ -187,16 +189,14 @@ func getResourcesMap() map[string]*schema.Resource {
187189
"mongodbatlas_federated_settings_org_config": resourceMongoDBAtlasFederatedSettingsOrganizationConfig(),
188190
"mongodbatlas_federated_settings_org_role_mapping": resourceMongoDBAtlasFederatedSettingsOrganizationRoleMapping(),
189191
"mongodbatlas_federated_settings_identity_provider": resourceMongoDBAtlasFederatedSettingsIdentityProvider(),
192+
"mongodbatlas_serverless_instance": resourceMongoDBAtlasServerlessInstance(),
190193
}
191194
return resourcesMap
192195
}
193196

194197
func addBetaFeatures(provider *schema.Provider) {
195198
if ProviderEnableBeta {
196-
provider.ResourcesMap["mongodbatlas_serverless_instance"] = resourceMongoDBAtlasServerlessInstance()
197-
198-
provider.DataSourcesMap["mongodbatlas_serverless_instance"] = dataSourceMongoDBAtlasServerlessInstance()
199-
provider.DataSourcesMap["mongodbatlas_serverless_instances"] = dataSourceMongoDBAtlasServerlessInstances()
199+
return
200200
}
201201
}
202202

mongodbatlas/resource_mongodbatlas_cloud_backup_schedule.go

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ func resourceMongoDBAtlasCloudBackupSchedule() *schema.Resource {
6464
Type: schema.TypeList,
6565
MaxItems: 1,
6666
Optional: true,
67+
Computed: true,
6768
Elem: &schema.Resource{
6869
Schema: map[string]*schema.Schema{
6970
"export_bucket_id": {
@@ -139,7 +140,6 @@ func resourceMongoDBAtlasCloudBackupSchedule() *schema.Resource {
139140
},
140141
"policy_item_weekly": {
141142
Type: schema.TypeList,
142-
MaxItems: 1,
143143
Optional: true,
144144
Elem: &schema.Resource{
145145
Schema: map[string]*schema.Schema{
@@ -168,7 +168,6 @@ func resourceMongoDBAtlasCloudBackupSchedule() *schema.Resource {
168168
},
169169
"policy_item_monthly": {
170170
Type: schema.TypeList,
171-
MaxItems: 1,
172171
Optional: true,
173172
Elem: &schema.Resource{
174173
Schema: map[string]*schema.Schema{
@@ -303,6 +302,10 @@ func resourceMongoDBAtlasCloudBackupScheduleRead(ctx context.Context, d *schema.
303302
}
304303

305304
if err := d.Set("export", flattenExport(backupPolicy)); err != nil {
305+
return diag.Errorf(errorSnapshotBackupScheduleSetting, "export", clusterName, err)
306+
}
307+
308+
if err := d.Set("auto_export_enabled", backupPolicy.AutoExportEnabled); err != nil {
306309
return diag.Errorf(errorSnapshotBackupScheduleSetting, "auto_export_enabled", clusterName, err)
307310
}
308311

@@ -426,22 +429,26 @@ func cloudBackupScheduleCreateOrUpdate(ctx context.Context, conn *matlas.Client,
426429
policiesItem = append(policiesItem, policyItem)
427430
}
428431
if v, ok := d.GetOk("policy_item_weekly"); ok {
429-
item := v.([]interface{})
430-
itemObj := item[0].(map[string]interface{})
431-
policyItem.FrequencyType = snapshotScheduleWeekly
432-
policyItem.RetentionUnit = itemObj["retention_unit"].(string)
433-
policyItem.FrequencyInterval = itemObj["frequency_interval"].(int)
434-
policyItem.RetentionValue = itemObj["retention_value"].(int)
435-
policiesItem = append(policiesItem, policyItem)
432+
items := v.([]interface{})
433+
for _, s := range items {
434+
itemObj := s.(map[string]interface{})
435+
policyItem.FrequencyType = snapshotScheduleWeekly
436+
policyItem.RetentionUnit = itemObj["retention_unit"].(string)
437+
policyItem.FrequencyInterval = itemObj["frequency_interval"].(int)
438+
policyItem.RetentionValue = itemObj["retention_value"].(int)
439+
policiesItem = append(policiesItem, policyItem)
440+
}
436441
}
437442
if v, ok := d.GetOk("policy_item_monthly"); ok {
438-
item := v.([]interface{})
439-
itemObj := item[0].(map[string]interface{})
440-
policyItem.FrequencyType = snapshotScheduleMonthly
441-
policyItem.RetentionUnit = itemObj["retention_unit"].(string)
442-
policyItem.FrequencyInterval = itemObj["frequency_interval"].(int)
443-
policyItem.RetentionValue = itemObj["retention_value"].(int)
444-
policiesItem = append(policiesItem, policyItem)
443+
items := v.([]interface{})
444+
for _, s := range items {
445+
itemObj := s.(map[string]interface{})
446+
policyItem.FrequencyType = snapshotScheduleMonthly
447+
policyItem.RetentionUnit = itemObj["retention_unit"].(string)
448+
policyItem.FrequencyInterval = itemObj["frequency_interval"].(int)
449+
policyItem.RetentionValue = itemObj["retention_value"].(int)
450+
policiesItem = append(policiesItem, policyItem)
451+
}
445452
}
446453

447454
if v, ok := d.GetOk("export"); ok {
@@ -453,6 +460,10 @@ func cloudBackupScheduleCreateOrUpdate(ctx context.Context, conn *matlas.Client,
453460
req.Export = &export
454461
}
455462

463+
if d.HasChange("auto_export_enabled") {
464+
req.AutoExportEnabled = pointy.Bool(d.Get("auto_export_enabled").(bool))
465+
}
466+
456467
policy.ID = resp.Policies[0].ID
457468
policy.PolicyItems = policiesItem
458469
if len(policiesItem) > 0 {

mongodbatlas/resource_mongodbatlas_cloud_backup_schedule_test.go

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}
82153
func 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

Comments
 (0)