Skip to content

Commit 23a6c91

Browse files
Merge pull request #16114 from DrFaust92/r/backup_region_settings
Support Backup Region Settings
2 parents b004f7f + 2419075 commit 23a6c91

4 files changed

Lines changed: 242 additions & 0 deletions

File tree

aws/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ func Provider() *schema.Provider {
462462
"aws_autoscaling_schedule": resourceAwsAutoscalingSchedule(),
463463
"aws_autoscalingplans_scaling_plan": resourceAwsAutoScalingPlansScalingPlan(),
464464
"aws_backup_plan": resourceAwsBackupPlan(),
465+
"aws_backup_region_settings": resourceAwsBackupRegionSettings(),
465466
"aws_backup_selection": resourceAwsBackupSelection(),
466467
"aws_backup_vault": resourceAwsBackupVault(),
467468
"aws_backup_vault_notifications": resourceAwsBackupVaultNotifications(),
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package aws
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/aws/aws-sdk-go/aws"
7+
"github.com/aws/aws-sdk-go/service/backup"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
)
10+
11+
func resourceAwsBackupRegionSettings() *schema.Resource {
12+
return &schema.Resource{
13+
Create: resourceAwsBackupRegionSettingsUpdate,
14+
Update: resourceAwsBackupRegionSettingsUpdate,
15+
Read: resourceAwsBackupRegionSettingsRead,
16+
Delete: schema.Noop,
17+
Importer: &schema.ResourceImporter{
18+
State: schema.ImportStatePassthrough,
19+
},
20+
21+
Schema: map[string]*schema.Schema{
22+
"resource_type_opt_in_preference": {
23+
Type: schema.TypeMap,
24+
Required: true,
25+
Elem: &schema.Schema{Type: schema.TypeBool},
26+
},
27+
},
28+
}
29+
}
30+
31+
func resourceAwsBackupRegionSettingsUpdate(d *schema.ResourceData, meta interface{}) error {
32+
conn := meta.(*AWSClient).backupconn
33+
34+
prefrences := d.Get("resource_type_opt_in_preference").(map[string]interface{})
35+
list := make(map[string]*bool, len(prefrences))
36+
for i, v := range prefrences {
37+
list[i] = aws.Bool(v.(bool))
38+
}
39+
40+
input := &backup.UpdateRegionSettingsInput{
41+
ResourceTypeOptInPreference: list,
42+
}
43+
44+
_, err := conn.UpdateRegionSettings(input)
45+
if err != nil {
46+
return fmt.Errorf("error setting Backup Region Settings (%s): %w", d.Id(), err)
47+
}
48+
49+
d.SetId(meta.(*AWSClient).region)
50+
51+
return resourceAwsBackupRegionSettingsRead(d, meta)
52+
}
53+
54+
func resourceAwsBackupRegionSettingsRead(d *schema.ResourceData, meta interface{}) error {
55+
conn := meta.(*AWSClient).backupconn
56+
57+
resp, err := conn.DescribeRegionSettings(&backup.DescribeRegionSettingsInput{})
58+
if err != nil {
59+
return fmt.Errorf("error reading Backup Region Settings (%s): %w", d.Id(), err)
60+
}
61+
62+
d.Set("resource_type_opt_in_preference", aws.BoolValueMap(resp.ResourceTypeOptInPreference))
63+
64+
return nil
65+
}
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package aws
2+
3+
import (
4+
"testing"
5+
6+
"github.com/aws/aws-sdk-go/service/backup"
7+
"github.com/aws/aws-sdk-go/service/fsx"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
11+
)
12+
13+
func TestAccAwsBackupRegionSettings_basic(t *testing.T) {
14+
var settings backup.DescribeRegionSettingsOutput
15+
16+
rName := acctest.RandomWithPrefix("tf-acc-test")
17+
resourceName := "aws_backup_region_settings.test"
18+
resource.ParallelTest(t, resource.TestCase{
19+
PreCheck: func() {
20+
testAccPreCheck(t)
21+
testAccPartitionHasServicePreCheck(fsx.EndpointsID, t)
22+
testAccPreCheckAWSBackup(t)
23+
},
24+
Providers: testAccProviders,
25+
CheckDestroy: nil,
26+
Steps: []resource.TestStep{
27+
{
28+
Config: testAccBackupRegionSettingsConfig1(rName),
29+
Check: resource.ComposeTestCheckFunc(
30+
testAccCheckAwsBackupRegionSettingsExists(&settings),
31+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.%", "8"),
32+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.DynamoDB", "true"),
33+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.Aurora", "true"),
34+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.EBS", "true"),
35+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.EC2", "true"),
36+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.EFS", "true"),
37+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.FSx", "true"),
38+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.RDS", "true"),
39+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.Storage Gateway", "true"),
40+
),
41+
},
42+
{
43+
ResourceName: resourceName,
44+
ImportState: true,
45+
ImportStateVerify: true,
46+
},
47+
{
48+
Config: testAccBackupRegionSettingsConfig2(rName),
49+
Check: resource.ComposeTestCheckFunc(
50+
testAccCheckAwsBackupRegionSettingsExists(&settings),
51+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.%", "8"),
52+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.DynamoDB", "true"),
53+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.Aurora", "false"),
54+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.EBS", "true"),
55+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.EC2", "true"),
56+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.EFS", "true"),
57+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.FSx", "true"),
58+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.RDS", "true"),
59+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.Storage Gateway", "true"),
60+
),
61+
},
62+
{
63+
Config: testAccBackupRegionSettingsConfig1(rName),
64+
Check: resource.ComposeTestCheckFunc(
65+
testAccCheckAwsBackupRegionSettingsExists(&settings),
66+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.%", "8"),
67+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.DynamoDB", "true"),
68+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.Aurora", "true"),
69+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.EBS", "true"),
70+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.EC2", "true"),
71+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.EFS", "true"),
72+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.FSx", "true"),
73+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.RDS", "true"),
74+
resource.TestCheckResourceAttr(resourceName, "resource_type_opt_in_preference.Storage Gateway", "true"),
75+
),
76+
},
77+
},
78+
})
79+
}
80+
81+
func testAccCheckAwsBackupRegionSettingsExists(settings *backup.DescribeRegionSettingsOutput) resource.TestCheckFunc {
82+
return func(s *terraform.State) error {
83+
84+
conn := testAccProvider.Meta().(*AWSClient).backupconn
85+
resp, err := conn.DescribeRegionSettings(&backup.DescribeRegionSettingsInput{})
86+
if err != nil {
87+
return err
88+
}
89+
90+
*settings = *resp
91+
92+
return nil
93+
}
94+
}
95+
96+
func testAccBackupRegionSettingsConfig1(rName string) string {
97+
return `
98+
resource "aws_backup_region_settings" "test" {
99+
resource_type_opt_in_preference = {
100+
"DynamoDB" = true
101+
"Aurora" = true
102+
"EBS" = true
103+
"EC2" = true
104+
"EFS" = true
105+
"FSx" = true
106+
"RDS" = true
107+
"Storage Gateway" = true
108+
}
109+
}
110+
`
111+
}
112+
113+
func testAccBackupRegionSettingsConfig2(rName string) string {
114+
return `
115+
resource "aws_backup_region_settings" "test" {
116+
resource_type_opt_in_preference = {
117+
"DynamoDB" = true
118+
"Aurora" = false
119+
"EBS" = true
120+
"EC2" = true
121+
"EFS" = true
122+
"FSx" = true
123+
"RDS" = true
124+
"Storage Gateway" = true
125+
}
126+
}
127+
`
128+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
subcategory: "Backup"
3+
layout: "aws"
4+
page_title: "AWS: aws_backup_region_settings"
5+
description: |-
6+
Provides an AWS Backup Region Settings resource.
7+
---
8+
9+
# Resource: aws_backup_region_settings
10+
11+
Provides an AWS Backup Region Settings resource.
12+
13+
## Example Usage
14+
15+
```hcl
16+
resource "aws_backup_region_settings" "test" {
17+
resource_type_opt_in_preference = {
18+
"DynamoDB" = true
19+
"Aurora" = true
20+
"EBS" = true
21+
"EC2" = true
22+
"EFS" = true
23+
"FSx" = true
24+
"RDS" = true
25+
"Storage Gateway" = true
26+
}
27+
}
28+
```
29+
30+
## Argument Reference
31+
32+
The following arguments are supported:
33+
34+
* `resource_type_opt_in_preference` - (Required) A map of services along with the opt-in preferences for the Region.
35+
36+
## Attributes Reference
37+
38+
In addition to all arguments above, the following attributes are exported:
39+
40+
* `id` - The AWS region.
41+
42+
## Import
43+
44+
Backup Region Settings can be imported using the `region`, e.g.
45+
46+
```
47+
$ terraform import aws_backup_region_settings.test us-west-2
48+
```

0 commit comments

Comments
 (0)