Skip to content

Commit ad29017

Browse files
author
Ravi Tandon
committed
Support for recovery window in backup config for Database DbSystem and DbHome resources and allow backup config to be updatable
1 parent 46b52a8 commit ad29017

11 files changed

+74
-18
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
## 3.24.2 (Unreleased)
1+
## 3.25.0 (Unreleased)
2+
3+
### Added
4+
- Support for recovery window in backup config for Database DbSystem and DbHome resources
5+
26
## 3.24.1 (May 07, 2019)
37

48
### Fixed

examples/database/db_systems/resources.tf

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ resource "oci_database_db_system" "test_db_system" {
1616
pdb_name = "${var.pdb_name}"
1717

1818
db_backup_config {
19-
auto_backup_enabled = true
19+
auto_backup_enabled = true
20+
recovery_window_in_days = 10
2021
}
2122

2223
freeform_tags = {
@@ -65,7 +66,8 @@ resource "oci_database_db_home" "test_db_home" {
6566
}
6667

6768
db_backup_config {
68-
auto_backup_enabled = false
69+
auto_backup_enabled = true
70+
recovery_window_in_days = 10
6971
}
7072
}
7173

oci/database_database_data_source.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ func DatabaseDatabaseDataSource() *schema.Resource {
6868
Type: schema.TypeBool,
6969
Computed: true,
7070
},
71+
"recovery_window_in_days": {
72+
Type: schema.TypeInt,
73+
Computed: true,
74+
},
7175
},
7276
},
7377
},

oci/database_db_home_resource.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ func DatabaseDbHomeResource() *schema.Resource {
8181
Optional: true,
8282
Computed: true,
8383
},
84+
"recovery_window_in_days": {
85+
Type: schema.TypeInt,
86+
Optional: true,
87+
Computed: true,
88+
},
8489

8590
// Computed
8691
},
@@ -709,6 +714,11 @@ func (s *DatabaseDbHomeResourceCrud) mapToDbBackupConfig(fieldKeyFormat string)
709714
result.AutoBackupEnabled = &tmp
710715
}
711716

717+
if recoveryWindowInDays, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "recovery_window_in_days")); ok && s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "recovery_window_in_days")) {
718+
tmp := recoveryWindowInDays.(int)
719+
result.RecoveryWindowInDays = &tmp
720+
}
721+
712722
return result, nil
713723
}
714724

@@ -719,6 +729,10 @@ func (s *DatabaseDbHomeResourceCrud) DbBackupConfigToMap(obj *oci_database.DbBac
719729
result["auto_backup_enabled"] = bool(*obj.AutoBackupEnabled)
720730
}
721731

732+
if obj.RecoveryWindowInDays != nil {
733+
result["recovery_window_in_days"] = int(*obj.RecoveryWindowInDays)
734+
}
735+
722736
return result
723737
}
724738

oci/database_db_home_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ var (
6666
"db_name": Representation{repType: Required, create: `dbNone0`},
6767
})
6868
dbHomeDatabaseDbBackupConfigRepresentation = map[string]interface{}{
69-
"auto_backup_enabled": Representation{repType: Optional, create: `true`, update: `false`},
69+
"auto_backup_enabled": Representation{repType: Optional, create: `true`, update: `false`},
70+
"recovery_window_in_days": Representation{repType: Optional, create: `10`},
7071
}
7172
dbHomeRepresentationSourceDbBackup = representationCopyWithNewProperties(dbHomeRepresentationBase, map[string]interface{}{
7273
"database": RepresentationGroup{Required, dbHomeDatabaseRepresentationSourceDbBackup},
@@ -84,10 +85,6 @@ var (
8485
)
8586

8687
func TestDatabaseDbHomeResource_basic(t *testing.T) {
87-
if httpreplay.ShouldRetryImmediately() {
88-
t.Skip("TestDatabaseDbHomeResource_basic test is flaky, tracked in TER-1274, skip this test in checkin test.")
89-
}
90-
9188
httpreplay.SetScenario("TestDatabaseDbHomeResource_basic")
9289
defer httpreplay.SaveScenario()
9390

@@ -146,6 +143,7 @@ func TestDatabaseDbHomeResource_basic(t *testing.T) {
146143
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.character_set", "AL32UTF8"),
147144
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_backup_config.#", "1"),
148145
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_backup_config.0.auto_backup_enabled", "true"),
146+
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_backup_config.0.recovery_window_in_days", "10"),
149147
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_name", "dbNone"),
150148
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_workload", "OLTP"),
151149
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.defined_tags.%", "1"),
@@ -185,6 +183,7 @@ func TestDatabaseDbHomeResource_basic(t *testing.T) {
185183
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.character_set", "AL32UTF8"),
186184
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_backup_config.#", "1"),
187185
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_backup_config.0.auto_backup_enabled", "false"),
186+
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_backup_config.0.recovery_window_in_days", "10"),
188187
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_name", "dbNone"),
189188
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.db_workload", "OLTP"),
190189
resource.TestCheckResourceAttr(resourceName+"_source_none", "database.0.defined_tags.%", "1"),

oci/database_db_system_resource.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ func DatabaseDbSystemResource() *schema.Resource {
115115
Optional: true,
116116
Computed: true,
117117
},
118+
"recovery_window_in_days": {
119+
Type: schema.TypeInt,
120+
Optional: true,
121+
Computed: true,
122+
},
118123

119124
// Computed
120125
},
@@ -1337,6 +1342,11 @@ func (s *DatabaseDbSystemResourceCrud) mapToDbBackupConfig(fieldKeyFormat string
13371342
result.AutoBackupEnabled = &tmp
13381343
}
13391344

1345+
if recoveryWindowInDays, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "recovery_window_in_days")); ok && s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "recovery_window_in_days")) {
1346+
tmp := recoveryWindowInDays.(int)
1347+
result.RecoveryWindowInDays = &tmp
1348+
}
1349+
13401350
return result, nil
13411351
}
13421352

@@ -1347,6 +1357,10 @@ func DbBackupConfigToMap(obj *oci_database.DbBackupConfig) map[string]interface{
13471357
result["auto_backup_enabled"] = bool(*obj.AutoBackupEnabled)
13481358
}
13491359

1360+
if obj.RecoveryWindowInDays != nil {
1361+
result["recovery_window_in_days"] = int(*obj.RecoveryWindowInDays)
1362+
}
1363+
13501364
return result
13511365
}
13521366

oci/database_db_system_resource_test.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) SetupTest() {
106106
s.ResourceName = "oci_database_db_system.t"
107107
}
108108

109-
func dbWaitCondition(response oci_common.OCIOperationResponse) bool {
109+
func dbBackupAvailableWaitCondition(response oci_common.OCIOperationResponse) bool {
110110
if listBackupResponse, ok := response.Response.(database.ListBackupsResponse); ok {
111111
if len(listBackupResponse.Items) > 0 {
112112
return listBackupResponse.Items[0].LifecycleState != database.BackupSummaryLifecycleStateActive
@@ -116,9 +116,9 @@ func dbWaitCondition(response oci_common.OCIOperationResponse) bool {
116116
return false
117117
}
118118

119-
func dbResponseFetchOperation(client *OracleClients, resourceId *string, retryPolicy *oci_common.RetryPolicy) error {
119+
func listBackupsFetchOperation(client *OracleClients, databaseId *string, retryPolicy *oci_common.RetryPolicy) error {
120120
_, err := client.databaseClient.ListBackups(context.Background(), database.ListBackupsRequest{
121-
DatabaseId: resourceId,
121+
DatabaseId: databaseId,
122122
RequestMetadata: oci_common.RequestMetadata{
123123
RetryPolicy: retryPolicy,
124124
},
@@ -128,7 +128,7 @@ func dbResponseFetchOperation(client *OracleClients, resourceId *string, retryPo
128128

129129
func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystemFromBackup() {
130130
if strings.Contains(getEnvSettingWithBlankDefault("suppressed_tests"), "DBSystem_basic") {
131-
s.T().Skip("Skipping subset dbsystem test.")
131+
s.T().Skip("Skipping suppressed DBSystem_basic")
132132
}
133133

134134
const DBWaitConditionDuration = time.Duration(20 * time.Minute)
@@ -160,6 +160,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystemFromB
160160
pdb_name = "pdbName"
161161
db_backup_config {
162162
auto_backup_enabled = true
163+
recovery_window_in_days = 10
163164
}
164165
}
165166
}
@@ -194,8 +195,8 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystemFromB
194195
},
195196
// wait for backup and create new db from it
196197
{
197-
PreConfig: waitTillCondition(testAccProvider, &resId, dbWaitCondition, DBWaitConditionDuration,
198-
dbResponseFetchOperation, "core", false),
198+
PreConfig: waitTillCondition(testAccProvider, &resId, dbBackupAvailableWaitCondition, DBWaitConditionDuration,
199+
listBackupsFetchOperation, "core", false),
199200
Config: s.Config + SubnetResourceConfig + DataBaseSystemWithBackup + `
200201
data "oci_database_databases" "t" {
201202
compartment_id = "${var.compartment_id}"
@@ -265,7 +266,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystemFromB
265266
func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_basic() {
266267
// This test is a subset of TestAccResourceDatabaseDBSystem_allXX. It tests omitting optional params.
267268
if strings.Contains(getEnvSettingWithBlankDefault("suppressed_tests"), "DBSystem_basic") {
268-
s.T().Skip("Skipping subset dbsystem test.")
269+
s.T().Skip("Skipping suppressed DBSystem_basic")
269270
}
270271

271272
resource.Test(s.T(), resource.TestCase{
@@ -330,7 +331,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_basi
330331
// TestAccResourceDatabaseDBSystem_allBM tests DBsystems using Bare Metal instances.
331332
func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allBM() {
332333
if strings.Contains(getEnvSettingWithBlankDefault("suppressed_tests"), "DBSystem_allBM") {
333-
s.T().Skip("Skipping BM test due to tenancy limits.")
334+
s.T().Skip("Skipping suppressed DBSystem_allBM")
334335
}
335336

336337
resource.Test(s.T(), resource.TestCase{
@@ -368,6 +369,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allB
368369
pdb_name = "pdbName"
369370
db_backup_config {
370371
auto_backup_enabled = true
372+
recovery_window_in_days = 10
371373
}
372374
}
373375
}
@@ -441,6 +443,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allB
441443
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.db_workload", "OLTP"),
442444
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.pdb_name", "pdbName"),
443445
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.db_backup_config.0.auto_backup_enabled", "true"),
446+
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.db_backup_config.0.recovery_window_in_days", "10"),
444447
resource.TestCheckResourceAttr(s.ResourceName, "state", string(database.DbSystemLifecycleStateAvailable)),
445448

446449
// Data Source tests
@@ -513,6 +516,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allB
513516
resource.TestCheckResourceAttr("data.oci_database_databases.t", "databases.0.character_set", "AL32UTF8"),
514517
resource.TestCheckResourceAttrSet("data.oci_database_databases.t", "databases.0.compartment_id"),
515518
resource.TestCheckResourceAttr("data.oci_database_databases.t", "databases.0.db_backup_config.0.auto_backup_enabled", "true"),
519+
resource.TestCheckResourceAttr("data.oci_database_databases.t", "databases.0.db_backup_config.0.recovery_window_in_days", "10"),
516520
resource.TestCheckResourceAttrSet("data.oci_database_databases.t", "databases.0.db_home_id"),
517521
resource.TestCheckResourceAttr("data.oci_database_databases.t", "databases.0.db_name", "aTFdb"),
518522
resource.TestCheckResourceAttrSet("data.oci_database_databases.t", "databases.0.db_unique_name"),
@@ -532,6 +536,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allB
532536
resource.TestCheckResourceAttr("data.oci_database_database.t", "character_set", "AL32UTF8"),
533537
resource.TestCheckResourceAttrSet("data.oci_database_database.t", "compartment_id"),
534538
resource.TestCheckResourceAttr("data.oci_database_database.t", "db_backup_config.0.auto_backup_enabled", "true"),
539+
resource.TestCheckResourceAttr("data.oci_database_database.t", "db_backup_config.0.recovery_window_in_days", "10"),
535540
resource.TestCheckResourceAttrSet("data.oci_database_database.t", "db_home_id"),
536541
resource.TestCheckResourceAttr("data.oci_database_database.t", "db_name", "aTFdb"),
537542
resource.TestCheckResourceAttrSet("data.oci_database_database.t", "db_unique_name"),
@@ -577,10 +582,10 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allB
577582
})
578583
}
579584

580-
// TestAccResourceDatabaseDBSystem_allBM tests DBsystems using Virtual Machines.
585+
// TestAccResourceDatabaseDBSystem_allVM tests DBsystems using Virtual Machines.
581586
func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allVM() {
582587
if strings.Contains(getEnvSettingWithBlankDefault("suppressed_tests"), "DBSystem_allVM") {
583-
s.T().Skip("Skipping VM test due to tenancy limits.")
588+
s.T().Skip("Skipping suppressed DBSystem_allVM")
584589
}
585590

586591
var resId, resId2 string
@@ -620,6 +625,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allV
620625
pdb_name = "pdbName"
621626
db_backup_config {
622627
auto_backup_enabled = true
628+
recovery_window_in_days = 10
623629
}
624630
}
625631
}
@@ -698,6 +704,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allV
698704
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.db_workload", "OLTP"),
699705
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.pdb_name", "pdbName"),
700706
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.db_backup_config.0.auto_backup_enabled", "true"),
707+
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.db_backup_config.0.recovery_window_in_days", "10"),
701708
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.defined_tags.example-tag-namespace-all.example-tag", "originalValue"),
702709
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.freeform_tags.Department", "Finance"),
703710
resource.TestCheckResourceAttrSet(s.ResourceName, "state"),
@@ -778,6 +785,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allV
778785
resource.TestCheckResourceAttr("data.oci_database_databases.t", "databases.0.character_set", "AL32UTF8"),
779786
resource.TestCheckResourceAttrSet("data.oci_database_databases.t", "databases.0.compartment_id"),
780787
resource.TestCheckResourceAttr("data.oci_database_databases.t", "databases.0.db_backup_config.0.auto_backup_enabled", "true"),
788+
resource.TestCheckResourceAttr("data.oci_database_databases.t", "databases.0.db_backup_config.0.recovery_window_in_days", "10"),
781789
resource.TestCheckResourceAttrSet("data.oci_database_databases.t", "databases.0.db_home_id"),
782790
resource.TestCheckResourceAttr("data.oci_database_databases.t", "databases.0.db_name", "aTFdb"),
783791
resource.TestCheckResourceAttrSet("data.oci_database_databases.t", "databases.0.db_unique_name"),
@@ -797,6 +805,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allV
797805
resource.TestCheckResourceAttr("data.oci_database_database.t", "character_set", "AL32UTF8"),
798806
resource.TestCheckResourceAttrSet("data.oci_database_database.t", "compartment_id"),
799807
resource.TestCheckResourceAttr("data.oci_database_database.t", "db_backup_config.0.auto_backup_enabled", "true"),
808+
resource.TestCheckResourceAttr("data.oci_database_database.t", "db_backup_config.0.recovery_window_in_days", "10"),
800809
resource.TestCheckResourceAttrSet("data.oci_database_database.t", "db_home_id"),
801810
resource.TestCheckResourceAttr("data.oci_database_database.t", "db_name", "aTFdb"),
802811
resource.TestCheckResourceAttrSet("data.oci_database_database.t", "db_unique_name"),
@@ -876,6 +885,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allV
876885
pdb_name = "pdbName"
877886
db_backup_config {
878887
auto_backup_enabled = false
888+
recovery_window_in_days = 10
879889
}
880890
}
881891
}
@@ -956,6 +966,7 @@ func (s *ResourceDatabaseDBSystemTestSuite) TestAccResourceDatabaseDBSystem_allV
956966
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.db_workload", "OLTP"),
957967
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.pdb_name", "pdbName"),
958968
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.db_backup_config.0.auto_backup_enabled", "false"),
969+
resource.TestCheckResourceAttr(s.ResourceName, "db_home.0.database.0.db_backup_config.0.recovery_window_in_days", "10"),
959970
resource.TestCheckResourceAttr(s.ResourceName, "state", string(database.DbSystemLifecycleStateAvailable)),
960971
resource.TestCheckResourceAttr(s.ResourceName, "defined_tags.example-tag-namespace-all.example-tag", "updateValue"),
961972
resource.TestCheckResourceAttr(s.ResourceName, "freeform_tags.Department", "Admin"),

website/docs/d/database_database.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ The following attributes are exported:
3939
* `cdb_ip_default` - IP based CDB Connection String.
4040
* `db_backup_config` -
4141
* `auto_backup_enabled` - If set to true, configures automatic backups. If you previously used RMAN or dbcli to configure backups and then you switch to using the Console or the API for backups, a new backup configuration is created and associated with your database. This means that you can no longer rely on your previously configured unmanaged backups to work.
42+
* `recovery_window_in_days` - Number of days between the current and the earliest point of recoverability covered by automatic backups. This value applies to automatic backups only. After a new automatic backup has been created, Oracle removes old automatic backups that are created before the window. When the value is updated, it is applied to all existing automatic backups.
4243
* `db_home_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the database home.
4344
* `db_name` - The database name.
4445
* `db_unique_name` - A system-generated name for the database to ensure uniqueness within an Oracle Data Guard group (a primary database and its standby databases). The unique name cannot be changed.

website/docs/d/database_databases.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ The following attributes are exported:
5454
* `cdb_ip_default` - IP based CDB Connection String.
5555
* `db_backup_config` -
5656
* `auto_backup_enabled` - If set to true, configures automatic backups. If you previously used RMAN or dbcli to configure backups and then you switch to using the Console or the API for backups, a new backup configuration is created and associated with your database. This means that you can no longer rely on your previously configured unmanaged backups to work.
57+
* `recovery_window_in_days` - Number of days between the current and the earliest point of recoverability covered by automatic backups. This value applies to automatic backups only. After a new automatic backup has been created, Oracle removes old automatic backups that are created before the window. When the value is updated, it is applied to all existing automatic backups.
5758
* `db_home_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the database home.
5859
* `db_name` - The database name.
5960
* `db_unique_name` - A system-generated name for the database to ensure uniqueness within an Oracle Data Guard group (a primary database and its standby databases). The unique name cannot be changed.

0 commit comments

Comments
 (0)