Skip to content

Commit

Permalink
Add timezone argument to aws_backup_plan
Browse files Browse the repository at this point in the history
  • Loading branch information
autotune committed Sep 27, 2023
1 parent 9d2c2ae commit 83f52a4
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 2 deletions.
11 changes: 11 additions & 0 deletions internal/service/backup/plan.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ func ResourcePlan() *schema.Resource {
Type: schema.TypeString,
Optional: true,
},
"schedule_timezone": {
Type: schema.TypeString,
Optional: true,
},
"enable_continuous_backup": {
Type: schema.TypeBool,
Optional: true,
Expand Down Expand Up @@ -310,6 +314,9 @@ func expandPlanRules(ctx context.Context, vRules *schema.Set) []*backup.RuleInpu
if vSchedule, ok := mRule["schedule"].(string); ok && vSchedule != "" {
rule.ScheduleExpression = aws.String(vSchedule)
}
if vScheduleTZ, ok := mRule["schedule_timezone"].(string); ok && vScheduleTZ != "" {
rule.ScheduleExpressionTimezone = aws.String(vScheduleTZ)
}
if vEnableContinuousBackup, ok := mRule["enable_continuous_backup"].(bool); ok {
rule.EnableContinuousBackup = aws.Bool(vEnableContinuousBackup)
}
Expand Down Expand Up @@ -408,6 +415,7 @@ func flattenPlanRules(ctx context.Context, rules []*backup.Rule) *schema.Set {
"rule_name": aws.StringValue(rule.RuleName),
"target_vault_name": aws.StringValue(rule.TargetBackupVaultName),
"schedule": aws.StringValue(rule.ScheduleExpression),
"schedule_timezone": aws.StringValue(rule.ScheduleExpressionTimezone),
"enable_continuous_backup": aws.BoolValue(rule.EnableContinuousBackup),
"start_window": int(aws.Int64Value(rule.StartWindowMinutes)),
"completion_window": int(aws.Int64Value(rule.CompletionWindowMinutes)),
Expand Down Expand Up @@ -494,6 +502,9 @@ func planHash(vRule interface{}) int {
if v, ok := mRule["schedule"].(string); ok {
buf.WriteString(fmt.Sprintf("%s-", v))
}
if v, ok := mRule["schedule_timezone"].(string); ok {
buf.WriteString(fmt.Sprintf("%s-", v))
}
if v, ok := mRule["enable_continuous_backup"].(bool); ok {
buf.WriteString(fmt.Sprintf("%t-", v))
}
Expand Down
32 changes: 30 additions & 2 deletions internal/service/backup/plan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ func TestAccBackupPlan_basic(t *testing.T) {
"rule_name": rName,
"target_vault_name": rName,
"schedule": "cron(0 12 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"lifecycle.#": "0",
}),
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
Expand Down Expand Up @@ -136,12 +137,14 @@ func TestAccBackupPlan_withRules(t *testing.T) {
"rule_name": rule1Name,
"target_vault_name": rName,
"schedule": "cron(0 12 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"lifecycle.#": "0",
}),
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "rule.*", map[string]string{
"rule_name": rule2Name,
"target_vault_name": rName,
"schedule": "cron(0 6 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"lifecycle.#": "0",
}),
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
Expand All @@ -162,18 +165,21 @@ func TestAccBackupPlan_withRules(t *testing.T) {
"rule_name": rule1Name,
"target_vault_name": rName,
"schedule": "cron(0 6 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"lifecycle.#": "0",
}),
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "rule.*", map[string]string{
"rule_name": rule2Name,
"target_vault_name": rName,
"schedule": "cron(0 12 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"lifecycle.#": "0",
}),
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "rule.*", map[string]string{
"rule_name": rule3Name,
"target_vault_name": rName,
"schedule": "cron(0 18 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"lifecycle.#": "0",
}),
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
Expand All @@ -189,6 +195,7 @@ func TestAccBackupPlan_withRules(t *testing.T) {
"rule_name": rName,
"target_vault_name": rName,
"schedule": "cron(0 12 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"lifecycle.#": "0",
}),
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
Expand Down Expand Up @@ -293,6 +300,7 @@ func TestAccBackupPlan_withRecoveryPointTags(t *testing.T) {
"rule_name": rName,
"target_vault_name": rName,
"schedule": "cron(0 12 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"lifecycle.#": "0",
"recovery_point_tags.%": "3",
"recovery_point_tags.Name": rName,
Expand Down Expand Up @@ -336,6 +344,7 @@ func TestAccBackupPlan_withRecoveryPointTags(t *testing.T) {
"rule_name": rName,
"target_vault_name": rName,
"schedule": "cron(0 12 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"lifecycle.#": "0",
}),
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
Expand Down Expand Up @@ -618,6 +627,7 @@ func TestAccBackupPlan_enableContinuousBackup(t *testing.T) {
"rule_name": rName,
"target_vault_name": rName,
"schedule": "cron(0 12 * * ? *)",
"schedule_timezone": "Pacific/Fiji",
"enable_continuous_backup": "true",
"lifecycle.#": "1",
"lifecycle.0.delete_after": "35",
Expand Down Expand Up @@ -722,6 +732,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
}
}
`, rName)
Expand All @@ -740,6 +751,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
}
tags = {
Expand All @@ -764,6 +776,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
}
tags = {
Expand All @@ -788,11 +801,13 @@ resource "aws_backup_plan" "test" {
rule_name = "%[1]s_1"
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
}
rule {
rule_name = "%[1]s_2"
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 6 * * ? *)"
schedule_timezone = "Pacific/Fiji"
}
}
`, rName)
Expand All @@ -811,16 +826,19 @@ resource "aws_backup_plan" "test" {
rule_name = "%[1]s_1"
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 6 * * ? *)"
schedule_timezone = "Pacific/Fiji"
}
rule {
rule_name = "%[1]s_2"
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
}
rule {
rule_name = "%[1]s_3"
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 18 * * ? *)"
schedule_timezone = "Pacific/Fiji"
}
}
`, rName)
Expand All @@ -839,6 +857,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
lifecycle {
cold_storage_after = 7
Expand All @@ -861,6 +880,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
lifecycle {
delete_after = 120
Expand All @@ -883,6 +903,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
lifecycle {
cold_storage_after = 30
Expand All @@ -906,6 +927,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
recovery_point_tags = {
Name = %[1]q
Expand All @@ -930,7 +952,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
recovery_point_tags = {
Name = %[1]q
Key2 = "Value2b"
Expand Down Expand Up @@ -958,6 +980,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
lifecycle {
cold_storage_after = 30
Expand Down Expand Up @@ -998,6 +1021,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
lifecycle {
cold_storage_after = 30
Expand Down Expand Up @@ -1044,6 +1068,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
lifecycle {
cold_storage_after = 30
Expand Down Expand Up @@ -1080,7 +1105,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
copy_action {
destination_vault_arn = aws_backup_vault.test2.arn
}
Expand All @@ -1102,6 +1127,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
lifecycle {
cold_storage_after = 30
Expand Down Expand Up @@ -1133,6 +1159,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
lifecycle {
cold_storage_after = 30
Expand Down Expand Up @@ -1164,6 +1191,7 @@ resource "aws_backup_plan" "test" {
rule_name = %[1]q
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
enable_continuous_backup = true
lifecycle {
Expand Down
2 changes: 2 additions & 0 deletions website/docs/r/backup_plan.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ resource "aws_backup_plan" "example" {
rule_name = "tf_example_backup_rule"
target_vault_name = aws_backup_vault.test.name
schedule = "cron(0 12 * * ? *)"
schedule_timezone = "Pacific/Fiji"
lifecycle {
delete_after = 14
Expand Down Expand Up @@ -51,6 +52,7 @@ This resource supports the following arguments:
* `rule_name` - (Required) An display name for a backup rule.
* `target_vault_name` - (Required) The name of a logical container where backups are stored.
* `schedule` - (Optional) A CRON expression specifying when AWS Backup initiates a backup job.
* `schedule_timezone` - (Optional) A time zone in "Pacific/Fiji" format.
* `enable_continuous_backup` - (Optional) Enable continuous backups for supported resources.
* `start_window` - (Optional) The amount of time in minutes before beginning a backup.
* `completion_window` - (Optional) The amount of time in minutes AWS Backup attempts a backup before canceling the job and returning an error.
Expand Down

0 comments on commit 83f52a4

Please sign in to comment.