Skip to content

Commit a1d7a87

Browse files
Sandeep-ManiNagaRajuPasunuri
authored andcommitted
Added - Support for Private Access to a VB service instance
1 parent ca6c4fb commit a1d7a87

File tree

7 files changed

+474
-116
lines changed

7 files changed

+474
-116
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
variable "idcs_open_id" {
2+
}
3+
4+
variable "compartment_id" {
5+
}
6+
7+
variable "vb_instance_network_endpoint_details_network_endpoint_type" {
8+
default = "PRIVATE"
9+
}
10+
11+
variable "vb_instance_network_endpoint_details_network_security_group_ids" {
12+
default = []
13+
}
14+
15+
variable "vb_instance_network_endpoint_details_private_endpoint_ip" {
16+
default = ""
17+
}
18+
19+
variable "vb_instance_network_endpoint_details_subnet_id" {
20+
default = "subnetId"
21+
}
22+
23+
resource "oci_visual_builder_vb_instance" "test_vb_instance_pe" {
24+
#Required
25+
compartment_id = var.compartment_id
26+
display_name = "displayNamePe"
27+
is_visual_builder_enabled = "true"
28+
idcs_open_id = var.idcs_open_id
29+
node_count = "1"
30+
31+
network_endpoint_details {
32+
#Required
33+
network_endpoint_type = var.vb_instance_network_endpoint_details_network_endpoint_type
34+
subnet_id = var.vb_instance_network_endpoint_details_subnet_id
35+
36+
#Optional
37+
network_security_group_ids = var.vb_instance_network_endpoint_details_network_security_group_ids
38+
private_endpoint_ip = var.vb_instance_network_endpoint_details_private_endpoint_ip
39+
}
40+
41+
}
42+
43+
data "oci_visual_builder_vb_instances" "test_vb_instance_pe" {
44+
#Required
45+
compartment_id = var.compartment_id
46+
47+
#Optional
48+
display_name = "displayNamePe"
49+
state = "Active"
50+
filter {
51+
name = "id"
52+
values = [oci_visual_builder_vb_instance.test_vb_instance_pe.id]
53+
}
54+
}
55+
56+
data "oci_visual_builder_vb_instance" "test_vb_instance_pe" {
57+
#Required
58+
vb_instance_id = oci_visual_builder_vb_instance.test_vb_instance_pe.id
59+
}

internal/integrationtest/visual_builder_vb_instance_test.go

Lines changed: 200 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,31 @@ var (
6565
"idcs_open_id": acctest.Representation{RepType: acctest.Required, Create: `${var.idcs_access_token}`},
6666
"is_visual_builder_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`},
6767
}
68+
69+
VisualBuilderPEVbInstanceRepresentation = map[string]interface{}{
70+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
71+
"display_name": acctest.Representation{RepType: acctest.Required, Create: `displayNamePE`,
72+
Update: `displayNamePE2`},
73+
"node_count": acctest.Representation{RepType: acctest.Required, Create: `1`, Update: `2`},
74+
"consumption_model": acctest.Representation{RepType: acctest.Optional, Create: `UCM`},
75+
"idcs_open_id": acctest.Representation{RepType: acctest.Required, Create: `${var.idcs_access_token}`},
76+
"is_visual_builder_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`},
77+
"network_endpoint_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: VisualBuilderVbInstanceNetworkEndpointDetailsRepresentation},
78+
}
79+
6880
VisualBuilderVbInstanceAlternateCustomEndpointsRepresentation = map[string]interface{}{
6981
"hostname": acctest.Representation{RepType: acctest.Required, Create: `hostname.com`, Update: `hostname2.com`},
7082
"certificate_secret_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_vault_secret.test_secret.id}`},
7183
}
7284
VisualBuilderVbInstanceCustomEndpointRepresentation = map[string]interface{}{
73-
"hostname": acctest.Representation{RepType: acctest.Required, Create: `hostname.com`, Update: `hostname2.com`},
85+
"hostname": acctest.Representation{RepType: acctest.Required, Create: `test1.myvb.org`, Update: `test2.myvb.org`},
7486
"certificate_secret_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.oci_vault_secret_id}`},
7587
}
76-
88+
VisualBuilderVbInstanceNetworkEndpointDetailsRepresentation = map[string]interface{}{
89+
"network_endpoint_type": acctest.Representation{RepType: acctest.Required, Create: `PRIVATE`},
90+
"subnet_id": acctest.Representation{RepType: acctest.Required,
91+
Create: `${var.vb_instance_network_endpoint_details_subnet_id}`},
92+
}
7793
VisualBuilderVbInstanceResourceDependencies = DefinedTagsDependencies
7894
)
7995

@@ -269,7 +285,6 @@ func TestVisualBuilderVbInstanceResource_basic(t *testing.T) {
269285
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"),
270286
resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"),
271287
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
272-
resource.TestCheckResourceAttr(singularDatasourceName, "idcs_info.#", "1"),
273288
resource.TestCheckResourceAttrSet(singularDatasourceName, "instance_url"),
274289
resource.TestCheckResourceAttr(singularDatasourceName, "is_visual_builder_enabled", "true"),
275290
resource.TestCheckResourceAttrSet(singularDatasourceName, "management_nat_gateway_ip"),
@@ -309,6 +324,183 @@ func TestVisualBuilderVbInstanceResource_basic(t *testing.T) {
309324
})
310325
}
311326

327+
func TestVisualBuilderPrivateEndpointVbInstanceResource_basic(t *testing.T) {
328+
httpreplay.SetScenario("TestVisualBuilderPrivateEndpointVbInstanceResource_basic")
329+
defer httpreplay.SaveScenario()
330+
331+
config := acctest.ProviderTestConfig()
332+
333+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
334+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
335+
336+
sbunetIdVariableStr := createVariableStr("vb_instance_network_endpoint_details_subnet_id", "vb_instance_network_endpoint_details_subnet_id")
337+
nsgIdVariableStr := createVariableStr("vb_instance_network_endpoint_details_network_security_group_id",
338+
"vb_instance_network_endpoint_details_network_security_group_id")
339+
340+
resourceName := "oci_visual_builder_vb_instance.test_vb_instance"
341+
datasourceName := "data.oci_visual_builder_vb_instances.test_vb_instances"
342+
singularDatasourceName := "data.oci_visual_builder_vb_instance.test_vb_instance"
343+
344+
var resId string
345+
// 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.
346+
acctest.SaveConfigContent(config+compartmentIdVariableStr+
347+
sbunetIdVariableStr+
348+
acctest.GenerateResourceFromRepresentationMap("oci_visual_builder_vb_instance", "test_vb_instance", acctest.Optional, acctest.Create, VisualBuilderPEVbInstanceRepresentation), "visualbuilder", "vbInstance", t)
349+
350+
acctest.ResourceTest(t, testAccCheckVisualBuilderVbInstanceDestroy, []resource.TestStep{
351+
// verify Create
352+
{
353+
Config: config + compartmentIdVariableStr + idcsOpenIdVariableStr() +
354+
sbunetIdVariableStr +
355+
acctest.GenerateResourceFromRepresentationMap("oci_visual_builder_vb_instance", "test_vb_instance",
356+
acctest.Optional, acctest.Create, VisualBuilderPEVbInstanceRepresentation),
357+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
358+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
359+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayNamePE"),
360+
resource.TestCheckResourceAttr(resourceName, "node_count", "1"),
361+
resource.TestCheckResourceAttrSet(resourceName, "id"),
362+
resource.TestCheckResourceAttr(resourceName, "network_endpoint_details.#", "1"),
363+
resource.TestCheckResourceAttr(resourceName, "network_endpoint_details.0.network_endpoint_type", "PRIVATE"),
364+
resource.TestCheckResourceAttrSet(resourceName, "network_endpoint_details.0.subnet_id"),
365+
resource.TestCheckResourceAttrSet(resourceName, "network_endpoint_details.0.private_endpoint_ip"),
366+
func(s *terraform.State) (err error) {
367+
resId, err = acctest.FromInstanceState(s, resourceName, "id")
368+
fmt.Printf("%s", resId)
369+
return err
370+
},
371+
),
372+
},
373+
//delete before next Create
374+
{
375+
Config: config + compartmentIdVariableStr + idcsOpenIdVariableStr(),
376+
},
377+
//verify Create with optionals
378+
379+
{
380+
Config: config + compartmentIdVariableStr +
381+
idcsOpenIdVariableStr() +
382+
sbunetIdVariableStr +
383+
nsgIdVariableStr +
384+
acctest.GenerateResourceFromRepresentationMap(
385+
"oci_visual_builder_vb_instance",
386+
"test_vb_instance",
387+
acctest.Optional,
388+
acctest.Create,
389+
acctest.RepresentationCopyWithNewProperties(
390+
VisualBuilderPEVbInstanceRepresentation,
391+
map[string]interface{}{
392+
"network_endpoint_details": acctest.RepresentationGroup{RepType: acctest.Optional,
393+
Group: acctest.RepresentationCopyWithNewProperties(
394+
VisualBuilderVbInstanceNetworkEndpointDetailsRepresentation,
395+
map[string]interface{}{
396+
"network_endpoint_type": acctest.Representation{RepType: acctest.Required, Create: `PRIVATE`},
397+
"subnet_id": acctest.Representation{RepType: acctest.Required,
398+
Create: `${var.vb_instance_network_endpoint_details_subnet_id}`},
399+
"network_security_group_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.vb_instance_network_endpoint_details_network_security_group_id}`}},
400+
},
401+
)},
402+
},
403+
)),
404+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
405+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
406+
resource.TestCheckResourceAttr(resourceName, "consumption_model", "UCM"),
407+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayNamePE"),
408+
resource.TestCheckResourceAttr(resourceName, "node_count", "1"),
409+
resource.TestCheckResourceAttrSet(resourceName, "id"),
410+
resource.TestCheckResourceAttrSet(resourceName, "idcs_open_id"),
411+
resource.TestCheckResourceAttrSet(resourceName, "instance_url"),
412+
resource.TestCheckResourceAttr(resourceName, "network_endpoint_details.#", "1"),
413+
resource.TestCheckResourceAttr(resourceName, "network_endpoint_details.0.network_endpoint_type", "PRIVATE"),
414+
resource.TestCheckResourceAttrSet(resourceName, "network_endpoint_details.0.subnet_id"),
415+
resource.TestCheckResourceAttrSet(resourceName, "network_endpoint_details.0.private_endpoint_ip"),
416+
resource.TestCheckResourceAttr(resourceName, "network_endpoint_details.0.network_security_group_ids.#", "1"),
417+
resource.TestCheckResourceAttr(resourceName, "is_visual_builder_enabled", "true"),
418+
resource.TestCheckResourceAttrSet(resourceName, "state"),
419+
func(s *terraform.State) (err error) {
420+
resId, err = acctest.FromInstanceState(s, resourceName, "id")
421+
if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment {
422+
if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil {
423+
return errExport
424+
}
425+
}
426+
return err
427+
},
428+
),
429+
},
430+
// verify datasource
431+
{
432+
Config: config +
433+
sbunetIdVariableStr +
434+
nsgIdVariableStr +
435+
acctest.GenerateDataSourceFromRepresentationMap(
436+
"oci_visual_builder_vb_instances",
437+
"test_vb_instances",
438+
acctest.Optional, acctest.Create,
439+
acctest.RepresentationCopyWithNewProperties(VisualBuilderVisualBuilderVbInstanceDataSourceRepresentation,
440+
map[string]interface{}{
441+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayNamePE`},
442+
}),
443+
) +
444+
compartmentIdVariableStr + idcsOpenIdVariableStr() +
445+
acctest.GenerateResourceFromRepresentationMap(
446+
"oci_visual_builder_vb_instance",
447+
"test_vb_instance",
448+
acctest.Optional, acctest.Create,
449+
VisualBuilderPEVbInstanceRepresentation),
450+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
451+
resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId),
452+
resource.TestCheckResourceAttr(datasourceName, "display_name", "displayNamePE"),
453+
resource.TestCheckResourceAttr(datasourceName, "state", "ACTIVE"),
454+
455+
resource.TestCheckResourceAttr(datasourceName, "vb_instance_summary_collection.#", "1"),
456+
resource.TestCheckResourceAttr(datasourceName, "vb_instance_summary_collection.0.items.#", "1"),
457+
),
458+
},
459+
//verify singular datasource
460+
{
461+
Config: config +
462+
sbunetIdVariableStr +
463+
nsgIdVariableStr +
464+
acctest.GenerateDataSourceFromRepresentationMap(
465+
"oci_visual_builder_vb_instance",
466+
"test_vb_instance",
467+
acctest.Required, acctest.Create,
468+
acctest.RepresentationCopyWithNewProperties(
469+
VisualBuilderVisualBuilderVbInstanceSingularDataSourceRepresentation,
470+
map[string]interface{}{
471+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayNamePE`},
472+
}),
473+
) +
474+
compartmentIdVariableStr + idcsOpenIdVariableStr() +
475+
acctest.GenerateResourceFromRepresentationMap(
476+
"oci_visual_builder_vb_instance",
477+
"test_vb_instance",
478+
acctest.Optional,
479+
acctest.Create,
480+
VisualBuilderPEVbInstanceRepresentation),
481+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
482+
resource.TestCheckResourceAttrSet(singularDatasourceName, "vb_instance_id"),
483+
resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId),
484+
resource.TestCheckResourceAttr(singularDatasourceName, "consumption_model", "UCM"),
485+
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayNamePE"),
486+
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
487+
resource.TestCheckResourceAttrSet(singularDatasourceName, "instance_url"),
488+
resource.TestCheckResourceAttr(singularDatasourceName, "is_visual_builder_enabled", "true"),
489+
resource.TestCheckResourceAttr(singularDatasourceName, "network_endpoint_details.#", "1"),
490+
resource.TestCheckResourceAttr(singularDatasourceName, "network_endpoint_details.0.network_endpoint_type", "PRIVATE"),
491+
resource.TestCheckResourceAttrSet(singularDatasourceName, "network_endpoint_details.0.subnet_id"),
492+
resource.TestCheckResourceAttrSet(singularDatasourceName, "network_endpoint_details.0.private_endpoint_ip"),
493+
resource.TestCheckResourceAttr(singularDatasourceName, "network_endpoint_details.0.network_security_group_ids.#", "1"),
494+
resource.TestCheckResourceAttr(resourceName, "network_endpoint_details.0.network_security_group_ids.#", "1"),
495+
resource.TestCheckResourceAttr(singularDatasourceName, "node_count", "1"),
496+
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),
497+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),
498+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_updated"),
499+
),
500+
},
501+
})
502+
}
503+
312504
func testAccCheckVisualBuilderVbInstanceDestroy(s *terraform.State) error {
313505
noResourceFound := true
314506
client := acctest.TestAccProvider.Meta().(*tf_client.OracleClients).VbInstanceClient()
@@ -434,3 +626,8 @@ func idcsOpenIdVariableStr() string {
434626
idcsAccessToken := utils.GetEnvSettingWithBlankDefault("idcs_access_token")
435627
return fmt.Sprintf("variable \"idcs_access_token\" { default = \"%s\" }\n", idcsAccessToken)
436628
}
629+
630+
func createVariableStr(variableName string, envVarName string) string {
631+
defaultValue := utils.GetEnvSettingWithBlankDefault(envVarName)
632+
return fmt.Sprintf("variable \"%s\" { default = \"%s\" }\n", variableName, defaultValue)
633+
}

internal/service/visual_builder/visual_builder_vb_instance_data_source.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,16 @@ func (s *VisualBuilderVbInstanceDataSourceCrud) SetData() error {
122122
s.D.Set("management_vcn_id", *s.Res.ManagementVcnId)
123123
}
124124

125+
if s.Res.NetworkEndpointDetails != nil {
126+
networkEndpointDetailsArray := []interface{}{}
127+
if networkEndpointDetailsMap := NetworkEndpointDetailsToMap(&s.Res.NetworkEndpointDetails, true); networkEndpointDetailsMap != nil {
128+
networkEndpointDetailsArray = append(networkEndpointDetailsArray, networkEndpointDetailsMap)
129+
}
130+
s.D.Set("network_endpoint_details", networkEndpointDetailsArray)
131+
} else {
132+
s.D.Set("network_endpoint_details", nil)
133+
}
134+
125135
if s.Res.NodeCount != nil {
126136
s.D.Set("node_count", *s.Res.NodeCount)
127137
}

0 commit comments

Comments
 (0)