Skip to content

Commit 84ad939

Browse files
Yue DengMaxrovr
authored andcommitted
Added - Support for Oracle 19C Database in Exadata Database Service on Exascale Infrastructure (ExaDB-XS)
1 parent bcc4a0f commit 84ad939

37 files changed

+847
-39
lines changed

examples/database/db_systems/db_exadbxs/datasources.tf

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ data "oci_identity_availability_domains" "test_availability_domains" {
77

88
locals {
99
ad = data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name
10+
# the list of supported shape_attributes of ExaDbXS
11+
exadbxs_shape_name = data.oci_database_db_system_shapes.exadbxs_shape.db_system_shapes.0.name
12+
exadbxs_shape_family_name = data.oci_database_db_system_shapes.exadbxs_shape.db_system_shapes.0.shape_family
13+
exadbxs_shape_attributes = data.oci_database_db_system_shapes.exadbxs_shape.db_system_shapes.0.shape_attributes
14+
shape_attribute = "BLOCK_STORAGE"
1015
}
1116

1217
data "oci_database_backups" "test_database_backups_by_exadbxs" {
@@ -18,7 +23,8 @@ data "oci_database_gi_versions" "test_gi_versions" {
1823
#Required
1924
compartment_id = var.compartment_ocid
2025
#Optional
21-
shape = "ExaDbXS"
26+
shape = local.exadbxs_shape_name
27+
shape_attribute = local.shape_attribute
2228
availability_domain = local.ad
2329
}
2430

@@ -28,8 +34,29 @@ data "oci_database_gi_version_minor_versions" "test_gi_minor_versions" {
2834
#Optional
2935
compartment_id = data.oci_database_gi_versions.test_gi_versions.compartment_id
3036
availability_domain = data.oci_database_gi_versions.test_gi_versions.availability_domain
31-
shape_family = "EXADB_XS"
32-
shape = data.oci_database_gi_versions.test_gi_versions.shape
37+
shape_family = local.exadbxs_shape_family_name
38+
shape = local.exadbxs_shape_name
3339
is_gi_version_for_provisioning = false
3440
}
3541

42+
data "oci_database_db_system_shapes" "exadbxs_shape" {
43+
#Required
44+
compartment_id = var.compartment_ocid
45+
46+
#Optional
47+
availability_domain = local.ad
48+
shape_attribute = local.shape_attribute
49+
filter {
50+
name = "shape"
51+
values = ["ExaDbXS"]
52+
}
53+
}
54+
55+
data "oci_database_db_versions" "test_db_versions" {
56+
#Required
57+
compartment_id = var.compartment_ocid
58+
59+
#Optional
60+
db_system_shape = local.exadbxs_shape_name
61+
shape_attribute = local.shape_attribute
62+
}

examples/database/db_systems/db_exadbxs/exadb_vm_cluster.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ resource "oci_database_exadb_vm_cluster" "test_exadb_vm_cluster" {
1616
subnet_id = oci_core_subnet.exadbxs_client_subnet.id
1717
subscription_id = var.subscription_id
1818
backup_subnet_id = oci_core_subnet.exadbxs_backup_subnet.id
19+
shape_attribute = local.shape_attribute
1920

2021
node_config {
2122
enabled_ecpu_count_per_node = "8"

examples/database/db_systems/db_exadbxs/exadb_vm_cluster_database.tf

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@
44
resource "oci_database_db_home" "test_db_home" {
55
display_name = "ExampleExaDbVmDbHome"
66
db_system_id = oci_database_exadb_vm_cluster.test_exadb_vm_cluster.id
7-
db_version = data.oci_database_gi_version_minor_versions.test_gi_minor_versions.gi_minor_versions[0].version
7+
db_version = data.oci_database_db_versions.test_db_versions.db_versions[0].version
88
}
99

1010
resource "oci_database_database" "test_db1" {
1111
database {
1212
admin_password = var.test_db_password
1313
db_name = "TFDB1"
14+
storage_size_details {
15+
data_storage_size_in_gb = 60
16+
reco_storage_size_in_gbs = 40
17+
}
1418
}
1519
db_home_id = oci_database_db_home.test_db_home.id
1620
source = "NONE"
@@ -80,4 +84,23 @@ data "oci_database_pluggable_databases" "test_pdbs" {
8084

8185
data "oci_database_pluggable_database" "test_db1_local_cloned_pdb" {
8286
pluggable_database_id = oci_database_pluggable_database.test_db1_local_cloned_pdb.id
87+
}
88+
89+
data "oci_database_db_homes" "test_db_homes" {
90+
compartment_id = var.compartment_ocid
91+
vm_cluster_id = oci_database_exadb_vm_cluster.test_exadb_vm_cluster.id
92+
state = "AVAILABLE"
93+
}
94+
95+
data "oci_database_db_home" "test_db_home" {
96+
db_home_id = oci_database_db_home.test_db_home.id
97+
}
98+
99+
data "oci_database_databases" "test_databases" {
100+
compartment_id = var.compartment_ocid
101+
db_home_id = oci_database_db_home.test_db_home.id
102+
}
103+
104+
data "oci_database_database" "test_db1" {
105+
database_id = oci_database_database.test_db1.id
83106
}

examples/database/db_systems/db_exadbxs/exascale_db_storage_vault.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ resource "oci_database_exascale_db_storage_vault" "test_exascale_db_storage_vaul
1717
data "oci_database_exascale_db_storage_vaults" "test_exascale_db_storage_vaults" {
1818
#Required
1919
compartment_id = var.compartment_ocid
20+
#Optional
21+
attached_shape_attributes = local.shape_attribute
2022
}
2123

2224
data "oci_database_exascale_db_storage_vault" "test_exascale_db_storage_vault" {

internal/integrationtest/database_database_test.go

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,40 @@ var (
320320
"sid_prefix": acctest.Representation{RepType: acctest.Optional, Create: `myTestDb`},
321321
}
322322

323+
ExaDbXs19cDatabaseRepresentation = map[string]interface{}{
324+
"database": acctest.RepresentationGroup{RepType: acctest.Required, Group: ExaDbXs19cDatabaseDatabaseRepresentation},
325+
"db_home_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_db_home.test_db_home.id}`},
326+
"source": acctest.Representation{RepType: acctest.Required, Create: `NONE`},
327+
"lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: databaseIgnoreDefinedTagsRepresentation},
328+
}
329+
330+
ExaDbXs19cDatabaseDatabaseRepresentation = map[string]interface{}{
331+
"admin_password": acctest.Representation{RepType: acctest.Required, Create: `BEstrO0ng_#11`},
332+
"db_name": acctest.Representation{RepType: acctest.Required, Create: `XS19C`},
333+
"storage_size_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: DatabaseDatabaseDatabaseStorageSizeDetailsRepresentation},
334+
}
335+
336+
DatabaseDatabaseDatabaseStorageSizeDetailsRepresentation = map[string]interface{}{
337+
"data_storage_size_in_gb": acctest.Representation{RepType: acctest.Required, Create: `60`, Update: `100`},
338+
"reco_storage_size_in_gbs": acctest.Representation{RepType: acctest.Required, Create: `40`, Update: `50`},
339+
}
340+
341+
ExaDbXs19cDbHomeRepresentationSourceNone = map[string]interface{}{
342+
"db_system_id": acctest.Representation{RepType: acctest.Required, Create: `${var.exadb_vm_cluster_id}`},
343+
"db_version": acctest.Representation{RepType: acctest.Required, Create: `19.0.0.0`},
344+
"source": acctest.Representation{RepType: acctest.Optional, Create: `NONE`},
345+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `DbHome19c`},
346+
}
347+
348+
ExaDbXs19cDatabaseRepresentationDependencies = acctest.GenerateResourceFromRepresentationMap("oci_database_db_home", "test_db_home", acctest.Optional, acctest.Create, ExaDbXs19cDbHomeRepresentationSourceNone) +
349+
`
350+
variable exadb_vm_cluster_id {}
351+
352+
data "oci_database_exadb_vm_cluster" "test_exadb_vm_cluster" {
353+
exadb_vm_cluster_id = var.exadb_vm_cluster_id
354+
}
355+
`
356+
323357
DatabaseExacsDatabaseRepresentation = map[string]interface{}{
324358
"database": acctest.RepresentationGroup{RepType: acctest.Required, Group: databaseDatabaseRepresentation},
325359
"db_home_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_db_home.test_db_home_vm_cluster_no_db.id}`},
@@ -902,6 +936,116 @@ func TestDatabaseDatabaseResource_basic(t *testing.T) {
902936
})
903937
}
904938

939+
// issue-routing-tag: database/default
940+
func TestDatabaseDatabaseResource_exadbxs_block_storage(t *testing.T) {
941+
httpreplay.SetScenario("TestDatabaseDatabaseResource_exadbxs_block_storage")
942+
defer httpreplay.SaveScenario()
943+
944+
config := acctest.ProviderTestConfig()
945+
946+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
947+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
948+
949+
resourceName := "oci_database_database.test_database"
950+
datasourceName := "data.oci_database_databases.test_databases"
951+
singularDatasourceName := "data.oci_database_database.test_database"
952+
953+
// Save TF content to create resource with optional properties. This has to be exactly the same as the config part in the "create with optionals" step in the test.
954+
acctest.SaveConfigContent(config+compartmentIdVariableStr+ExaDbXs19cDatabaseRepresentationDependencies+
955+
acctest.GenerateResourceFromRepresentationMap("oci_database_database", "test_database", acctest.Optional, acctest.Create, ExaDbXs19cDatabaseRepresentation), "database", "database", t)
956+
957+
acctest.ResourceTest(t, testAccCheckDatabaseDatabaseDestroy, []resource.TestStep{
958+
959+
// verify create a 19c DB
960+
{
961+
Config: config + compartmentIdVariableStr + ExaDbXs19cDatabaseRepresentationDependencies +
962+
acctest.GenerateResourceFromRepresentationMap("oci_database_database", "test_database", acctest.Optional, acctest.Create, ExaDbXs19cDatabaseRepresentation),
963+
964+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
965+
resource.TestCheckResourceAttrSet(resourceName, "compartment_id"),
966+
resource.TestCheckResourceAttr(resourceName, "database.#", "1"),
967+
resource.TestCheckResourceAttr(resourceName, "database.0.admin_password", "BEstrO0ng_#11"),
968+
resource.TestCheckResourceAttr(resourceName, "database.0.db_name", "XS19C"),
969+
resource.TestCheckResourceAttr(resourceName, "database.0.storage_size_details.#", "1"),
970+
resource.TestCheckResourceAttr(resourceName, "database.0.storage_size_details.0.data_storage_size_in_gb", "60"),
971+
resource.TestCheckResourceAttr(resourceName, "database.0.storage_size_details.0.reco_storage_size_in_gbs", "40"),
972+
resource.TestCheckResourceAttrSet(resourceName, "db_home_id"),
973+
resource.TestCheckResourceAttrSet(resourceName, "db_name"),
974+
// resource.TestCheckResourceAttr(resourceName, "db_version", "19.0.0.0"), // minor version could be different from the input
975+
resource.TestCheckResourceAttrSet(resourceName, "id"),
976+
resource.TestCheckResourceAttr(resourceName, "source", "NONE"),
977+
resource.TestCheckResourceAttrSet(resourceName, "state"),
978+
),
979+
},
980+
981+
// verify updates storage details
982+
{
983+
Config: config + compartmentIdVariableStr + ExaDbXs19cDatabaseRepresentationDependencies +
984+
acctest.GenerateResourceFromRepresentationMap("oci_database_database", "test_database", acctest.Optional, acctest.Update, ExaDbXs19cDatabaseRepresentation),
985+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
986+
resource.TestCheckResourceAttrSet(resourceName, "compartment_id"),
987+
resource.TestCheckResourceAttr(resourceName, "database.#", "1"),
988+
resource.TestCheckResourceAttr(resourceName, "database.0.admin_password", "BEstrO0ng_#11"),
989+
resource.TestCheckResourceAttr(resourceName, "database.0.db_name", "XS19C"),
990+
resource.TestCheckResourceAttr(resourceName, "database.0.storage_size_details.#", "1"),
991+
resource.TestCheckResourceAttr(resourceName, "database.0.storage_size_details.0.data_storage_size_in_gb", "100"),
992+
resource.TestCheckResourceAttr(resourceName, "database.0.storage_size_details.0.reco_storage_size_in_gbs", "50"),
993+
resource.TestCheckResourceAttrSet(resourceName, "db_home_id"),
994+
resource.TestCheckResourceAttrSet(resourceName, "db_name"),
995+
resource.TestCheckResourceAttrSet(resourceName, "id"),
996+
resource.TestCheckResourceAttr(resourceName, "source", "NONE"),
997+
resource.TestCheckResourceAttrSet(resourceName, "state"),
998+
),
999+
},
1000+
// verify datasource
1001+
{
1002+
Config: config + compartmentIdVariableStr + ExaDbXs19cDatabaseRepresentationDependencies +
1003+
acctest.GenerateResourceFromRepresentationMap("oci_database_database", "test_database", acctest.Optional, acctest.Update, ExaDbXs19cDatabaseRepresentation) +
1004+
acctest.GenerateDataSourceFromRepresentationMap("oci_database_databases", "test_databases", acctest.Optional, acctest.Update,
1005+
acctest.RepresentationCopyWithNewProperties(DatabaseDatabaseDatabaseDataSourceRepresentation, map[string]interface{}{
1006+
"db_name": acctest.Representation{RepType: acctest.Optional, Create: `XS19C`},
1007+
})),
1008+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
1009+
resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId),
1010+
resource.TestCheckResourceAttrSet(datasourceName, "db_home_id"),
1011+
resource.TestCheckResourceAttr(datasourceName, "db_name", "XS19C"),
1012+
resource.TestCheckResourceAttr(datasourceName, "state", "AVAILABLE"),
1013+
1014+
resource.TestCheckResourceAttrSet(datasourceName, "databases.0.compartment_id"),
1015+
resource.TestCheckResourceAttrSet(datasourceName, "databases.0.db_home_id"),
1016+
resource.TestCheckResourceAttrSet(datasourceName, "databases.0.db_name"),
1017+
resource.TestCheckResourceAttrSet(datasourceName, "databases.0.vm_cluster_id"),
1018+
resource.TestCheckResourceAttrSet(datasourceName, "databases.0.id"),
1019+
resource.TestCheckResourceAttrSet(datasourceName, "databases.0.state"),
1020+
resource.TestCheckResourceAttr(datasourceName, "databases.0.storage_size_details.#", "1"),
1021+
resource.TestCheckResourceAttr(datasourceName, "databases.0.storage_size_details.0.data_storage_size_in_gb", "100"),
1022+
resource.TestCheckResourceAttr(datasourceName, "databases.0.storage_size_details.0.reco_storage_size_in_gbs", "50"),
1023+
resource.TestCheckResourceAttrSet(datasourceName, "databases.0.time_created"),
1024+
),
1025+
},
1026+
// verify singular datasource
1027+
{
1028+
Config: config + compartmentIdVariableStr + ExaDbXs19cDatabaseRepresentationDependencies +
1029+
acctest.GenerateResourceFromRepresentationMap("oci_database_database", "test_database", acctest.Optional, acctest.Update, ExaDbXs19cDatabaseRepresentation) +
1030+
acctest.GenerateDataSourceFromRepresentationMap("oci_database_database", "test_database", acctest.Required, acctest.Create, DatabaseDatabaseDatabaseSingularDataSourceRepresentation),
1031+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
1032+
resource.TestCheckResourceAttrSet(singularDatasourceName, "database_id"),
1033+
1034+
resource.TestCheckResourceAttrSet(singularDatasourceName, "compartment_id"),
1035+
resource.TestCheckResourceAttrSet(singularDatasourceName, "db_home_id"),
1036+
resource.TestCheckResourceAttr(singularDatasourceName, "db_name", "XS19C"),
1037+
resource.TestCheckResourceAttrSet(singularDatasourceName, "vm_cluster_id"),
1038+
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
1039+
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),
1040+
resource.TestCheckResourceAttr(singularDatasourceName, "storage_size_details.#", "1"),
1041+
resource.TestCheckResourceAttr(singularDatasourceName, "storage_size_details.0.data_storage_size_in_gb", "100"),
1042+
resource.TestCheckResourceAttr(singularDatasourceName, "storage_size_details.0.reco_storage_size_in_gbs", "50"),
1043+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),
1044+
),
1045+
},
1046+
})
1047+
}
1048+
9051049
func TestDatabaseDatabaseResource_update(t *testing.T) {
9061050
httpreplay.SetScenario("TestDatabaseDatabaseResource_update")
9071051
defer httpreplay.SaveScenario()

0 commit comments

Comments
 (0)