@@ -338,6 +338,38 @@ There must be at least one IP address available in the subnet's primary range. T
338
338
},
339
339
},
340
340
},
341
+ "scheduled_backup" : {
342
+ Type : schema .TypeList ,
343
+ Optional : true ,
344
+ Description : `The configuration of scheduled backup for the metastore service.` ,
345
+ MaxItems : 1 ,
346
+ Elem : & schema.Resource {
347
+ Schema : map [string ]* schema.Schema {
348
+ "backup_location" : {
349
+ Type : schema .TypeString ,
350
+ Required : true ,
351
+ Description : `A Cloud Storage URI of a folder, in the format gs://<bucket_name>/<path_inside_bucket>. A sub-folder <backup_folder> containing backup files will be stored below it.` ,
352
+ },
353
+ "cron_schedule" : {
354
+ Type : schema .TypeString ,
355
+ Optional : true ,
356
+ Description : `The scheduled interval in Cron format, see https://en.wikipedia.org/wiki/Cron The default is empty: scheduled backup is not enabled. Must be specified to enable scheduled backups.` ,
357
+ },
358
+ "enabled" : {
359
+ Type : schema .TypeBool ,
360
+ Computed : true ,
361
+ Optional : true ,
362
+ Description : `Defines whether the scheduled backup is enabled. The default value is false.` ,
363
+ },
364
+ "time_zone" : {
365
+ Type : schema .TypeString ,
366
+ Computed : true ,
367
+ Optional : true ,
368
+ Description : `Specifies the time zone to be used when interpreting cronSchedule. Must be a time zone name from the time zone database (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones), e.g. America/Los_Angeles or Africa/Abidjan. If left unspecified, the default is UTC.` ,
369
+ },
370
+ },
371
+ },
372
+ },
341
373
"telemetry_config" : {
342
374
Type : schema .TypeList ,
343
375
Computed : true ,
@@ -450,6 +482,12 @@ func resourceDataprocMetastoreServiceCreate(d *schema.ResourceData, meta interfa
450
482
} else if v , ok := d .GetOkExists ("scaling_config" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (scalingConfigProp )) && (ok || ! reflect .DeepEqual (v , scalingConfigProp )) {
451
483
obj ["scalingConfig" ] = scalingConfigProp
452
484
}
485
+ scheduledBackupProp , err := expandDataprocMetastoreServiceScheduledBackup (d .Get ("scheduled_backup" ), d , config )
486
+ if err != nil {
487
+ return err
488
+ } else if v , ok := d .GetOkExists ("scheduled_backup" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (scheduledBackupProp )) && (ok || ! reflect .DeepEqual (v , scheduledBackupProp )) {
489
+ obj ["scheduledBackup" ] = scheduledBackupProp
490
+ }
453
491
maintenanceWindowProp , err := expandDataprocMetastoreServiceMaintenanceWindow (d .Get ("maintenance_window" ), d , config )
454
492
if err != nil {
455
493
return err
@@ -629,6 +667,9 @@ func resourceDataprocMetastoreServiceRead(d *schema.ResourceData, meta interface
629
667
if err := d .Set ("scaling_config" , flattenDataprocMetastoreServiceScalingConfig (res ["scalingConfig" ], d , config )); err != nil {
630
668
return fmt .Errorf ("Error reading Service: %s" , err )
631
669
}
670
+ if err := d .Set ("scheduled_backup" , flattenDataprocMetastoreServiceScheduledBackup (res ["scheduledBackup" ], d , config )); err != nil {
671
+ return fmt .Errorf ("Error reading Service: %s" , err )
672
+ }
632
673
if err := d .Set ("maintenance_window" , flattenDataprocMetastoreServiceMaintenanceWindow (res ["maintenanceWindow" ], d , config )); err != nil {
633
674
return fmt .Errorf ("Error reading Service: %s" , err )
634
675
}
@@ -700,6 +741,12 @@ func resourceDataprocMetastoreServiceUpdate(d *schema.ResourceData, meta interfa
700
741
} else if v , ok := d .GetOkExists ("scaling_config" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , scalingConfigProp )) {
701
742
obj ["scalingConfig" ] = scalingConfigProp
702
743
}
744
+ scheduledBackupProp , err := expandDataprocMetastoreServiceScheduledBackup (d .Get ("scheduled_backup" ), d , config )
745
+ if err != nil {
746
+ return err
747
+ } else if v , ok := d .GetOkExists ("scheduled_backup" ); ! tpgresource .IsEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , scheduledBackupProp )) {
748
+ obj ["scheduledBackup" ] = scheduledBackupProp
749
+ }
703
750
maintenanceWindowProp , err := expandDataprocMetastoreServiceMaintenanceWindow (d .Get ("maintenance_window" ), d , config )
704
751
if err != nil {
705
752
return err
@@ -757,6 +804,10 @@ func resourceDataprocMetastoreServiceUpdate(d *schema.ResourceData, meta interfa
757
804
updateMask = append (updateMask , "scalingConfig" )
758
805
}
759
806
807
+ if d .HasChange ("scheduled_backup" ) {
808
+ updateMask = append (updateMask , "scheduledBackup" )
809
+ }
810
+
760
811
if d .HasChange ("maintenance_window" ) {
761
812
updateMask = append (updateMask , "maintenanceWindow" )
762
813
}
@@ -978,6 +1029,41 @@ func flattenDataprocMetastoreServiceScalingConfigScalingFactor(v interface{}, d
978
1029
return v
979
1030
}
980
1031
1032
+ func flattenDataprocMetastoreServiceScheduledBackup (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1033
+ if v == nil {
1034
+ return nil
1035
+ }
1036
+ original := v .(map [string ]interface {})
1037
+ if len (original ) == 0 {
1038
+ return nil
1039
+ }
1040
+ transformed := make (map [string ]interface {})
1041
+ transformed ["enabled" ] =
1042
+ flattenDataprocMetastoreServiceScheduledBackupEnabled (original ["enabled" ], d , config )
1043
+ transformed ["cron_schedule" ] =
1044
+ flattenDataprocMetastoreServiceScheduledBackupCronSchedule (original ["cronSchedule" ], d , config )
1045
+ transformed ["time_zone" ] =
1046
+ flattenDataprocMetastoreServiceScheduledBackupTimeZone (original ["timeZone" ], d , config )
1047
+ transformed ["backup_location" ] =
1048
+ flattenDataprocMetastoreServiceScheduledBackupBackupLocation (original ["backupLocation" ], d , config )
1049
+ return []interface {}{transformed }
1050
+ }
1051
+ func flattenDataprocMetastoreServiceScheduledBackupEnabled (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1052
+ return v
1053
+ }
1054
+
1055
+ func flattenDataprocMetastoreServiceScheduledBackupCronSchedule (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1056
+ return v
1057
+ }
1058
+
1059
+ func flattenDataprocMetastoreServiceScheduledBackupTimeZone (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1060
+ return v
1061
+ }
1062
+
1063
+ func flattenDataprocMetastoreServiceScheduledBackupBackupLocation (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1064
+ return v
1065
+ }
1066
+
981
1067
func flattenDataprocMetastoreServiceMaintenanceWindow (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
982
1068
if v == nil {
983
1069
return nil
@@ -1300,6 +1386,62 @@ func expandDataprocMetastoreServiceScalingConfigScalingFactor(v interface{}, d t
1300
1386
return v , nil
1301
1387
}
1302
1388
1389
+ func expandDataprocMetastoreServiceScheduledBackup (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1390
+ l := v .([]interface {})
1391
+ if len (l ) == 0 || l [0 ] == nil {
1392
+ return nil , nil
1393
+ }
1394
+ raw := l [0 ]
1395
+ original := raw .(map [string ]interface {})
1396
+ transformed := make (map [string ]interface {})
1397
+
1398
+ transformedEnabled , err := expandDataprocMetastoreServiceScheduledBackupEnabled (original ["enabled" ], d , config )
1399
+ if err != nil {
1400
+ return nil , err
1401
+ } else if val := reflect .ValueOf (transformedEnabled ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1402
+ transformed ["enabled" ] = transformedEnabled
1403
+ }
1404
+
1405
+ transformedCronSchedule , err := expandDataprocMetastoreServiceScheduledBackupCronSchedule (original ["cron_schedule" ], d , config )
1406
+ if err != nil {
1407
+ return nil , err
1408
+ } else if val := reflect .ValueOf (transformedCronSchedule ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1409
+ transformed ["cronSchedule" ] = transformedCronSchedule
1410
+ }
1411
+
1412
+ transformedTimeZone , err := expandDataprocMetastoreServiceScheduledBackupTimeZone (original ["time_zone" ], d , config )
1413
+ if err != nil {
1414
+ return nil , err
1415
+ } else if val := reflect .ValueOf (transformedTimeZone ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1416
+ transformed ["timeZone" ] = transformedTimeZone
1417
+ }
1418
+
1419
+ transformedBackupLocation , err := expandDataprocMetastoreServiceScheduledBackupBackupLocation (original ["backup_location" ], d , config )
1420
+ if err != nil {
1421
+ return nil , err
1422
+ } else if val := reflect .ValueOf (transformedBackupLocation ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1423
+ transformed ["backupLocation" ] = transformedBackupLocation
1424
+ }
1425
+
1426
+ return transformed , nil
1427
+ }
1428
+
1429
+ func expandDataprocMetastoreServiceScheduledBackupEnabled (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1430
+ return v , nil
1431
+ }
1432
+
1433
+ func expandDataprocMetastoreServiceScheduledBackupCronSchedule (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1434
+ return v , nil
1435
+ }
1436
+
1437
+ func expandDataprocMetastoreServiceScheduledBackupTimeZone (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1438
+ return v , nil
1439
+ }
1440
+
1441
+ func expandDataprocMetastoreServiceScheduledBackupBackupLocation (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1442
+ return v , nil
1443
+ }
1444
+
1303
1445
func expandDataprocMetastoreServiceMaintenanceWindow (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1304
1446
l := v .([]interface {})
1305
1447
if len (l ) == 0 || l [0 ] == nil {
0 commit comments