Skip to content

Commit 56c4d5a

Browse files
committed
fix: HasChanges checks
1 parent 975428f commit 56c4d5a

File tree

2 files changed

+54
-20
lines changed

2 files changed

+54
-20
lines changed

internal/services/recoveryservices/backup_policy_vm_resource.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -334,15 +334,16 @@ func resourceBackupProtectionPolicyVMUpdate(d *pluginsdk.ResourceData, meta inte
334334
properties.InstantRPDetails = expandBackupProtectionPolicyVMResourceGroup(d)
335335
}
336336

337-
if d.HasChange("backup") {
337+
// If anything changes inside any of the `retention_*` fields, update the `schedulePolicy` object as the API requires all timestamps match
338+
if d.HasChanges("backup", "retention_daily", "retention_weekly", "retention_monthly", "retention_yearly") {
338339
schedulePolicy, err := expandBackupProtectionPolicyVMSchedule(d, times)
339340
if err != nil {
340341
return err
341342
}
342343
properties.SchedulePolicy = schedulePolicy
343344
}
344345

345-
if d.HasChange("retention_daily") || d.HasChange("backup.0.time") {
346+
if d.HasChanges("retention_daily", "backup.0.time") {
346347
if properties.RetentionPolicy == nil {
347348
properties.RetentionPolicy = &protectionpolicies.LongTermRetentionPolicy{}
348349
}
@@ -355,7 +356,7 @@ func resourceBackupProtectionPolicyVMUpdate(d *pluginsdk.ResourceData, meta inte
355356
properties.RetentionPolicy = retentionPolicy
356357
}
357358

358-
if d.HasChange("retention_weekly") {
359+
if d.HasChanges("retention_weekly", "backup.0.time") {
359360
if properties.RetentionPolicy == nil {
360361
properties.RetentionPolicy = &protectionpolicies.LongTermRetentionPolicy{}
361362
}
@@ -368,7 +369,7 @@ func resourceBackupProtectionPolicyVMUpdate(d *pluginsdk.ResourceData, meta inte
368369
properties.RetentionPolicy = retentionPolicy
369370
}
370371

371-
if d.HasChange("retention_monthly") {
372+
if d.HasChanges("retention_monthly", "backup.0.time") {
372373
if properties.RetentionPolicy == nil {
373374
properties.RetentionPolicy = &protectionpolicies.LongTermRetentionPolicy{}
374375
}
@@ -381,7 +382,7 @@ func resourceBackupProtectionPolicyVMUpdate(d *pluginsdk.ResourceData, meta inte
381382
properties.RetentionPolicy = retentionPolicy
382383
}
383384

384-
if d.HasChange("retention_yearly") {
385+
if d.HasChanges("retention_yearly", "backup.0.time") {
385386
if properties.RetentionPolicy == nil {
386387
properties.RetentionPolicy = &protectionpolicies.LongTermRetentionPolicy{}
387388
}

internal/services/recoveryservices/backup_policy_vm_resource_test.go

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,20 @@ func TestAccBackupProtectionPolicyVM_basicDaily(t *testing.T) {
4343
Config: r.basicDaily(data, "V1"),
4444
Check: acceptance.ComposeAggregateTestCheckFunc(
4545
check.That(data.ResourceName).ExistsInAzure(r),
46-
check.That(data.ResourceName).Key("backup.0.frequency").HasValue("Daily"),
47-
check.That(data.ResourceName).Key("backup.0.time").HasValue("23:00"),
48-
check.That(data.ResourceName).Key("retention_daily.0.count").HasValue("10"),
46+
),
47+
},
48+
data.ImportStep(),
49+
{
50+
Config: r.basicDailyWithTime(data, "V1", "22:00"),
51+
Check: acceptance.ComposeAggregateTestCheckFunc(
52+
check.That(data.ResourceName).ExistsInAzure(r),
53+
),
54+
},
55+
data.ImportStep(),
56+
{
57+
Config: r.basicDaily(data, "V1"),
58+
Check: acceptance.ComposeAggregateTestCheckFunc(
59+
check.That(data.ResourceName).ExistsInAzure(r),
4960
),
5061
},
5162
data.ImportStep(),
@@ -101,6 +112,20 @@ func TestAccBackupProtectionPolicyVM_basicWeekly(t *testing.T) {
101112
),
102113
},
103114
data.ImportStep(),
115+
{
116+
Config: r.basicWeeklyWithTime(data, "V1", "22:00"),
117+
Check: acceptance.ComposeAggregateTestCheckFunc(
118+
check.That(data.ResourceName).ExistsInAzure(r),
119+
),
120+
},
121+
data.ImportStep(),
122+
{
123+
Config: r.basicWeekly(data, "V1"),
124+
Check: acceptance.ComposeAggregateTestCheckFunc(
125+
check.That(data.ResourceName).ExistsInAzure(r),
126+
),
127+
},
128+
data.ImportStep(),
104129
})
105130
}
106131

@@ -615,15 +640,15 @@ func TestAccBackupProtectionPolicyVM_updateBackupTime(t *testing.T) {
615640
})
616641
}
617642

618-
func (t BackupProtectionPolicyVMResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) {
643+
func (r BackupProtectionPolicyVMResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) {
619644
id, err := protectionpolicies.ParseBackupPolicyID(state.ID)
620645
if err != nil {
621646
return nil, err
622647
}
623648

624649
resp, err := clients.RecoveryServices.ProtectionPoliciesClient.Get(ctx, *id)
625650
if err != nil {
626-
return nil, fmt.Errorf("reading Recovery Service Protection Policy (%s): %+v", id.String(), err)
651+
return nil, fmt.Errorf("retrieving %s: %+v", id.String(), err)
627652
}
628653

629654
return pointer.To(resp.Model != nil), nil
@@ -699,26 +724,30 @@ resource "azurerm_backup_policy_vm" "test" {
699724
}
700725

701726
func (r BackupProtectionPolicyVMResource) basicDaily(data acceptance.TestData, policyType string) string {
727+
return r.basicDailyWithTime(data, policyType, "23:00")
728+
}
729+
730+
func (r BackupProtectionPolicyVMResource) basicDailyWithTime(data acceptance.TestData, policyType, time string) string {
702731
return fmt.Sprintf(`
703-
%s
732+
%[1]s
704733
705734
resource "azurerm_backup_policy_vm" "test" {
706-
name = "acctest-%d"
735+
name = "acctest-%[2]d"
707736
resource_group_name = azurerm_resource_group.test.name
708737
recovery_vault_name = azurerm_recovery_services_vault.test.name
709738
710739
backup {
711740
frequency = "Daily"
712-
time = "23:00"
741+
time = "%[4]s"
713742
}
714743
715744
retention_daily {
716745
count = 10
717746
}
718747
719-
policy_type = "%s"
748+
policy_type = "%[3]s"
720749
}
721-
`, r.template(data), data.RandomInteger, policyType)
750+
`, r.template(data), data.RandomInteger, policyType, time)
722751
}
723752

724753
func (r BackupProtectionPolicyVMResource) requiresImport(data acceptance.TestData) string {
@@ -743,17 +772,21 @@ resource "azurerm_backup_policy_vm" "import" {
743772
}
744773

745774
func (r BackupProtectionPolicyVMResource) basicWeekly(data acceptance.TestData, policyType string) string {
775+
return r.basicWeeklyWithTime(data, policyType, "23:00")
776+
}
777+
778+
func (r BackupProtectionPolicyVMResource) basicWeeklyWithTime(data acceptance.TestData, policyType, time string) string {
746779
return fmt.Sprintf(`
747-
%s
780+
%[1]s
748781
749782
resource "azurerm_backup_policy_vm" "test" {
750-
name = "acctest-%d"
783+
name = "acctest-%[2]d"
751784
resource_group_name = azurerm_resource_group.test.name
752785
recovery_vault_name = azurerm_recovery_services_vault.test.name
753786
754787
backup {
755788
frequency = "Weekly"
756-
time = "23:00"
789+
time = "%[4]s"
757790
weekdays = ["Sunday", "Wednesday"]
758791
}
759792
@@ -762,9 +795,9 @@ resource "azurerm_backup_policy_vm" "test" {
762795
weekdays = ["Sunday", "Wednesday"]
763796
}
764797
765-
policy_type = "%s"
798+
policy_type = "%[3]s"
766799
}
767-
`, r.template(data), data.RandomInteger, policyType)
800+
`, r.template(data), data.RandomInteger, policyType, time)
768801
}
769802

770803
func (r BackupProtectionPolicyVMResource) completeHourly(data acceptance.TestData, policyType string) string {

0 commit comments

Comments
 (0)