Skip to content

Commit af6695c

Browse files
vsin12jotruon
authored andcommitted
Exempted - LA feature Private Access support for RMS
1 parent 4e0d31f commit af6695c

12 files changed

+1218
-0
lines changed

internal/globalvar/constants.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const (
2323
ClientHostOverridesEnv = "CLIENT_HOST_OVERRIDES"
2424
CustomCertLocationEnv = "custom_cert_location"
2525
AcceptLocalCerts = "accept_local_certs"
26+
JobOCID = "job-ocid"
2627

2728
AuthAttrName = "auth"
2829
TenancyOcidAttrName = "tenancy_ocid"
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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 integrationtest
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
11+
12+
"github.com/terraform-providers/terraform-provider-oci/httpreplay"
13+
"github.com/terraform-providers/terraform-provider-oci/internal/acctest"
14+
15+
"github.com/terraform-providers/terraform-provider-oci/internal/utils"
16+
)
17+
18+
var (
19+
privateEndpointReachableIpSingularDataSourceRepresentation = map[string]interface{}{
20+
"private_endpoint_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_resourcemanager_private_endpoint.test_private_endpoint.id}`},
21+
"private_ip": acctest.Representation{RepType: acctest.Required, Create: `privateIp`},
22+
}
23+
24+
PrivateEndpointReachableIpResourceConfig = acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, subnetRepresentation) +
25+
acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, vcnRepresentation) +
26+
acctest.GenerateResourceFromRepresentationMap("oci_resourcemanager_private_endpoint", "test_private_endpoint", acctest.Required, acctest.Create, resourceManagerprivateEndpointRepresentation)
27+
)
28+
29+
// issue-routing-tag: resourcemanager/default
30+
func TestResourcemanagerPrivateEndpointReachableIpResource_basic(t *testing.T) {
31+
httpreplay.SetScenario("TestResourcemanagerPrivateEndpointReachableIpResource_basic")
32+
defer httpreplay.SaveScenario()
33+
34+
config := acctest.ProviderTestConfig()
35+
36+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
37+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
38+
39+
singularDatasourceName := "data.oci_resourcemanager_private_endpoint_reachable_ip.test_private_endpoint_reachable_ip"
40+
41+
acctest.SaveConfigContent("", "", "", t)
42+
43+
acctest.ResourceTest(t, nil, []resource.TestStep{
44+
// verify singular datasource
45+
{
46+
Config: config +
47+
acctest.GenerateDataSourceFromRepresentationMap("oci_resourcemanager_private_endpoint_reachable_ip", "test_private_endpoint_reachable_ip", acctest.Required, acctest.Create, privateEndpointReachableIpSingularDataSourceRepresentation) +
48+
compartmentIdVariableStr + PrivateEndpointReachableIpResourceConfig,
49+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
50+
resource.TestCheckResourceAttrSet(singularDatasourceName, "private_endpoint_id"),
51+
resource.TestCheckResourceAttr(singularDatasourceName, "private_ip", "privateIp"),
52+
53+
resource.TestCheckResourceAttrSet(singularDatasourceName, "reachable_ip"),
54+
),
55+
},
56+
})
57+
}

internal/integrationtest/resourcemanager_private_endpoint_test.go

Lines changed: 350 additions & 0 deletions
Large diffs are not rendered by default.

internal/provider/provider.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,11 @@ func BuildConfigureClientFn(configProvider oci_common.ConfigurationProvider, htt
624624
}
625625
}
626626

627+
if strings.Contains(r.URL.Path, "/reachableIp") {
628+
log.Printf("[DEBUG] Setting JOB_ID for Terraformer: %v ", os.Getenv("JOB_ID"))
629+
r.Header.Set(globalvar.JobOCID, os.Getenv("JOB_ID"))
630+
}
631+
627632
if simulateDbForDbSystemUpgrade {
628633
if r.Method == http.MethodPost && (strings.Contains(r.URL.Path, "/dbSystems")) {
629634
r.Header.Set(globalvar.RequestHeaderOpcHostSerial, "FAKEHOSTSERIALFAKEOL6")

internal/provider/register_datasource.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,6 +1082,8 @@ func init() {
10821082
RegisterDatasource("oci_osub_usage_computed_usage_aggregateds", tf_osub_usage.OsubUsageComputedUsageAggregatedsDataSource())
10831083
RegisterDatasource("oci_osub_usage_computed_usages", tf_osub_usage.OsubUsageComputedUsagesDataSource())
10841084
// resourcemanager service
1085+
RegisterDatasource("oci_resourcemanager_private_endpoint", tf_resourcemanager.ResourcemanagerPrivateEndpointDataSource())
1086+
RegisterDatasource("oci_resourcemanager_private_endpoint_reachable_ip", tf_resourcemanager.ResourcemanagerPrivateEndpointReachableIpDataSource())
10851087
RegisterDatasource("oci_resourcemanager_stack", tf_resourcemanager.ResourcemanagerStackDataSource())
10861088
RegisterDatasource("oci_resourcemanager_stack_tf_state", tf_resourcemanager.ResourcemanagerStackTfStateDataSource())
10871089
RegisterDatasource("oci_resourcemanager_stacks", tf_resourcemanager.ResourcemanagerStacksDataSource())

internal/provider/register_resource.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ import (
7070
tf_optimizer "github.com/terraform-providers/terraform-provider-oci/internal/service/optimizer"
7171
tf_osmanagement "github.com/terraform-providers/terraform-provider-oci/internal/service/osmanagement"
7272
tf_osp_gateway "github.com/terraform-providers/terraform-provider-oci/internal/service/osp_gateway"
73+
tf_resourcemanager "github.com/terraform-providers/terraform-provider-oci/internal/service/resourcemanager"
7374
tf_sch "github.com/terraform-providers/terraform-provider-oci/internal/service/sch"
7475
tf_service_catalog "github.com/terraform-providers/terraform-provider-oci/internal/service/service_catalog"
7576
tf_stack_monitoring "github.com/terraform-providers/terraform-provider-oci/internal/service/stack_monitoring"
@@ -543,6 +544,7 @@ func init() {
543544
// osub_organization_subscription service
544545
// osub_billing_schedule service
545546
// resourcemanager service
547+
RegisterResource("oci_resourcemanager_private_endpoint", tf_resourcemanager.ResourcemanagerPrivateEndpointResource())
546548
// sch service
547549
RegisterResource("oci_sch_service_connector", tf_sch.SchServiceConnectorResource())
548550
// secrets service

internal/resourcediscovery/export_definitions.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
oci_oce "github.com/oracle/oci-go-sdk/v65/oce"
3838
oci_ons "github.com/oracle/oci-go-sdk/v65/ons"
3939
oci_opsi "github.com/oracle/oci-go-sdk/v65/opsi"
40+
oci_resourcemanager "github.com/oracle/oci-go-sdk/v65/resourcemanager"
4041
oci_sch "github.com/oracle/oci-go-sdk/v65/sch"
4142
oci_stack_monitoring "github.com/oracle/oci-go-sdk/v65/stackmonitoring"
4243
oci_streaming "github.com/oracle/oci-go-sdk/v65/streaming"
@@ -3081,6 +3082,18 @@ var exportOspGatewaySubscriptionHints = &TerraformResourceHints{
30813082
resourceAbbreviation: "subscription",
30823083
}
30833084

3085+
var exportResourcemanagerPrivateEndpointHints = &TerraformResourceHints{
3086+
resourceClass: "oci_resourcemanager_private_endpoint",
3087+
datasourceClass: "oci_resourcemanager_private_endpoints",
3088+
datasourceItemsAttr: "private_endpoint_collection",
3089+
isDatasourceCollection: true,
3090+
resourceAbbreviation: "private_endpoint",
3091+
requireResourceRefresh: true,
3092+
discoverableLifecycleStates: []string{
3093+
string(oci_resourcemanager.PrivateEndpointLifecycleStateActive),
3094+
},
3095+
}
3096+
30843097
var exportSchServiceConnectorHints = &TerraformResourceHints{
30853098
resourceClass: "oci_sch_service_connector",
30863099
datasourceClass: "oci_sch_service_connectors",

internal/resourcediscovery/export_graphs.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ var compartmentResourceGraphs = map[string]TerraformResourceGraph{
6969
"opsi": opsiResourceGraph,
7070
"osmanagement": osmanagementResourceGraph,
7171
"osp_gateway": ospGatewayResourceGraph,
72+
"resourcemanager": resourcemanagerResourceGraph,
7273
"sch": schResourceGraph,
7374
"stack_monitoring": stackMonitoringResourceGraph,
7475
"vault": vaultResourceGraph,
@@ -1198,6 +1199,12 @@ var ospGatewayResourceGraph = TerraformResourceGraph{
11981199
"oci_identity_compartment": {},
11991200
}
12001201

1202+
var resourcemanagerResourceGraph = TerraformResourceGraph{
1203+
"oci_identity_compartment": {
1204+
{TerraformResourceHints: exportResourcemanagerPrivateEndpointHints},
1205+
},
1206+
}
1207+
12011208
var schResourceGraph = TerraformResourceGraph{
12021209
"oci_identity_compartment": {
12031210
{TerraformResourceHints: exportSchServiceConnectorHints},
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
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 resourcemanager
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
oci_resourcemanager "github.com/oracle/oci-go-sdk/v65/resourcemanager"
11+
12+
"github.com/terraform-providers/terraform-provider-oci/internal/client"
13+
"github.com/terraform-providers/terraform-provider-oci/internal/tfresource"
14+
)
15+
16+
func ResourcemanagerPrivateEndpointDataSource() *schema.Resource {
17+
fieldMap := make(map[string]*schema.Schema)
18+
fieldMap["private_endpoint_id"] = &schema.Schema{
19+
Type: schema.TypeString,
20+
Required: true,
21+
}
22+
return tfresource.GetSingularDataSourceItemSchema(ResourcemanagerPrivateEndpointResource(), fieldMap, readSingularResourcemanagerPrivateEndpoint)
23+
}
24+
25+
func readSingularResourcemanagerPrivateEndpoint(d *schema.ResourceData, m interface{}) error {
26+
sync := &ResourcemanagerPrivateEndpointDataSourceCrud{}
27+
sync.D = d
28+
sync.Client = m.(*client.OracleClients).ResourceManagerClient()
29+
30+
return tfresource.ReadResource(sync)
31+
}
32+
33+
type ResourcemanagerPrivateEndpointDataSourceCrud struct {
34+
D *schema.ResourceData
35+
Client *oci_resourcemanager.ResourceManagerClient
36+
Res *oci_resourcemanager.GetPrivateEndpointResponse
37+
}
38+
39+
func (s *ResourcemanagerPrivateEndpointDataSourceCrud) VoidState() {
40+
s.D.SetId("")
41+
}
42+
43+
func (s *ResourcemanagerPrivateEndpointDataSourceCrud) Get() error {
44+
request := oci_resourcemanager.GetPrivateEndpointRequest{}
45+
46+
if privateEndpointId, ok := s.D.GetOkExists("private_endpoint_id"); ok {
47+
tmp := privateEndpointId.(string)
48+
request.PrivateEndpointId = &tmp
49+
}
50+
51+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "resourcemanager")
52+
53+
response, err := s.Client.GetPrivateEndpoint(context.Background(), request)
54+
if err != nil {
55+
return err
56+
}
57+
58+
s.Res = &response
59+
return nil
60+
}
61+
62+
func (s *ResourcemanagerPrivateEndpointDataSourceCrud) SetData() error {
63+
if s.Res == nil {
64+
return nil
65+
}
66+
67+
s.D.SetId(*s.Res.Id)
68+
69+
if s.Res.CompartmentId != nil {
70+
s.D.Set("compartment_id", *s.Res.CompartmentId)
71+
}
72+
73+
if s.Res.DefinedTags != nil {
74+
s.D.Set("defined_tags", tfresource.DefinedTagsToMap(s.Res.DefinedTags))
75+
}
76+
77+
if s.Res.Description != nil {
78+
s.D.Set("description", *s.Res.Description)
79+
}
80+
81+
if s.Res.DisplayName != nil {
82+
s.D.Set("display_name", *s.Res.DisplayName)
83+
}
84+
85+
s.D.Set("dns_zones", s.Res.DnsZones)
86+
87+
s.D.Set("freeform_tags", s.Res.FreeformTags)
88+
89+
s.D.Set("nsg_id_list", s.Res.NsgIdList)
90+
91+
s.D.Set("source_ips", s.Res.SourceIps)
92+
93+
s.D.Set("state", s.Res.LifecycleState)
94+
95+
if s.Res.SubnetId != nil {
96+
s.D.Set("subnet_id", *s.Res.SubnetId)
97+
}
98+
99+
if s.Res.TimeCreated != nil {
100+
s.D.Set("time_created", s.Res.TimeCreated.String())
101+
}
102+
103+
if s.Res.VcnId != nil {
104+
s.D.Set("vcn_id", *s.Res.VcnId)
105+
}
106+
107+
return nil
108+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
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 resourcemanager
5+
6+
import (
7+
"context"
8+
9+
"github.com/terraform-providers/terraform-provider-oci/internal/client"
10+
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
oci_resourcemanager "github.com/oracle/oci-go-sdk/v65/resourcemanager"
13+
14+
"github.com/terraform-providers/terraform-provider-oci/internal/tfresource"
15+
)
16+
17+
func ResourcemanagerPrivateEndpointReachableIpDataSource() *schema.Resource {
18+
return &schema.Resource{
19+
Read: readSingularResourcemanagerPrivateEndpointReachableIp,
20+
Schema: map[string]*schema.Schema{
21+
"private_endpoint_id": {
22+
Type: schema.TypeString,
23+
Required: true,
24+
},
25+
"private_ip": {
26+
Type: schema.TypeString,
27+
Required: true,
28+
},
29+
// Computed
30+
"reachable_ip": {
31+
Type: schema.TypeString,
32+
Computed: true,
33+
},
34+
},
35+
}
36+
}
37+
38+
func readSingularResourcemanagerPrivateEndpointReachableIp(d *schema.ResourceData, m interface{}) error {
39+
sync := &ResourcemanagerPrivateEndpointReachableIpDataSourceCrud{}
40+
sync.D = d
41+
sync.Client = m.(*client.OracleClients).ResourceManagerClient()
42+
43+
return tfresource.ReadResource(sync)
44+
}
45+
46+
type ResourcemanagerPrivateEndpointReachableIpDataSourceCrud struct {
47+
D *schema.ResourceData
48+
Client *oci_resourcemanager.ResourceManagerClient
49+
Res *oci_resourcemanager.GetReachableIpResponse
50+
}
51+
52+
func (s *ResourcemanagerPrivateEndpointReachableIpDataSourceCrud) VoidState() {
53+
s.D.SetId("")
54+
}
55+
56+
func (s *ResourcemanagerPrivateEndpointReachableIpDataSourceCrud) Get() error {
57+
request := oci_resourcemanager.GetReachableIpRequest{}
58+
59+
if privateEndpointId, ok := s.D.GetOkExists("private_endpoint_id"); ok {
60+
tmp := privateEndpointId.(string)
61+
request.PrivateEndpointId = &tmp
62+
}
63+
64+
if privateIp, ok := s.D.GetOkExists("private_ip"); ok {
65+
tmp := privateIp.(string)
66+
request.PrivateIp = &tmp
67+
}
68+
69+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "resourcemanager")
70+
71+
response, err := s.Client.GetReachableIp(context.Background(), request)
72+
if err != nil {
73+
return err
74+
}
75+
76+
s.Res = &response
77+
return nil
78+
}
79+
80+
func (s *ResourcemanagerPrivateEndpointReachableIpDataSourceCrud) SetData() error {
81+
if s.Res == nil {
82+
return nil
83+
}
84+
85+
s.D.SetId(tfresource.GenerateDataSourceHashID("ResourcemanagerPrivateEndpointReachableIpDataSource-", ResourcemanagerPrivateEndpointReachableIpDataSource(), s.D))
86+
87+
if s.Res.ReachableIp.ReachableIp != nil {
88+
s.D.Set("reachable_ip", *s.Res.ReachableIp.ReachableIp)
89+
}
90+
91+
return nil
92+
}

0 commit comments

Comments
 (0)