Skip to content

Commit 3948eba

Browse files
Veeranjaneyulu Golivarmax2511
authored andcommitted
Support for cloud databases in Database Management
1 parent 180cf2c commit 3948eba

File tree

29 files changed

+1936
-11
lines changed

29 files changed

+1936
-11
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Support change compartment using lifecycle state
55
- Support retry for Eventually consistency failure
66
- Support for Count API added to `os_management` resource
7+
- Support for cloud databases in Database Management
78

89
## 4.42.0 (September 01, 2021)
910

examples/databasemanagement/main.tf

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,18 @@ variable "managed_databases_database_parameter_source" {
6464
default = "CURRENT"
6565
}
6666

67+
variable "db_management_private_endpoint_name" {
68+
default = "TestPrivateEndpoint"
69+
}
70+
71+
variable "db_management_private_endpoint_description" {
72+
default = "Test private endpoint"
73+
}
74+
75+
variable "db_management_private_endpoint_state" {
76+
default = "ACTIVE"
77+
}
78+
6779
provider "oci" {
6880
tenancy_ocid = var.tenancy_ocid
6981
user_ocid = var.user_ocid
@@ -145,4 +157,55 @@ data "oci_database_management_managed_databases_database_parameter" "test_manage
145157
is_allowed_values_included = var.managed_databases_database_parameter_is_allowed_values_included
146158
name = var.managed_databases_database_parameter_parameters_name
147159
source = var.managed_databases_database_parameter_source
160+
}
161+
162+
resource "oci_core_vcn" "test_vcn" {
163+
cidr_block = "10.0.0.0/16"
164+
compartment_id = var.compartment_id
165+
display_name = "exampleVCN"
166+
dns_label = "tfexamplevcn"
167+
}
168+
169+
resource "oci_core_subnet" "test_subnet" {
170+
cidr_block = "10.0.0.0/24"
171+
display_name = "regionalSubnet"
172+
dns_label = "regionalsubnet"
173+
compartment_id = var.compartment_id
174+
vcn_id = oci_core_vcn.test_vcn.id
175+
}
176+
177+
resource "oci_core_network_security_group" "test_network_security_group" {
178+
#Required
179+
compartment_id = var.compartment_id
180+
vcn_id = oci_core_vcn.test_vcn.id
181+
}
182+
183+
resource "oci_database_management_db_management_private_endpoint" "test_db_management_private_endpoint" {
184+
#Required
185+
compartment_id = var.compartment_id
186+
name = var.db_management_private_endpoint_name
187+
subnet_id = oci_core_subnet.test_subnet.id
188+
189+
#Optional
190+
description = var.db_management_private_endpoint_description
191+
nsg_ids = [oci_core_network_security_group.test_network_security_group.id]
192+
}
193+
194+
data "oci_database_management_db_management_private_endpoint" "test_db_management_private_endpoint" {
195+
db_management_private_endpoint_id = oci_database_management_db_management_private_endpoint.test_db_management_private_endpoint.id
196+
}
197+
198+
data "oci_database_management_db_management_private_endpoints" "test_db_management_private_endpoints" {
199+
#Required
200+
compartment_id = var.compartment_id
201+
}
202+
203+
data "oci_database_management_db_management_private_endpoints" "test_db_management_private_endpoints_with_name" {
204+
#Required
205+
compartment_id = var.compartment_id
206+
207+
#Optional
208+
name = var.db_management_private_endpoint_name
209+
vcn_id = oci_core_vcn.test_vcn.id
210+
state = var.db_management_private_endpoint_state
148211
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package oci
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
oci_database_management "github.com/oracle/oci-go-sdk/v46/databasemanagement"
11+
)
12+
13+
func init() {
14+
RegisterDatasource("oci_database_management_db_management_private_endpoint_associated_database", DatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseDataSource())
15+
}
16+
17+
func DatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseDataSource() *schema.Resource {
18+
return &schema.Resource{
19+
Read: readSingularDatabaseManagementDbManagementPrivateEndpointAssociatedDatabase,
20+
Schema: map[string]*schema.Schema{
21+
"compartment_id": {
22+
Type: schema.TypeString,
23+
Required: true,
24+
},
25+
"db_management_private_endpoint_id": {
26+
Type: schema.TypeString,
27+
Required: true,
28+
},
29+
// Computed
30+
"items": {
31+
Type: schema.TypeList,
32+
Computed: true,
33+
Elem: &schema.Resource{
34+
Schema: map[string]*schema.Schema{
35+
// Required
36+
37+
// Optional
38+
39+
// Computed
40+
"compartment_id": {
41+
Type: schema.TypeString,
42+
Computed: true,
43+
},
44+
"id": {
45+
Type: schema.TypeString,
46+
Computed: true,
47+
},
48+
"name": {
49+
Type: schema.TypeString,
50+
Computed: true,
51+
},
52+
"time_registered": {
53+
Type: schema.TypeString,
54+
Computed: true,
55+
},
56+
},
57+
},
58+
},
59+
},
60+
}
61+
}
62+
63+
func readSingularDatabaseManagementDbManagementPrivateEndpointAssociatedDatabase(d *schema.ResourceData, m interface{}) error {
64+
sync := &DatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseDataSourceCrud{}
65+
sync.D = d
66+
sync.Client = m.(*OracleClients).dbManagementClient()
67+
68+
return ReadResource(sync)
69+
}
70+
71+
type DatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseDataSourceCrud struct {
72+
D *schema.ResourceData
73+
Client *oci_database_management.DbManagementClient
74+
Res *oci_database_management.ListAssociatedDatabasesResponse
75+
}
76+
77+
func (s *DatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseDataSourceCrud) VoidState() {
78+
s.D.SetId("")
79+
}
80+
81+
func (s *DatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseDataSourceCrud) Get() error {
82+
request := oci_database_management.ListAssociatedDatabasesRequest{}
83+
84+
if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok {
85+
tmp := compartmentId.(string)
86+
request.CompartmentId = &tmp
87+
}
88+
89+
if dbManagementPrivateEndpointId, ok := s.D.GetOkExists("db_management_private_endpoint_id"); ok {
90+
tmp := dbManagementPrivateEndpointId.(string)
91+
request.DbManagementPrivateEndpointId = &tmp
92+
}
93+
94+
request.RequestMetadata.RetryPolicy = getRetryPolicy(false, "database_management")
95+
96+
response, err := s.Client.ListAssociatedDatabases(context.Background(), request)
97+
if err != nil {
98+
return err
99+
}
100+
101+
s.Res = &response
102+
return nil
103+
}
104+
105+
func (s *DatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseDataSourceCrud) SetData() error {
106+
if s.Res == nil {
107+
return nil
108+
}
109+
110+
s.D.SetId(GenerateDataSourceHashID("DatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseDataSource-", DatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseDataSource(), s.D))
111+
112+
items := []interface{}{}
113+
for _, item := range s.Res.Items {
114+
items = append(items, AssociatedDatabaseSummaryToMap(item))
115+
}
116+
s.D.Set("items", items)
117+
118+
return nil
119+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package oci
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
11+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
12+
13+
"github.com/terraform-providers/terraform-provider-oci/httpreplay"
14+
)
15+
16+
var (
17+
dbManagementPrivateEndpointAssociatedDatabaseSingularDataSourceRepresentation = map[string]interface{}{
18+
"compartment_id": Representation{repType: Required, create: `${var.compartment_id}`},
19+
"db_management_private_endpoint_id": Representation{repType: Required, create: `${oci_database_management_db_management_private_endpoint.test_db_management_private_endpoint.id}`},
20+
}
21+
22+
dbManagementPrivateEndpointAssociatedDatabaseDataSourceRepresentation = map[string]interface{}{
23+
"compartment_id": Representation{repType: Required, create: `${var.compartment_id}`},
24+
"db_management_private_endpoint_id": Representation{repType: Required, create: `${oci_database_management_db_management_private_endpoint.test_db_management_private_endpoint.id}`},
25+
}
26+
27+
DbManagementPrivateEndpointAssociatedDatabaseResourceConfig = generateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", Required, Create, subnetRepresentation) +
28+
generateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", Required, Create, vcnRepresentation) +
29+
generateResourceFromRepresentationMap("oci_database_management_db_management_private_endpoint", "test_db_management_private_endpoint", Required, Create, dbManagementPrivateEndpointRepresentation)
30+
)
31+
32+
// issue-routing-tag: database_management/default
33+
func TestDatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseResource_basic(t *testing.T) {
34+
t.Skip("Skip this test till Database Management service provides a better way of testing this. It requires a live managed database instance")
35+
httpreplay.SetScenario("TestDatabaseManagementDbManagementPrivateEndpointAssociatedDatabaseResource_basic")
36+
defer httpreplay.SaveScenario()
37+
38+
provider := testAccProvider
39+
config := testProviderConfig()
40+
41+
compartmentId := getEnvSettingWithBlankDefault("compartment_ocid")
42+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
43+
44+
datasourceName := "data.oci_database_management_db_management_private_endpoint_associated_databases.test_db_management_private_endpoint_associated_databases"
45+
singularDatasourceName := "data.oci_database_management_db_management_private_endpoint_associated_database.test_db_management_private_endpoint_associated_database"
46+
47+
saveConfigContent("", "", "", t)
48+
49+
resource.Test(t, resource.TestCase{
50+
PreCheck: func() { testAccPreCheck(t) },
51+
Providers: map[string]terraform.ResourceProvider{
52+
"oci": provider,
53+
},
54+
Steps: []resource.TestStep{
55+
// verify datasource
56+
{
57+
Config: config +
58+
generateDataSourceFromRepresentationMap("oci_database_management_db_management_private_endpoint_associated_databases", "test_db_management_private_endpoint_associated_databases", Required, Create, dbManagementPrivateEndpointAssociatedDatabaseDataSourceRepresentation) +
59+
compartmentIdVariableStr + DbManagementPrivateEndpointAssociatedDatabaseResourceConfig,
60+
Check: ComposeAggregateTestCheckFuncWrapper(
61+
resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId),
62+
resource.TestCheckResourceAttrSet(datasourceName, "db_management_private_endpoint_id"),
63+
64+
resource.TestCheckResourceAttrSet(datasourceName, "associated_database_collection.#"),
65+
resource.TestCheckResourceAttrSet(datasourceName, "associated_database_collection.0.items.#"),
66+
),
67+
},
68+
// verify singular datasource
69+
{
70+
Config: config +
71+
generateDataSourceFromRepresentationMap("oci_database_management_db_management_private_endpoint_associated_database", "test_db_management_private_endpoint_associated_database", Required, Create, dbManagementPrivateEndpointAssociatedDatabaseSingularDataSourceRepresentation) +
72+
compartmentIdVariableStr + DbManagementPrivateEndpointAssociatedDatabaseResourceConfig,
73+
Check: ComposeAggregateTestCheckFuncWrapper(
74+
resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId),
75+
resource.TestCheckResourceAttrSet(singularDatasourceName, "db_management_private_endpoint_id"),
76+
77+
resource.TestCheckResourceAttrSet(singularDatasourceName, "items.#"),
78+
),
79+
},
80+
},
81+
})
82+
}

0 commit comments

Comments
 (0)