@@ -75,6 +75,41 @@ func ResourceNetappBackupVault() *schema.Resource {
75
75
Optional : true ,
76
76
Description : `Region in which backup is stored.` ,
77
77
},
78
+ "backup_retention_policy" : {
79
+ Type : schema .TypeList ,
80
+ Optional : true ,
81
+ Description : `Backup retention policy defining the retention of the backups.` ,
82
+ MaxItems : 1 ,
83
+ Elem : & schema.Resource {
84
+ Schema : map [string ]* schema.Schema {
85
+ "backup_minimum_enforced_retention_days" : {
86
+ Type : schema .TypeInt ,
87
+ Required : true ,
88
+ Description : `Minimum retention duration in days for backups in the backup vault.` ,
89
+ },
90
+ "daily_backup_immutable" : {
91
+ Type : schema .TypeBool ,
92
+ Optional : true ,
93
+ Description : `Indicates if the daily backups are immutable. At least one of daily_backup_immutable, weekly_backup_immutable, monthly_backup_immutable and manual_backup_immutable must be true.` ,
94
+ },
95
+ "manual_backup_immutable" : {
96
+ Type : schema .TypeBool ,
97
+ Optional : true ,
98
+ Description : `Indicates if the manual backups are immutable. At least one of daily_backup_immutable, weekly_backup_immutable, monthly_backup_immutable and manual_backup_immutable must be true.` ,
99
+ },
100
+ "monthly_backup_immutable" : {
101
+ Type : schema .TypeBool ,
102
+ Optional : true ,
103
+ Description : `Indicates if the monthly backups are immutable. At least one of daily_backup_immutable, weekly_backup_immutable, monthly_backup_immutable and manual_backup_immutable must be true.` ,
104
+ },
105
+ "weekly_backup_immutable" : {
106
+ Type : schema .TypeBool ,
107
+ Optional : true ,
108
+ Description : `Indicates if the weekly backups are immutable. At least one of daily_backup_immutable, weekly_backup_immutable, monthly_backup_immutable and manual_backup_immutable must be true.` ,
109
+ },
110
+ },
111
+ },
112
+ },
78
113
"backup_vault_type" : {
79
114
Type : schema .TypeString ,
80
115
Computed : true ,
@@ -172,6 +207,12 @@ func resourceNetappBackupVaultCreate(d *schema.ResourceData, meta interface{}) e
172
207
} else if v , ok := d .GetOkExists ("backup_region" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (backupRegionProp )) && (ok || ! reflect .DeepEqual (v , backupRegionProp )) {
173
208
obj ["backupRegion" ] = backupRegionProp
174
209
}
210
+ backupRetentionPolicyProp , err := expandNetappBackupVaultBackupRetentionPolicy (d .Get ("backup_retention_policy" ), d , config )
211
+ if err != nil {
212
+ return err
213
+ } else if v , ok := d .GetOkExists ("backup_retention_policy" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (backupRetentionPolicyProp )) && (ok || ! reflect .DeepEqual (v , backupRetentionPolicyProp )) {
214
+ obj ["backupRetentionPolicy" ] = backupRetentionPolicyProp
215
+ }
175
216
labelsProp , err := expandNetappBackupVaultEffectiveLabels (d .Get ("effective_labels" ), d , config )
176
217
if err != nil {
177
218
return err
@@ -304,6 +345,9 @@ func resourceNetappBackupVaultRead(d *schema.ResourceData, meta interface{}) err
304
345
if err := d .Set ("destination_backup_vault" , flattenNetappBackupVaultDestinationBackupVault (res ["destinationBackupVault" ], d , config )); err != nil {
305
346
return fmt .Errorf ("Error reading BackupVault: %s" , err )
306
347
}
348
+ if err := d .Set ("backup_retention_policy" , flattenNetappBackupVaultBackupRetentionPolicy (res ["backupRetentionPolicy" ], d , config )); err != nil {
349
+ return fmt .Errorf ("Error reading BackupVault: %s" , err )
350
+ }
307
351
if err := d .Set ("terraform_labels" , flattenNetappBackupVaultTerraformLabels (res ["labels" ], d , config )); err != nil {
308
352
return fmt .Errorf ("Error reading BackupVault: %s" , err )
309
353
}
@@ -348,6 +392,12 @@ func resourceNetappBackupVaultUpdate(d *schema.ResourceData, meta interface{}) e
348
392
} else if v , ok := d .GetOkExists ("backup_region" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , backupRegionProp )) {
349
393
obj ["backupRegion" ] = backupRegionProp
350
394
}
395
+ backupRetentionPolicyProp , err := expandNetappBackupVaultBackupRetentionPolicy (d .Get ("backup_retention_policy" ), d , config )
396
+ if err != nil {
397
+ return err
398
+ } else if v , ok := d .GetOkExists ("backup_retention_policy" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , backupRetentionPolicyProp )) {
399
+ obj ["backupRetentionPolicy" ] = backupRetentionPolicyProp
400
+ }
351
401
labelsProp , err := expandNetappBackupVaultEffectiveLabels (d .Get ("effective_labels" ), d , config )
352
402
if err != nil {
353
403
return err
@@ -376,6 +426,10 @@ func resourceNetappBackupVaultUpdate(d *schema.ResourceData, meta interface{}) e
376
426
updateMask = append (updateMask , "backupRegion" )
377
427
}
378
428
429
+ if d .HasChange ("backup_retention_policy" ) {
430
+ updateMask = append (updateMask , "backupRetentionPolicy" )
431
+ }
432
+
379
433
if d .HasChange ("effective_labels" ) {
380
434
updateMask = append (updateMask , "labels" )
381
435
}
@@ -545,6 +599,60 @@ func flattenNetappBackupVaultDestinationBackupVault(v interface{}, d *schema.Res
545
599
return v
546
600
}
547
601
602
+ func flattenNetappBackupVaultBackupRetentionPolicy (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
603
+ if v == nil {
604
+ return nil
605
+ }
606
+ original := v .(map [string ]interface {})
607
+ if len (original ) == 0 {
608
+ return nil
609
+ }
610
+ transformed := make (map [string ]interface {})
611
+ transformed ["backup_minimum_enforced_retention_days" ] =
612
+ flattenNetappBackupVaultBackupRetentionPolicyBackupMinimumEnforcedRetentionDays (original ["backupMinimumEnforcedRetentionDays" ], d , config )
613
+ transformed ["daily_backup_immutable" ] =
614
+ flattenNetappBackupVaultBackupRetentionPolicyDailyBackupImmutable (original ["dailyBackupImmutable" ], d , config )
615
+ transformed ["weekly_backup_immutable" ] =
616
+ flattenNetappBackupVaultBackupRetentionPolicyWeeklyBackupImmutable (original ["weeklyBackupImmutable" ], d , config )
617
+ transformed ["monthly_backup_immutable" ] =
618
+ flattenNetappBackupVaultBackupRetentionPolicyMonthlyBackupImmutable (original ["monthlyBackupImmutable" ], d , config )
619
+ transformed ["manual_backup_immutable" ] =
620
+ flattenNetappBackupVaultBackupRetentionPolicyManualBackupImmutable (original ["manualBackupImmutable" ], d , config )
621
+ return []interface {}{transformed }
622
+ }
623
+ func flattenNetappBackupVaultBackupRetentionPolicyBackupMinimumEnforcedRetentionDays (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
624
+ // Handles the string fixed64 format
625
+ if strVal , ok := v .(string ); ok {
626
+ if intVal , err := tpgresource .StringToFixed64 (strVal ); err == nil {
627
+ return intVal
628
+ }
629
+ }
630
+
631
+ // number values are represented as float64
632
+ if floatVal , ok := v .(float64 ); ok {
633
+ intVal := int (floatVal )
634
+ return intVal
635
+ }
636
+
637
+ return v // let terraform core handle it otherwise
638
+ }
639
+
640
+ func flattenNetappBackupVaultBackupRetentionPolicyDailyBackupImmutable (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
641
+ return v
642
+ }
643
+
644
+ func flattenNetappBackupVaultBackupRetentionPolicyWeeklyBackupImmutable (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
645
+ return v
646
+ }
647
+
648
+ func flattenNetappBackupVaultBackupRetentionPolicyMonthlyBackupImmutable (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
649
+ return v
650
+ }
651
+
652
+ func flattenNetappBackupVaultBackupRetentionPolicyManualBackupImmutable (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
653
+ return v
654
+ }
655
+
548
656
func flattenNetappBackupVaultTerraformLabels (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
549
657
if v == nil {
550
658
return v
@@ -576,6 +684,73 @@ func expandNetappBackupVaultBackupRegion(v interface{}, d tpgresource.TerraformR
576
684
return v , nil
577
685
}
578
686
687
+ func expandNetappBackupVaultBackupRetentionPolicy (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
688
+ l := v .([]interface {})
689
+ if len (l ) == 0 || l [0 ] == nil {
690
+ return nil , nil
691
+ }
692
+ raw := l [0 ]
693
+ original := raw .(map [string ]interface {})
694
+ transformed := make (map [string ]interface {})
695
+
696
+ transformedBackupMinimumEnforcedRetentionDays , err := expandNetappBackupVaultBackupRetentionPolicyBackupMinimumEnforcedRetentionDays (original ["backup_minimum_enforced_retention_days" ], d , config )
697
+ if err != nil {
698
+ return nil , err
699
+ } else if val := reflect .ValueOf (transformedBackupMinimumEnforcedRetentionDays ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
700
+ transformed ["backupMinimumEnforcedRetentionDays" ] = transformedBackupMinimumEnforcedRetentionDays
701
+ }
702
+
703
+ transformedDailyBackupImmutable , err := expandNetappBackupVaultBackupRetentionPolicyDailyBackupImmutable (original ["daily_backup_immutable" ], d , config )
704
+ if err != nil {
705
+ return nil , err
706
+ } else if val := reflect .ValueOf (transformedDailyBackupImmutable ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
707
+ transformed ["dailyBackupImmutable" ] = transformedDailyBackupImmutable
708
+ }
709
+
710
+ transformedWeeklyBackupImmutable , err := expandNetappBackupVaultBackupRetentionPolicyWeeklyBackupImmutable (original ["weekly_backup_immutable" ], d , config )
711
+ if err != nil {
712
+ return nil , err
713
+ } else if val := reflect .ValueOf (transformedWeeklyBackupImmutable ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
714
+ transformed ["weeklyBackupImmutable" ] = transformedWeeklyBackupImmutable
715
+ }
716
+
717
+ transformedMonthlyBackupImmutable , err := expandNetappBackupVaultBackupRetentionPolicyMonthlyBackupImmutable (original ["monthly_backup_immutable" ], d , config )
718
+ if err != nil {
719
+ return nil , err
720
+ } else if val := reflect .ValueOf (transformedMonthlyBackupImmutable ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
721
+ transformed ["monthlyBackupImmutable" ] = transformedMonthlyBackupImmutable
722
+ }
723
+
724
+ transformedManualBackupImmutable , err := expandNetappBackupVaultBackupRetentionPolicyManualBackupImmutable (original ["manual_backup_immutable" ], d , config )
725
+ if err != nil {
726
+ return nil , err
727
+ } else if val := reflect .ValueOf (transformedManualBackupImmutable ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
728
+ transformed ["manualBackupImmutable" ] = transformedManualBackupImmutable
729
+ }
730
+
731
+ return transformed , nil
732
+ }
733
+
734
+ func expandNetappBackupVaultBackupRetentionPolicyBackupMinimumEnforcedRetentionDays (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
735
+ return v , nil
736
+ }
737
+
738
+ func expandNetappBackupVaultBackupRetentionPolicyDailyBackupImmutable (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
739
+ return v , nil
740
+ }
741
+
742
+ func expandNetappBackupVaultBackupRetentionPolicyWeeklyBackupImmutable (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
743
+ return v , nil
744
+ }
745
+
746
+ func expandNetappBackupVaultBackupRetentionPolicyMonthlyBackupImmutable (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
747
+ return v , nil
748
+ }
749
+
750
+ func expandNetappBackupVaultBackupRetentionPolicyManualBackupImmutable (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
751
+ return v , nil
752
+ }
753
+
579
754
func expandNetappBackupVaultEffectiveLabels (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (map [string ]string , error ) {
580
755
if v == nil {
581
756
return map [string ]string {}, nil
0 commit comments