Skip to content

Commit 5582444

Browse files
Terraform Team AutomationNagaRajuPasunuri
authored andcommitted
Bug Fix - Autonomous Database change DbTools from list to set.
1 parent b5eb9df commit 5582444

File tree

5 files changed

+207
-18
lines changed

5 files changed

+207
-18
lines changed

examples/database/adb/autonomous_data_warehouse_wallet.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
resource "random_string" "autonomous_data_warehouse_wallet_password" {
55
length = 16
66
special = true
7+
min_numeric = 1
8+
min_lower = 1
9+
min_upper = 1
10+
min_special = 1
711
}
812

913
resource "oci_database_autonomous_database_wallet" "autonomous_data_warehouse_wallet" {

examples/database/adb/autonomous_database_wallet.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
resource "random_string" "autonomous_database_wallet_password" {
55
length = 16
66
special = true
7+
min_numeric = 1
8+
min_lower = 1
9+
min_upper = 1
10+
min_special = 1
711
}
812

913
resource "oci_database_autonomous_database_wallet" "autonomous_database_wallet" {

internal/integrationtest/database_autonomous_database_resource_test.go

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4744,3 +4744,137 @@ func TestDatabaseAutonomousDatabaseResource_scheduledOperations(t *testing.T) {
47444744
},
47454745
})
47464746
}
4747+
4748+
func TestDatabaseAutonomousDatabaseResource_dbTools(t *testing.T) {
4749+
httpreplay.SetScenario("TestDatabaseAutonomousDatabaseResource_scheduledOperations")
4750+
defer httpreplay.SaveScenario()
4751+
4752+
config := acctest.ProviderTestConfig()
4753+
4754+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
4755+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
4756+
4757+
okvSecret = utils.GetEnvSettingWithBlankDefault("okv_secret")
4758+
OkvSecretVariableStr = fmt.Sprintf("variable \"okv_secret\" { default = \"%s\" }\n", okvSecret)
4759+
4760+
resourceName := "oci_database_autonomous_database.test_autonomous_database"
4761+
// 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.
4762+
acctest.SaveConfigContent(config+compartmentIdVariableStr+DatabaseAutonomousDatabaseResourceDependencies+
4763+
acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database", "test_autonomous_database", acctest.Optional, acctest.Create, DatabaseAutonomousDatabaseRepresentation), "database", "autonomousDatabase", t)
4764+
4765+
acctest.ResourceTest(t, testAccCheckDatabaseAutonomousDatabaseDestroy, []resource.TestStep{
4766+
//0. Verify Create
4767+
{
4768+
Config: config + compartmentIdVariableStr + DatabaseAutonomousDatabaseResourceDependencies +
4769+
acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database", "test_autonomous_database", acctest.Optional, acctest.Create, DatabaseAutonomousDatabaseRepresentationDbTools),
4770+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
4771+
resource.TestCheckResourceAttr(resourceName, "admin_password", "BEstrO0ng_#11"),
4772+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
4773+
resource.TestCheckResourceAttr(resourceName, "db_name", adbName),
4774+
// verify computed field db_workload to be defaulted to OLTP
4775+
resource.TestCheckResourceAttr(resourceName, "db_workload", "OLTP"),
4776+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4777+
"name": "APEX",
4778+
"is_enabled": "true",
4779+
}, nil),
4780+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4781+
"name": "DATA_TRANSFORMS",
4782+
"is_enabled": "true",
4783+
"compute_count": "2",
4784+
"max_idle_time_in_minutes": "10",
4785+
}, nil),
4786+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4787+
"name": "DATABASE_ACTIONS",
4788+
"is_enabled": "false",
4789+
}, nil),
4790+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4791+
"name": "GRAPH_STUDIO",
4792+
"is_enabled": "true",
4793+
"compute_count": "2",
4794+
"max_idle_time_in_minutes": "240",
4795+
}, nil),
4796+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4797+
"name": "MONGODB_API",
4798+
"is_enabled": "false",
4799+
}, nil),
4800+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4801+
"name": "OML",
4802+
"is_enabled": "true",
4803+
"compute_count": "2",
4804+
"max_idle_time_in_minutes": "60",
4805+
}, nil),
4806+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4807+
"name": "ORDS",
4808+
"is_enabled": "true",
4809+
}, nil),
4810+
4811+
func(s *terraform.State) (err error) {
4812+
_, err = acctest.FromInstanceState(s, resourceName, "id")
4813+
return err
4814+
},
4815+
),
4816+
},
4817+
//test to verify if the plan fails.
4818+
{
4819+
Config: config + compartmentIdVariableStr + DatabaseAutonomousDatabaseResourceDependencies +
4820+
acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database", "test_autonomous_database", acctest.Optional, acctest.Create,
4821+
acctest.RepresentationCopyWithNewProperties(acctest.RepresentationCopyWithRemovedProperties(DatabaseAutonomousDatabaseRepresentationDbTools, []string{"scheduled_operations"}),
4822+
map[string]interface{}{
4823+
"db_tools_details": []acctest.RepresentationGroup{
4824+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationApex},
4825+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationEcpuGraphStudio},
4826+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationMongodbApi},
4827+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationEcpuOml},
4828+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationEcpuDataTransform},
4829+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationDatabaseActions},
4830+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationOrds}},
4831+
})),
4832+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
4833+
resource.TestCheckResourceAttr(resourceName, "admin_password", "BEstrO0ng_#11"),
4834+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
4835+
resource.TestCheckResourceAttr(resourceName, "db_name", adbName),
4836+
// verify computed field db_workload to be defaulted to OLTP
4837+
resource.TestCheckResourceAttr(resourceName, "db_workload", "OLTP"),
4838+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4839+
"name": "APEX",
4840+
"is_enabled": "true",
4841+
}, nil),
4842+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4843+
"name": "DATA_TRANSFORMS",
4844+
"is_enabled": "true",
4845+
"compute_count": "2",
4846+
"max_idle_time_in_minutes": "10",
4847+
}, nil),
4848+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4849+
"name": "DATABASE_ACTIONS",
4850+
"is_enabled": "false",
4851+
}, nil),
4852+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4853+
"name": "GRAPH_STUDIO",
4854+
"is_enabled": "true",
4855+
"compute_count": "2",
4856+
"max_idle_time_in_minutes": "240",
4857+
}, nil),
4858+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4859+
"name": "MONGODB_API",
4860+
"is_enabled": "false",
4861+
}, nil),
4862+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4863+
"name": "OML",
4864+
"is_enabled": "true",
4865+
"compute_count": "2",
4866+
"max_idle_time_in_minutes": "60",
4867+
}, nil),
4868+
acctest.CheckResourceSetContainsElementWithProperties(resourceName, "db_tools_details", map[string]string{
4869+
"name": "ORDS",
4870+
"is_enabled": "true",
4871+
}, nil),
4872+
4873+
func(s *terraform.State) (err error) {
4874+
_, err = acctest.FromInstanceState(s, resourceName, "id")
4875+
return err
4876+
},
4877+
),
4878+
},
4879+
})
4880+
}

internal/integrationtest/database_autonomous_database_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,26 @@ var (
299299
"db_workload": acctest.Representation{RepType: acctest.Optional, Create: `OLTP`},
300300
"state": acctest.Representation{RepType: acctest.Optional, Create: `AVAILABLE`},
301301
}
302+
303+
DatabaseAutonomousDatabaseRepresentationDbTools = map[string]interface{}{
304+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
305+
"compute_count": acctest.Representation{RepType: acctest.Required, Create: `4`},
306+
"data_storage_size_in_gb": acctest.Representation{RepType: acctest.Required, Create: `20`},
307+
"compute_model": acctest.Representation{RepType: acctest.Required, Create: `ECPU`},
308+
"db_name": acctest.Representation{RepType: acctest.Required, Create: adbName},
309+
"admin_password": acctest.Representation{RepType: acctest.Required, Create: `BEstrO0ng_#11`},
310+
"db_version": acctest.Representation{RepType: acctest.Optional, Create: `${data.oci_database_autonomous_db_versions.test_autonomous_db_versions.autonomous_db_versions.0.version}`},
311+
"db_workload": acctest.Representation{RepType: acctest.Optional, Create: `OLTP`},
312+
"state": acctest.Representation{RepType: acctest.Optional, Create: `AVAILABLE`},
313+
"db_tools_details": []acctest.RepresentationGroup{
314+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationApex},
315+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationEcpuDataTransform},
316+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationDatabaseActions},
317+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationEcpuGraphStudio},
318+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationMongodbApi},
319+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationEcpuOml},
320+
{RepType: acctest.Optional, Group: DatabaseAutonomousDatabaseDbToolsDetailsRepresentationOrds}},
321+
}
302322
autonomousDatabaseRepresentationForDevTier = acctest.RepresentationCopyWithNewProperties(DatabaseAutonomousDatabaseRepresentationDeveloper, map[string]interface{}{
303323
"is_dev_tier": acctest.Representation{RepType: acctest.Optional, Create: `true`, Update: `false`},
304324
})

internal/service/database/database_autonomous_database_resource.go

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,8 @@ func DatabaseAutonomousDatabaseResource() *schema.Resource {
181181
Computed: true,
182182
},
183183
"db_tools_details": {
184-
Type: schema.TypeList,
184+
Type: schema.TypeSet,
185+
Set: dbToolsForSets,
185186
Optional: true,
186187
Computed: true,
187188
Elem: &schema.Resource{
@@ -1874,10 +1875,11 @@ func (s *DatabaseAutonomousDatabaseResourceCrud) Update() error {
18741875
}
18751876

18761877
if dbToolsDetails, ok := s.D.GetOkExists("db_tools_details"); ok && s.D.HasChange("db_tools_details") {
1877-
interfaces := dbToolsDetails.([]interface{})
1878+
set := dbToolsDetails.(*schema.Set)
1879+
interfaces := set.List()
18781880
tmp := make([]oci_database.DatabaseTool, len(interfaces))
18791881
for i := range interfaces {
1880-
stateDataIndex := i
1882+
stateDataIndex := dbToolsForSets(interfaces[i])
18811883
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "db_tools_details", stateDataIndex)
18821884
converted, err := s.mapToDatabaseTool(fieldKeyFormat)
18831885
if err != nil {
@@ -2113,7 +2115,7 @@ func (s *DatabaseAutonomousDatabaseResourceCrud) SetData() error {
21132115
for _, item := range s.Res.DbToolsDetails {
21142116
dbToolsDetails = append(dbToolsDetails, DatabaseToolToMap(item))
21152117
}
2116-
s.D.Set("db_tools_details", dbToolsDetails)
2118+
s.D.Set("db_tools_details", schema.NewSet(dbToolsForSets, dbToolsDetails))
21172119

21182120
if s.Res.DbVersion != nil {
21192121
s.D.Set("db_version", *s.Res.DbVersion)
@@ -2946,10 +2948,11 @@ func (s *DatabaseAutonomousDatabaseResourceCrud) populateTopLevelPolymorphicCrea
29462948
details.DbName = &tmp
29472949
}
29482950
if dbToolsDetails, ok := s.D.GetOkExists("db_tools_details"); ok {
2949-
interfaces := dbToolsDetails.([]interface{})
2951+
set := dbToolsDetails.(*schema.Set)
2952+
interfaces := set.List()
29502953
tmp := make([]oci_database.DatabaseTool, len(interfaces))
29512954
for i := range interfaces {
2952-
stateDataIndex := i
2955+
stateDataIndex := dbToolsForSets(interfaces[i])
29532956
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "db_tools_details", stateDataIndex)
29542957
converted, err := s.mapToDatabaseTool(fieldKeyFormat)
29552958
if err != nil {
@@ -3233,10 +3236,11 @@ func (s *DatabaseAutonomousDatabaseResourceCrud) populateTopLevelPolymorphicCrea
32333236
details.DbName = &tmp
32343237
}
32353238
if dbToolsDetails, ok := s.D.GetOkExists("db_tools_details"); ok {
3236-
interfaces := dbToolsDetails.([]interface{})
3239+
set := dbToolsDetails.(*schema.Set)
3240+
interfaces := set.List()
32373241
tmp := make([]oci_database.DatabaseTool, len(interfaces))
32383242
for i := range interfaces {
3239-
stateDataIndex := i
3243+
stateDataIndex := dbToolsForSets(interfaces[i])
32403244
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "db_tools_details", stateDataIndex)
32413245
converted, err := s.mapToDatabaseTool(fieldKeyFormat)
32423246
if err != nil {
@@ -3515,10 +3519,11 @@ func (s *DatabaseAutonomousDatabaseResourceCrud) populateTopLevelPolymorphicCrea
35153519
details.DbName = &tmp
35163520
}
35173521
if dbToolsDetails, ok := s.D.GetOkExists("db_tools_details"); ok {
3518-
interfaces := dbToolsDetails.([]interface{})
3522+
set := dbToolsDetails.(*schema.Set)
3523+
interfaces := set.List()
35193524
tmp := make([]oci_database.DatabaseTool, len(interfaces))
35203525
for i := range interfaces {
3521-
stateDataIndex := i
3526+
stateDataIndex := dbToolsForSets(interfaces[i])
35223527
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "db_tools_details", stateDataIndex)
35233528
converted, err := s.mapToDatabaseTool(fieldKeyFormat)
35243529
if err != nil {
@@ -3789,10 +3794,11 @@ func (s *DatabaseAutonomousDatabaseResourceCrud) populateTopLevelPolymorphicCrea
37893794
details.DbName = &tmp
37903795
}
37913796
if dbToolsDetails, ok := s.D.GetOkExists("db_tools_details"); ok {
3792-
interfaces := dbToolsDetails.([]interface{})
3797+
set := dbToolsDetails.(*schema.Set)
3798+
interfaces := set.List()
37933799
tmp := make([]oci_database.DatabaseTool, len(interfaces))
37943800
for i := range interfaces {
3795-
stateDataIndex := i
3801+
stateDataIndex := dbToolsForSets(interfaces[i])
37963802
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "db_tools_details", stateDataIndex)
37973803
converted, err := s.mapToDatabaseTool(fieldKeyFormat)
37983804
if err != nil {
@@ -4051,10 +4057,11 @@ func (s *DatabaseAutonomousDatabaseResourceCrud) populateTopLevelPolymorphicCrea
40514057
details.DbName = &tmp
40524058
}
40534059
if dbToolsDetails, ok := s.D.GetOkExists("db_tools_details"); ok {
4054-
interfaces := dbToolsDetails.([]interface{})
4060+
set := dbToolsDetails.(*schema.Set)
4061+
interfaces := set.List()
40554062
tmp := make([]oci_database.DatabaseTool, len(interfaces))
40564063
for i := range interfaces {
4057-
stateDataIndex := i
4064+
stateDataIndex := dbToolsForSets(interfaces[i])
40584065
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "db_tools_details", stateDataIndex)
40594066
converted, err := s.mapToDatabaseTool(fieldKeyFormat)
40604067
if err != nil {
@@ -4562,10 +4569,11 @@ func (s *DatabaseAutonomousDatabaseResourceCrud) populateTopLevelPolymorphicCrea
45624569
details.DbName = &tmp
45634570
}
45644571
if dbToolsDetails, ok := s.D.GetOkExists("db_tools_details"); ok {
4565-
interfaces := dbToolsDetails.([]interface{})
4572+
set := dbToolsDetails.(*schema.Set)
4573+
interfaces := set.List()
45664574
tmp := make([]oci_database.DatabaseTool, len(interfaces))
45674575
for i := range interfaces {
4568-
stateDataIndex := i
4576+
stateDataIndex := dbToolsForSets(interfaces[i])
45694577
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "db_tools_details", stateDataIndex)
45704578
converted, err := s.mapToDatabaseTool(fieldKeyFormat)
45714579
if err != nil {
@@ -4831,10 +4839,11 @@ func (s *DatabaseAutonomousDatabaseResourceCrud) populateTopLevelPolymorphicCrea
48314839
details.DbName = &tmp
48324840
}
48334841
if dbToolsDetails, ok := s.D.GetOkExists("db_tools_details"); ok {
4834-
interfaces := dbToolsDetails.([]interface{})
4842+
set := dbToolsDetails.(*schema.Set)
4843+
interfaces := set.List()
48354844
tmp := make([]oci_database.DatabaseTool, len(interfaces))
48364845
for i := range interfaces {
4837-
stateDataIndex := i
4846+
stateDataIndex := dbToolsForSets(interfaces[i])
48384847
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "db_tools_details", stateDataIndex)
48394848
converted, err := s.mapToDatabaseTool(fieldKeyFormat)
48404849
if err != nil {
@@ -5579,3 +5588,21 @@ func scheduledOperationsForSets(v interface{}) int {
55795588
}
55805589
return utils.GetStringHashcode(buf.String())
55815590
}
5591+
5592+
func dbToolsForSets(v interface{}) int {
5593+
var buf bytes.Buffer
5594+
m := v.(map[string]interface{})
5595+
if name, ok := m["name"]; ok && name != "" {
5596+
buf.WriteString(fmt.Sprintf("%v-", name))
5597+
}
5598+
if computeCount, ok := m["compute_count"]; ok && computeCount != "" {
5599+
buf.WriteString(fmt.Sprintf("%v-", computeCount))
5600+
}
5601+
if isEnabled, ok := m["is_enabled"]; ok && isEnabled != "" {
5602+
buf.WriteString(fmt.Sprintf("%v-", isEnabled))
5603+
}
5604+
if maxIdleTimeInMinutes, ok := m["max_idle_time_in_minutes"]; ok && maxIdleTimeInMinutes != "" {
5605+
buf.WriteString(fmt.Sprintf("%v-", maxIdleTimeInMinutes))
5606+
}
5607+
return utils.GetStringHashcode(buf.String())
5608+
}

0 commit comments

Comments
 (0)