From f93fb3b508145892e99f61514e7f6cab282d677c Mon Sep 17 00:00:00 2001 From: Patrick Decat Date: Tue, 2 Dec 2025 16:20:55 +0100 Subject: [PATCH 1/2] fix: set default value of schedule attribute of aws_backup_plan rule Resolves #23976 --- internal/service/backup/plan.go | 2 + internal/service/backup/plan_test.go | 56 ++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/internal/service/backup/plan.go b/internal/service/backup/plan.go index ae6d1d97bab..403a390bdb5 100644 --- a/internal/service/backup/plan.go +++ b/internal/service/backup/plan.go @@ -27,6 +27,7 @@ import ( ) const ( + defaultPlanRuleScheduleExpression = "cron(0 5 ? * * *)" defaultPlanRuleScheduleExpressionTimezone = "Etc/UTC" ) @@ -167,6 +168,7 @@ func resourcePlan() *schema.Resource { names.AttrSchedule: { Type: schema.TypeString, Optional: true, + Default: defaultPlanRuleScheduleExpression, }, "schedule_expression_timezone": { Type: schema.TypeString, diff --git a/internal/service/backup/plan_test.go b/internal/service/backup/plan_test.go index b07777dd561..8c66265a622 100644 --- a/internal/service/backup/plan_test.go +++ b/internal/service/backup/plan_test.go @@ -59,6 +59,45 @@ func TestAccBackupPlan_basic(t *testing.T) { }) } +func TestAccBackupPlan_no_schedule(t *testing.T) { + ctx := acctest.Context(t) + var plan backup.GetBackupPlanOutput + resourceName := "aws_backup_plan.test" + rName := fmt.Sprintf("tf-testacc-backup-%s", sdkacctest.RandString(14)) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t); testAccPreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.BackupServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckPlanDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccPlanConfig_no_schedule(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckPlanExists(ctx, resourceName, &plan), + acctest.MatchResourceAttrRegionalARN(ctx, resourceName, names.AttrARN, "backup", regexache.MustCompile(`backup-plan:.+`)), + resource.TestCheckResourceAttr(resourceName, names.AttrName, rName), + resource.TestCheckResourceAttr(resourceName, acctest.CtRulePound, "1"), + resource.TestCheckTypeSetElemNestedAttrs(resourceName, "rule.*", map[string]string{ + "rule_name": rName, + "target_vault_name": rName, + names.AttrSchedule: "cron(0 5 ? * * *)", + "schedule_expression_timezone": "Etc/UTC", + "lifecycle.#": "0", + }), + resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, "0"), + resource.TestCheckResourceAttrSet(resourceName, names.AttrVersion), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + func TestAccBackupPlan_disappears(t *testing.T) { ctx := acctest.Context(t) var plan backup.GetBackupPlanOutput @@ -798,6 +837,23 @@ resource "aws_backup_plan" "test" { `, rName) } +func testAccPlanConfig_no_schedule(rName string) string { + return fmt.Sprintf(` +resource "aws_backup_vault" "test" { + name = %[1]q +} + +resource "aws_backup_plan" "test" { + name = %[1]q + + rule { + rule_name = %[1]q + target_vault_name = aws_backup_vault.test.name + } +} +`, rName) +} + func testAccPlanConfig_optInToArchiveForSupportedResources(rName string) string { return fmt.Sprintf(` resource "aws_backup_vault" "test" { From c0c0ae4e3b035e571ecfd157fe421ca231e1ba8f Mon Sep 17 00:00:00 2001 From: Patrick Decat Date: Tue, 2 Dec 2025 17:44:02 +0100 Subject: [PATCH 2/2] Add changelog --- .changelog/45355.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/45355.txt diff --git a/.changelog/45355.txt b/.changelog/45355.txt new file mode 100644 index 00000000000..a24c6fb78b1 --- /dev/null +++ b/.changelog/45355.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_backup_plan: Set default value of schedule attribute of rule +```