Skip to content

Commit 46cfbf4

Browse files
Pridhvi Chintalasagarp337
authored andcommitted
Added - Support for Backup/Recovery Enhancements Phase 2 | ADB-D C@C
1 parent 1d6f67f commit 46cfbf4

26 files changed

+1009
-26
lines changed

examples/database/exadata_cc/adbd/acd.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ resource "random_string" "db_unique_name" {
66

77
resource "oci_database_autonomous_container_database" "autonomous_container_database" {
88
autonomous_vm_cluster_id = oci_database_autonomous_vm_cluster.test_autonomous_vm_cluster.id
9-
db_version = "19.23.0.1.0"
9+
db_version = "19.24.0.1.0"
1010
backup_config {
1111
backup_destination_details {
1212
type = "LOCAL"

examples/database/exadata_cc/adbd/adb.tf

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,54 @@ resource "oci_database_autonomous_database" "test_autonomous_database" {
1212
compartment_id = var.compartment_ocid
1313
compute_count = 8
1414
data_storage_size_in_tbs = "1"
15-
db_name = "atpdb1"
15+
db_name = "atpdb2"
1616

1717
#Optional
1818
autonomous_container_database_id = oci_database_autonomous_container_database.autonomous_container_database.id
1919
db_workload = "OLTP"
2020
display_name = "exacc_tf-adb"
2121
is_dedicated = "true"
22-
}
22+
}
23+
24+
resource "oci_database_autonomous_database_backup" "test_autonomous_database_backup" {
25+
autonomous_database_id = oci_database_autonomous_database.test_autonomous_database.id
26+
display_name = "DbBackupName"
27+
is_long_term_backup = "true"
28+
retention_period_in_days = 90
29+
backup_destination_details {
30+
type = "NFS"
31+
id = oci_database_backup_destination.test_backup_destination.id
32+
}
33+
}
34+
35+
resource "oci_database_backup_destination" "test_backup_destination" {
36+
compartment_id = var.compartment_ocid
37+
display_name = "NFS1"
38+
type = "NFS"
39+
mount_type_details {
40+
mount_type = "AUTOMATED_MOUNT"
41+
nfs_server = ["98.56.65.88", "101.67.98.66"]
42+
nfs_server_export = "/mount/export"
43+
}
44+
45+
}
46+
47+
resource "oci_database_autonomous_database" "test_autonomous_database_from_backup" {
48+
admin_password = random_string.autonomous_database_admin_password.result
49+
compartment_id = var.compartment_ocid
50+
compute_count = 8
51+
data_storage_size_in_tbs = "1"
52+
compute_model = "ECPU"
53+
54+
55+
autonomous_container_database_id = oci_database_autonomous_container_database.autonomous_container_database.id
56+
db_workload = "OLTP"
57+
display_name = "partial-adb"
58+
is_dedicated = "true"
59+
60+
db_name = "cloneadb"
61+
clone_type = "PARTIAL"
62+
clone_table_space_list = ["1", "2", "3"]
63+
source = "BACKUP_FROM_ID"
64+
autonomous_database_backup_id = oci_database_autonomous_database_backup.test_autonomous_database_backup.id
65+
}

internal/integrationtest/database_autonomous_container_database_resource_test.go

Lines changed: 324 additions & 3 deletions
Large diffs are not rendered by default.

internal/integrationtest/database_autonomous_container_database_test.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package integrationtest
66
import (
77
"context"
88
"fmt"
9+
"os"
910
"strconv"
1011
"testing"
1112
"time"
@@ -59,7 +60,7 @@ var (
5960
"version_preference": acctest.Representation{RepType: acctest.Optional, Create: `LATEST_RELEASE_UPDATE`, Update: `NEXT_RELEASE_UPDATE`},
6061
"display_name": acctest.Representation{RepType: acctest.Required, Create: `containerDatabase2`, Update: `displayName2`},
6162
"patch_model": acctest.Representation{RepType: acctest.Required, Create: `RELEASE_UPDATES`, Update: `RELEASE_UPDATE_REVISIONS`},
62-
"db_version": acctest.Representation{RepType: acctest.Required, Create: utils.GetEnvSettingWithDefault("acd_db_version", "19.22.0.1.0")},
63+
"db_version": acctest.Representation{RepType: acctest.Required, Create: utils.GetEnvSettingWithDefault("acd_db_version", "19.24.0.1.0")},
6364
"cloud_autonomous_vm_cluster_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_cloud_autonomous_vm_cluster.test_cloud_autonomous_vm_cluster.id}`},
6465
"backup_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ACDatabaseBackupConfigRepresentation},
6566
"compartment_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.compartment_id}`},
@@ -78,11 +79,21 @@ var (
7879
"backup_destination_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: autonomousContainerDatabaseBackupConfigBackupDestinationDetailsRepresentation},
7980
"recovery_window_in_days": acctest.Representation{RepType: acctest.Optional, Create: `10`, Update: `11`},
8081
}
81-
82+
DatabaseAutonomousContainerDatabaseBackupConfigWithRAUpdateRepresentation = map[string]interface{}{
83+
"backup_destination_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: autonomousContainerDatabaseBackupConfigBackupDestinationDetailsWithRAUpdateRepresentation},
84+
"recovery_window_in_days": acctest.Representation{RepType: acctest.Optional, Create: `10`},
85+
}
86+
DatabaseAutonomousContainerDatabaseBackupConfigWithRARepresentation = map[string]interface{}{
87+
"backup_destination_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: autonomousContainerDatabaseBackupConfigBackupDestinationDetailsWithRARepresentation},
88+
}
8289
DatabaseAddStandbyAutonomousContainerDatabaseBackupConfigRepresentation = map[string]interface{}{
8390
"backup_destination_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: autonomousContainerDatabaseBackupConfigBackupDestinationDetailsRepresentation},
8491
"recovery_window_in_days": acctest.Representation{RepType: acctest.Optional, Create: `7`, Update: `7`},
8592
}
93+
AddStandbyAutonomousContainerDatabaseBackupConfigWithNoUpdateRepresentation = map[string]interface{}{
94+
"backup_destination_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: autonomousContainerDatabaseBackupConfigBackupDestinationDetailsRepresentationWithNoUpdate},
95+
"recovery_window_in_days": acctest.Representation{RepType: acctest.Optional, Create: `10`},
96+
}
8697

8798
DatabaseAutonomousContainerDatabaseMaintenanceWindowDetailsRepresentation = map[string]interface{}{
8899
"preference": acctest.Representation{RepType: acctest.Optional, Create: `CUSTOM_PREFERENCE`},
@@ -129,6 +140,12 @@ var (
129140
func TestDatabaseAutonomousContainerDatabaseResource_basic(t *testing.T) {
130141
//t.Skip("Skip this test as AEI and its api no longer exists.")
131142

143+
shouldSkipADBDtest := os.Getenv("TF_VAR_should_skip_adbd_test")
144+
145+
if shouldSkipADBDtest == "true" {
146+
t.Skip("Skipping TestDatabaseCrossRegionDisasterRecovery_basic test.\n" + "Current TF_VAR_should_skip_adbd_test=" + shouldSkipADBDtest)
147+
}
148+
132149
httpreplay.SetScenario("TestDatabaseAutonomousContainerDatabaseResource_basic")
133150
defer httpreplay.SaveScenario()
134151

internal/integrationtest/database_autonomous_database_resource_test.go

Lines changed: 138 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ var (
106106

107107
DatabaseAutonomousDatabaseBackupRepresentationNew = map[string]interface{}{
108108
"autonomous_database_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_autonomous_database.test_autonomous_database.id}`},
109-
"display_name": acctest.Representation{RepType: acctest.Required, Create: `LongTerm Backup`},
109+
"display_name": acctest.Representation{RepType: acctest.Required, Create: `adbLongTermBackup`},
110110
"is_long_term_backup": acctest.Representation{RepType: acctest.Required, Create: `true`},
111111
"retention_period_in_days": acctest.Representation{RepType: acctest.Required, Create: `90`, Update: `91`},
112112
}
@@ -117,7 +117,12 @@ var (
117117
acctest.RepresentationCopyWithNewProperties(DatabaseAutonomousDatabaseRepresentation, map[string]interface{}{
118118
"db_name": acctest.Representation{RepType: acctest.Required, Create: adbBackupSourceName},
119119
}))
120-
120+
AutonomousDatabaseFromBackupDependenciesPartialDedicated = AutonomousDatabaseDedicatedResourceDependencies +
121+
acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database_backup", "test_autonomous_database_backup", acctest.Required, acctest.Create, DatabaseAutonomousDatabaseBackupRepresentationNew) +
122+
acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database", "test_autonomous_database", acctest.Optional, acctest.Create,
123+
acctest.RepresentationCopyWithNewProperties(acctest.RepresentationCopyWithRemovedProperties(autonomousDatabaseDedicatedRepresentation, []string{"in_memory_percentage"}), map[string]interface{}{
124+
"db_name": acctest.Representation{RepType: acctest.Required, Create: adbBackupSourceName},
125+
}))
121126
autonomousDatabaseRepresentationForSourceFromBackupId = acctest.RepresentationCopyWithNewProperties(
122127
acctest.GetUpdatedRepresentationCopy("db_name", acctest.Representation{RepType: acctest.Required, Create: adbBackupIdName}, DatabaseAutonomousDatabaseRepresentation),
123128
map[string]interface{}{
@@ -126,6 +131,24 @@ var (
126131
"autonomous_database_backup_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_autonomous_database_backup.test_autonomous_database_backup.id}`},
127132
})
128133

134+
adbdAutonomousDatabaseRepresentationForPartialClone = acctest.RepresentationCopyWithNewProperties(
135+
acctest.GetUpdatedRepresentationCopy("db_name", acctest.Representation{RepType: acctest.Optional, Create: adbBackupIdName},
136+
acctest.RepresentationCopyWithRemovedProperties(autonomousDatabaseDedicatedRepresentation, []string{"in_memory_percentage", "display_name"})),
137+
map[string]interface{}{
138+
"display_name": acctest.Representation{RepType: acctest.Required, Create: adbDedicatedCloneName},
139+
"clone_type": acctest.Representation{RepType: acctest.Required, Create: `PARTIAL`},
140+
"clone_table_space_list": acctest.Representation{RepType: acctest.Optional, Create: []string{`1`, `2`, `3`}},
141+
"source": acctest.Representation{RepType: acctest.Required, Create: `BACKUP_FROM_ID`},
142+
"autonomous_database_backup_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_autonomous_database_backup.test_autonomous_database_backup.id}`},
143+
})
144+
exaccAutonomousDatabaseRepresentationForPartialClone = acctest.RepresentationCopyWithNewProperties(
145+
acctest.GetUpdatedRepresentationCopy("db_name", acctest.Representation{RepType: acctest.Required, Create: adbBackupIdName}, autonomousDatabaseExaccRepresentation),
146+
map[string]interface{}{
147+
"clone_type": acctest.Representation{RepType: acctest.Required, Create: `PARTIAL`},
148+
"clone_table_space_list": acctest.Representation{RepType: acctest.Optional, Create: []string{`1`, `2`, `3`}},
149+
"source": acctest.Representation{RepType: acctest.Required, Create: `BACKUP_FROM_ID`},
150+
"autonomous_database_backup_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_autonomous_database_backup.test_autonomous_database_backup.id}`},
151+
})
129152
autonomousDatabaseRepresentationForSourceFromBackupTimestamp = acctest.RepresentationCopyWithNewProperties(
130153
acctest.RepresentationCopyWithRemovedProperties(acctest.GetUpdatedRepresentationCopy("db_name", acctest.Representation{RepType: acctest.Required, Create: adbBackupTimestampName}, DatabaseAutonomousDatabaseRepresentation), []string{"kms_key_id", "vault_id"}),
131154
map[string]interface{}{
@@ -344,6 +367,22 @@ var (
344367

345368
ExaccADBDatabaseResourceDependencies = ExaccACDResourceConfig
346369

370+
ExaccAutonomousDatabaseResourceFromBackupDependencies = ExaccAutonomousDatabaseResourceFromBackupDependenciesWithoutBkp +
371+
acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database_backup", "test_autonomous_database_backup", acctest.Optional, acctest.Create,
372+
acctest.RepresentationCopyWithNewProperties(DatabaseExaccAutonomousDatabaseBackupRepresentationForLongTermBackup, map[string]interface{}{
373+
"lifecycle": acctest.RepresentationGroup{
374+
Group: map[string]interface{}{
375+
"prevent_destroy": acctest.Representation{
376+
Create: `false`},
377+
},
378+
},
379+
}))
380+
ExaccAutonomousDatabaseResourceFromBackupDependenciesWithoutBkp = ExaccACDResourceConfig +
381+
acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database", "test_autonomous_database", acctest.Optional, acctest.Create,
382+
acctest.RepresentationCopyWithNewProperties(autonomousDatabaseExaccRepresentation, map[string]interface{}{
383+
"db_name": acctest.Representation{RepType: acctest.Required, Create: adbBackupSourceName},
384+
}))
385+
347386
ExaccKeyResourceDependencyConfigDbaas = tfStaticCompartmentIdVariableStr + `
348387
data "oci_kms_keys" "test_keys_dependency" {
349388
#Required
@@ -1432,6 +1471,48 @@ func TestResourceDatabaseAutonomousDatabaseResource_dataSafeStatus(t *testing.T)
14321471
},
14331472
})
14341473
}
1474+
func TestAutonomousDatabaseDedicatedResourceCreateFromBackupAsPartialClone(t *testing.T) {
1475+
httpreplay.SetScenario("TestAutonomousDatabaseResourceCreateFromBackupAsPartialClone")
1476+
defer httpreplay.SaveScenario()
1477+
1478+
config := acctest.ProviderTestConfig()
1479+
1480+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
1481+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
1482+
1483+
resourceName := "oci_database_autonomous_database.test_autonomous_database_from_backupid"
1484+
1485+
acctest.ResourceTest(t, testAccCheckDatabaseAutonomousDatabaseDestroy, []resource.TestStep{
1486+
//0. Create dependencies
1487+
{
1488+
Config: config + compartmentIdVariableStr + AutonomousDatabaseFromBackupDependenciesPartialDedicated,
1489+
},
1490+
//1. verify create
1491+
{
1492+
Config: config + compartmentIdVariableStr + AutonomousDatabaseFromBackupDependenciesPartialDedicated +
1493+
acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database", "test_autonomous_database_from_backupid", acctest.Optional, acctest.Create, adbdAutonomousDatabaseRepresentationForPartialClone),
1494+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
1495+
resource.TestCheckResourceAttr(resourceName, "clone_type", "PARTIAL"),
1496+
resource.TestCheckResourceAttr(resourceName, "admin_password", "BEstrO0ng_#11"),
1497+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
1498+
//resource.TestCheckResourceAttr(resourceName, "cpu_core_count", "1"),
1499+
resource.TestCheckResourceAttr(resourceName, "clone_table_space_list.#", "3"),
1500+
resource.TestCheckResourceAttr(resourceName, "data_storage_size_in_tbs", "1"),
1501+
resource.TestCheckResourceAttrSet(resourceName, "db_name"),
1502+
resource.TestCheckResourceAttr(resourceName, "display_name", adbDedicatedCloneName),
1503+
1504+
func(s *terraform.State) (err error) {
1505+
resId, err := acctest.FromInstanceState(s, resourceName, "id")
1506+
sourceresId, err := acctest.FromInstanceState(s, "oci_database_autonomous_database.test_autonomous_database", "id")
1507+
if resId == sourceresId {
1508+
return fmt.Errorf("resource not created when it was supposed to be created")
1509+
}
1510+
return err
1511+
},
1512+
),
1513+
},
1514+
})
1515+
}
14351516

14361517
// issue-routing-tag: database/dbaas-adb
14371518
func TestResourceDatabaseAutonomousDatabaseResource_FromBackupId(t *testing.T) {
@@ -2508,6 +2589,61 @@ func TestResourceDatabaseExaccAutonomousDatabaseResource(t *testing.T) {
25082589
})
25092590
}
25102591

2592+
func TestAutonomousDatabaseExaccResourceCreateFromBackupAsPartialClone(t *testing.T) {
2593+
shouldSkipEXACCtest := utils.GetEnvSettingWithDefault("TF_VAR_should_skip_exacc_test", "false")
2594+
2595+
if shouldSkipEXACCtest == "true" {
2596+
t.Skip("Skipping TestAutonomousDatabaseExaccResourceCreateFromBackupAsPartialClone test.\n" + "Current TF_VAR_should_skip_exacc_test=" + shouldSkipEXACCtest)
2597+
}
2598+
2599+
httpreplay.SetScenario("TestAutonomousDatabaseExaccResourceCreateFromBackupAsPartialClone")
2600+
defer httpreplay.SaveScenario()
2601+
2602+
config := acctest.ProviderTestConfig()
2603+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
2604+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
2605+
2606+
resourceName := "oci_database_autonomous_database.autonomous_database_partial_clone"
2607+
2608+
var resId string
2609+
2610+
acctest.ResourceTest(t, testAccCheckDatabaseAutonomousDatabaseDestroy, []resource.TestStep{
2611+
// verify create partial clone
2612+
{
2613+
Config: config + compartmentIdVariableStr + ExaccAutonomousDatabaseResourceFromBackupDependencies +
2614+
acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database", "autonomous_database_partial_clone", acctest.Optional, acctest.Create, acctest.RepresentationCopyWithNewProperties(exaccAutonomousDatabaseRepresentationForPartialClone, map[string]interface{}{
2615+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: adbCloneExaccName},
2616+
})),
2617+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
2618+
resource.TestCheckResourceAttr(resourceName, "admin_password", "BEstrO0ng_#11"),
2619+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
2620+
resource.TestCheckResourceAttr(resourceName, "cpu_core_count", "1"),
2621+
resource.TestCheckResourceAttr(resourceName, "clone_table_space_list.#", "3"),
2622+
resource.TestCheckResourceAttr(resourceName, "data_storage_size_in_tbs", "1"),
2623+
resource.TestCheckResourceAttr(resourceName, "db_name", adbBackupIdName),
2624+
resource.TestCheckResourceAttrSet(resourceName, "db_version"),
2625+
resource.TestCheckResourceAttr(resourceName, "db_workload", "OLTP"),
2626+
resource.TestCheckResourceAttr(resourceName, "display_name", adbCloneExaccName),
2627+
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
2628+
resource.TestCheckResourceAttrSet(resourceName, "id"),
2629+
resource.TestCheckResourceAttr(resourceName, "is_auto_scaling_enabled", "false"),
2630+
resource.TestCheckResourceAttr(resourceName, "is_dedicated", "true"),
2631+
resource.TestCheckResourceAttrSet(resourceName, "state"),
2632+
resource.TestCheckResourceAttrSet(resourceName, "memory_per_oracle_compute_unit_in_gbs"),
2633+
func(s *terraform.State) (err error) {
2634+
resId, err = acctest.FromInstanceState(s, resourceName, "id")
2635+
if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "false")); isEnableExportCompartment {
2636+
if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil {
2637+
return errExport
2638+
}
2639+
}
2640+
return err
2641+
},
2642+
),
2643+
},
2644+
})
2645+
}
2646+
25112647
func ListAutonomousDatabasesWaitCondition(response oci_common.OCIOperationResponse) bool {
25122648
if listListAutonomousDatabasesResponse, ok := response.Response.(oci_database.ListAutonomousDatabasesResponse); ok {
25132649
if len(listListAutonomousDatabasesResponse.Items) > 0 {

internal/integrationtest/database_autonomous_vm_cluster_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,9 @@ var (
9191
}
9292

9393
DatabaseECPUAutonomousVmClusterRepresentation = acctest.RepresentationCopyWithNewProperties(DatabaseDevAutonomousVmClusterRepresentation, map[string]interface{}{
94-
"compute_model": acctest.Representation{RepType: acctest.Required, Create: `ECPU`},
95-
"display_name": acctest.Representation{RepType: acctest.Required, Create: `ecpuAutonomousVmCluster`},
94+
"compute_model": acctest.Representation{RepType: acctest.Required, Create: `ECPU`},
95+
"display_name": acctest.Representation{RepType: acctest.Required, Create: `ecpuAutonomousVmCluster`},
96+
"memory_per_oracle_compute_unit_in_gbs": acctest.Representation{RepType: acctest.Required, Create: `6`},
9697
})
9798

9899
DatabaseOCPUAutonomousVmClusterRepresentation = acctest.RepresentationCopyWithNewProperties(DatabaseAutonomousVmClusterRepresentation, map[string]interface{}{

0 commit comments

Comments
 (0)