|
50 | 50 | "config.0.node_count",
|
51 | 51 | "config.0.node_config",
|
52 | 52 | "config.0.software_config",
|
| 53 | + "config.0.recovery_config", |
53 | 54 | "config.0.private_environment_config",
|
54 | 55 | "config.0.web_server_network_access_control",
|
55 | 56 | "config.0.database_config",
|
|
61 | 62 | "config.0.master_authorized_networks_config",
|
62 | 63 | }
|
63 | 64 |
|
| 65 | + recoveryConfigKeys = []string{ |
| 66 | + "config.0.recovery_config.0.scheduled_snapshots_config", |
| 67 | + } |
| 68 | + |
64 | 69 | workloadsConfigKeys = []string{
|
65 | 70 | "config.0.workloads_config.0.scheduler",
|
66 | 71 | "config.0.workloads_config.0.web_server",
|
@@ -314,6 +319,48 @@ func resourceComposerEnvironment() *schema.Resource {
|
314 | 319 | },
|
315 | 320 | },
|
316 | 321 | },
|
| 322 | + "recovery_config": { |
| 323 | + Type: schema.TypeList, |
| 324 | + Optional: true, |
| 325 | + AtLeastOneOf: composerConfigKeys, |
| 326 | + MaxItems: 1, |
| 327 | + Description: `The recovery configuration settings for the Cloud Composer environment`, |
| 328 | + Elem: &schema.Resource{ |
| 329 | + Schema: map[string]*schema.Schema{ |
| 330 | + "scheduled_snapshots_config": { |
| 331 | + Type: schema.TypeList, |
| 332 | + Optional: true, |
| 333 | + AtLeastOneOf: recoveryConfigKeys, |
| 334 | + Description: `The configuration settings for scheduled snapshots.`, |
| 335 | + MaxItems: 1, |
| 336 | + Elem: &schema.Resource{ |
| 337 | + Schema: map[string]*schema.Schema{ |
| 338 | + "enabled": { |
| 339 | + Type: schema.TypeBool, |
| 340 | + Required: true, |
| 341 | + Description: `When enabled, Cloud Composer periodically saves snapshots of your environment to a Cloud Storage bucket.`, |
| 342 | + }, |
| 343 | + "snapshot_location": { |
| 344 | + Type: schema.TypeString, |
| 345 | + Optional: true, |
| 346 | + Description: `the URI of a bucket folder where to save the snapshot.`, |
| 347 | + }, |
| 348 | + "snapshot_creation_schedule": { |
| 349 | + Type: schema.TypeString, |
| 350 | + Optional: true, |
| 351 | + Description: `Snapshot schedule, in the unix-cron format.`, |
| 352 | + }, |
| 353 | + "time_zone": { |
| 354 | + Type: schema.TypeString, |
| 355 | + Optional: true, |
| 356 | + Description: `A time zone for the schedule. This value is a time offset and does not take into account daylight saving time changes. Valid values are from UTC-12 to UTC+12. Examples: UTC, UTC-01, UTC+03.`, |
| 357 | + }, |
| 358 | + }, |
| 359 | + }, |
| 360 | + }, |
| 361 | + }, |
| 362 | + }, |
| 363 | + }, |
317 | 364 | "software_config": {
|
318 | 365 | Type: schema.TypeList,
|
319 | 366 | Optional: true,
|
@@ -996,6 +1043,18 @@ func resourceComposerEnvironmentUpdate(d *schema.ResourceData, meta interface{})
|
996 | 1043 | return err
|
997 | 1044 | }
|
998 | 1045 | }
|
| 1046 | + |
| 1047 | + if d.HasChange("config.0.recovery_config.0.scheduled_snapshots_config") { |
| 1048 | + patchObj := &composer.Environment{Config: &composer.EnvironmentConfig{}} |
| 1049 | + if config != nil { |
| 1050 | + patchObj.Config.RecoveryConfig = config.RecoveryConfig |
| 1051 | + } |
| 1052 | + err = resourceComposerEnvironmentPatchField("config.RecoveryConfig.ScheduledSnapshotsConfig", userAgent, patchObj, d, tfConfig) |
| 1053 | + if err != nil { |
| 1054 | + return err |
| 1055 | + } |
| 1056 | + } |
| 1057 | + |
999 | 1058 | if d.HasChange("config.0.environment_size") {
|
1000 | 1059 | patchObj := &composer.Environment{Config: &composer.EnvironmentConfig{}}
|
1001 | 1060 | if config != nil {
|
@@ -1140,6 +1199,7 @@ func flattenComposerEnvironmentConfig(envCfg *composer.EnvironmentConfig) interf
|
1140 | 1199 | transformed["encryption_config"] = flattenComposerEnvironmentConfigEncryptionConfig(envCfg.EncryptionConfig)
|
1141 | 1200 | transformed["maintenance_window"] = flattenComposerEnvironmentConfigMaintenanceWindow(envCfg.MaintenanceWindow)
|
1142 | 1201 | transformed["workloads_config"] = flattenComposerEnvironmentConfigWorkloadsConfig(envCfg.WorkloadsConfig)
|
| 1202 | + transformed["recovery_config"] = flattenComposerEnvironmentConfigRecoveryConfig(envCfg.RecoveryConfig) |
1143 | 1203 | transformed["environment_size"] = envCfg.EnvironmentSize
|
1144 | 1204 | transformed["master_authorized_networks_config"] = flattenComposerEnvironmentConfigMasterAuthorizedNetworksConfig(envCfg.MasterAuthorizedNetworksConfig)
|
1145 | 1205 | return []interface{}{transformed}
|
@@ -1199,6 +1259,30 @@ func flattenComposerEnvironmentConfigEncryptionConfig(encryptionCfg *composer.En
|
1199 | 1259 | return []interface{}{transformed}
|
1200 | 1260 | }
|
1201 | 1261 |
|
| 1262 | +func flattenComposerEnvironmentConfigRecoveryConfig(recoveryCfg *composer.RecoveryConfig) interface{} { |
| 1263 | + if recoveryCfg == nil { |
| 1264 | + return nil |
| 1265 | + } |
| 1266 | + |
| 1267 | + transformed := make(map[string]interface{}) |
| 1268 | + transformedScheduledSnapshotsConfig := make(map[string]interface{}) |
| 1269 | + |
| 1270 | + scheduledSnapshotsConfig := recoveryCfg.ScheduledSnapshotsConfig |
| 1271 | + |
| 1272 | + if scheduledSnapshotsConfig == nil { |
| 1273 | + transformedScheduledSnapshotsConfig = nil |
| 1274 | + } else { |
| 1275 | + transformedScheduledSnapshotsConfig["enabled"] = scheduledSnapshotsConfig.Enabled |
| 1276 | + transformedScheduledSnapshotsConfig["snapshot_location"] = scheduledSnapshotsConfig.SnapshotLocation |
| 1277 | + transformedScheduledSnapshotsConfig["time_zone"] = scheduledSnapshotsConfig.TimeZone |
| 1278 | + transformedScheduledSnapshotsConfig["snapshot_creation_schedule"] = scheduledSnapshotsConfig.SnapshotCreationSchedule |
| 1279 | + } |
| 1280 | + |
| 1281 | + transformed["scheduled_snapshots_config"] = []interface{}{transformedScheduledSnapshotsConfig} |
| 1282 | + |
| 1283 | + return []interface{}{transformed} |
| 1284 | +} |
| 1285 | + |
1202 | 1286 | func flattenComposerEnvironmentConfigMaintenanceWindow(maintenanceWindow *composer.MaintenanceWindow) interface{} {
|
1203 | 1287 | if maintenanceWindow == nil {
|
1204 | 1288 | return nil
|
@@ -1437,6 +1521,13 @@ func expandComposerEnvironmentConfig(v interface{}, d *schema.ResourceData, conf
|
1437 | 1521 | return nil, err
|
1438 | 1522 | }
|
1439 | 1523 | transformed.MasterAuthorizedNetworksConfig = transformedMasterAuthorizedNetworksConfig
|
| 1524 | + |
| 1525 | + transformedRecoveryConfig, err := expandComposerEnvironmentConfigRecoveryConfig(original["recovery_config"], d, config) |
| 1526 | + if err != nil { |
| 1527 | + return nil, err |
| 1528 | + } |
| 1529 | + transformed.RecoveryConfig = transformedRecoveryConfig |
| 1530 | + |
1440 | 1531 | return transformed, nil
|
1441 | 1532 | }
|
1442 | 1533 |
|
@@ -1617,6 +1708,30 @@ func expandComposerEnvironmentConfigWorkloadsConfig(v interface{}, d *schema.Res
|
1617 | 1708 | return transformed, nil
|
1618 | 1709 | }
|
1619 | 1710 |
|
| 1711 | +func expandComposerEnvironmentConfigRecoveryConfig(v interface{}, d *schema.ResourceData, config *Config) (*composer.RecoveryConfig, error) { |
| 1712 | + l := v.([]interface{}) |
| 1713 | + if len(l) == 0 { |
| 1714 | + return nil, nil |
| 1715 | + } |
| 1716 | + raw := l[0] |
| 1717 | + original := raw.(map[string]interface{}) |
| 1718 | + transformed := &composer.RecoveryConfig{} |
| 1719 | + |
| 1720 | + if v, ok := original["scheduled_snapshots_config"]; ok { |
| 1721 | + if len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil { |
| 1722 | + transformedScheduledSnapshotsConfig := &composer.ScheduledSnapshotsConfig{} |
| 1723 | + originalScheduledSnapshotsConfigRaw := v.([]interface{})[0].(map[string]interface{}) |
| 1724 | + transformedScheduledSnapshotsConfig.Enabled = originalScheduledSnapshotsConfigRaw["enabled"].(bool) |
| 1725 | + transformedScheduledSnapshotsConfig.SnapshotLocation = originalScheduledSnapshotsConfigRaw["snapshot_location"].(string) |
| 1726 | + transformedScheduledSnapshotsConfig.TimeZone = originalScheduledSnapshotsConfigRaw["time_zone"].(string) |
| 1727 | + transformedScheduledSnapshotsConfig.SnapshotCreationSchedule = originalScheduledSnapshotsConfigRaw["snapshot_creation_schedule"].(string) |
| 1728 | + transformed.ScheduledSnapshotsConfig = transformedScheduledSnapshotsConfig |
| 1729 | + } |
| 1730 | + } |
| 1731 | + |
| 1732 | + return transformed, nil |
| 1733 | +} |
| 1734 | + |
1620 | 1735 | func expandComposerEnvironmentConfigEnvironmentSize(v interface{}, d *schema.ResourceData, config *Config) (string, error) {
|
1621 | 1736 | if v == nil {
|
1622 | 1737 | return "", nil
|
|
0 commit comments