Skip to content

Commit adad865

Browse files
jotruonabhilash-av
authored andcommitted
Support network_endpoint_details for service analytics
1 parent 0557f69 commit adad865

10 files changed

+390
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Support `name` field to Identity Provider Group Summary response
55
- Support for ADB-S: Private Endpoint
66
- Support for `register` and `reregister` to `datasafe` in `Autonomous database - Dedicated` resources
7+
- Support for `network_endpoint_details` in `oci_analytics_analytics_instance` resource
78

89
## 3.83.0 (July 01, 2020)
910

examples/analytics/main.tf

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ provider "oci" {
2222
private_key_path = "${var.private_key_path}"
2323
}
2424

25-
resource "oci_analytics_analytics_instance" "test_oce_instance" {
25+
resource "oci_analytics_analytics_instance" "test_oce_instance_public" {
2626
compartment_id = "${var.compartment_ocid}"
2727
description = "OAC instance"
2828
email_notification = "${var.email_notification}"
@@ -34,16 +34,59 @@ resource "oci_analytics_analytics_instance" "test_oce_instance" {
3434
capacity_value = 2
3535
}
3636

37-
name = "testoacinstance"
37+
name = "testoacinstance1"
3838
freeform_tags = "${map("freeformkey", "freeformvalue")}"
3939
state = "ACTIVE"
4040
idcs_access_token = "${var.idcs_access_token}"
41+
42+
# Optional
43+
network_endpoint_details {
44+
#Required
45+
network_endpoint_type = "PUBLIC"
46+
47+
#Optional
48+
whitelisted_ips = ["${oci_core_vcn.test_vcn.cidr_block}"]
49+
50+
whitelisted_vcns = [{
51+
#Optional
52+
id = "${oci_core_vcn.test_vcn.id}"
53+
whitelisted_ips = ["${oci_core_vcn.test_vcn.cidr_block}"]
54+
}]
55+
}
56+
}
57+
58+
resource "oci_analytics_analytics_instance" "test_oce_instance_private" {
59+
compartment_id = "${var.compartment_ocid}"
60+
description = "OAC instance"
61+
email_notification = "${var.email_notification}"
62+
feature_set = "ENTERPRISE_ANALYTICS"
63+
license_type = "LICENSE_INCLUDED"
64+
65+
capacity {
66+
capacity_type = "OLPU_COUNT"
67+
capacity_value = 2
68+
}
69+
70+
name = "testoacinstance2"
71+
freeform_tags = "${map("freeformkey", "freeformvalue")}"
72+
state = "ACTIVE"
73+
idcs_access_token = "${var.idcs_access_token}"
74+
75+
# Optional
76+
network_endpoint_details {
77+
#Required
78+
network_endpoint_type = "PRIVATE"
79+
80+
#Optional
81+
subnet_id = "${oci_core_subnet.test_subnet.id}"
82+
vcn_id = "${oci_core_vcn.test_vcn.id}"
83+
}
4184
}
4285

4386
data "oci_analytics_analytics_instances" "test_instance" {
4487
compartment_id = "${var.compartment_ocid}"
4588
}
4689

4790
output "test" {
48-
value = "${data.oci_analytics_analytics_instances.test_instance.analytics_instances.*.id}"
91+
value = "${data.oci_analytics_analytics_instances.test_instance.id}"
4992
}

examples/analytics/subnet.tf

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
resource "oci_core_vcn" "test_vcn" {
5+
cidr_block = "10.0.0.0/16"
6+
compartment_id = "${var.compartment_ocid}"
7+
display_name = "exampleVCN"
8+
dns_label = "tfexamplevcn"
9+
}
10+
11+
resource "oci_core_subnet" "test_subnet" {
12+
cidr_block = "10.0.1.0/24"
13+
display_name = "regionalSubnet"
14+
dns_label = "regionalsubnet"
15+
compartment_id = "${var.compartment_ocid}"
16+
vcn_id = "${oci_core_vcn.test_vcn.id}"
17+
security_list_ids = ["${oci_core_vcn.test_vcn.default_security_list_id}"]
18+
route_table_id = "${oci_core_vcn.test_vcn.default_route_table_id}"
19+
dhcp_options_id = "${oci_core_vcn.test_vcn.default_dhcp_options_id}"
20+
}

oci/analytics_analytics_instance_data_source.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,16 @@ func (s *AnalyticsAnalyticsInstanceDataSourceCrud) SetData() error {
9999
s.D.Set("name", *s.Res.Name)
100100
}
101101

102+
if s.Res.NetworkEndpointDetails != nil {
103+
networkEndpointDetailsArray := []interface{}{}
104+
if networkEndpointDetailsMap := NetworkEndpointDetailsToMap(&s.Res.NetworkEndpointDetails); networkEndpointDetailsMap != nil {
105+
networkEndpointDetailsArray = append(networkEndpointDetailsArray, networkEndpointDetailsMap)
106+
}
107+
s.D.Set("network_endpoint_details", networkEndpointDetailsArray)
108+
} else {
109+
s.D.Set("network_endpoint_details", nil)
110+
}
111+
102112
if s.Res.ServiceUrl != nil {
103113
s.D.Set("service_url", *s.Res.ServiceUrl)
104114
}

oci/analytics_analytics_instance_resource.go

Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,84 @@ func AnalyticsAnalyticsInstanceResource() *schema.Resource {
121121
string(oci_analytics.AnalyticsInstanceLifecycleStateActive),
122122
}, true),
123123
},
124+
"network_endpoint_details": {
125+
Type: schema.TypeList,
126+
Optional: true,
127+
Computed: true,
128+
ForceNew: true,
129+
MaxItems: 1,
130+
MinItems: 1,
131+
Elem: &schema.Resource{
132+
Schema: map[string]*schema.Schema{
133+
// Required
134+
"network_endpoint_type": {
135+
Type: schema.TypeString,
136+
Required: true,
137+
ForceNew: true,
138+
DiffSuppressFunc: EqualIgnoreCaseSuppressDiff,
139+
ValidateFunc: validation.StringInSlice([]string{
140+
"PRIVATE",
141+
"PUBLIC",
142+
}, true),
143+
},
144+
145+
// Optional
146+
"subnet_id": {
147+
Type: schema.TypeString,
148+
Optional: true,
149+
Computed: true,
150+
ForceNew: true,
151+
},
152+
"vcn_id": {
153+
Type: schema.TypeString,
154+
Optional: true,
155+
Computed: true,
156+
ForceNew: true,
157+
},
158+
"whitelisted_ips": {
159+
Type: schema.TypeList,
160+
Optional: true,
161+
Computed: true,
162+
ForceNew: true,
163+
Elem: &schema.Schema{
164+
Type: schema.TypeString,
165+
},
166+
},
167+
"whitelisted_vcns": {
168+
Type: schema.TypeList,
169+
Optional: true,
170+
Computed: true,
171+
ForceNew: true,
172+
Elem: &schema.Resource{
173+
Schema: map[string]*schema.Schema{
174+
// Required
175+
176+
// Optional
177+
"id": {
178+
Type: schema.TypeString,
179+
Optional: true,
180+
Computed: true,
181+
ForceNew: true,
182+
},
183+
"whitelisted_ips": {
184+
Type: schema.TypeList,
185+
Optional: true,
186+
Computed: true,
187+
ForceNew: true,
188+
Elem: &schema.Schema{
189+
Type: schema.TypeString,
190+
},
191+
},
192+
193+
// Computed
194+
},
195+
},
196+
},
197+
198+
// Computed
199+
},
200+
},
201+
},
124202

125203
// Computed
126204
"service_url": {
@@ -348,6 +426,17 @@ func (s *AnalyticsAnalyticsInstanceResourceCrud) Create() error {
348426
request.Name = &tmp
349427
}
350428

429+
if networkEndpointDetails, ok := s.D.GetOkExists("network_endpoint_details"); ok {
430+
if tmpList := networkEndpointDetails.([]interface{}); len(tmpList) > 0 {
431+
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "network_endpoint_details", 0)
432+
tmp, err := s.mapToNetworkEndpointDetails(fieldKeyFormat)
433+
if err != nil {
434+
return err
435+
}
436+
request.NetworkEndpointDetails = tmp
437+
}
438+
}
439+
351440
request.RequestMetadata.RetryPolicy = getRetryPolicy(s.DisableNotFoundRetries, "analytics")
352441

353442
response, err := s.Client.CreateAnalyticsInstance(context.Background(), request)
@@ -631,6 +720,16 @@ func (s *AnalyticsAnalyticsInstanceResourceCrud) SetData() error {
631720
s.D.Set("name", *s.Res.Name)
632721
}
633722

723+
if s.Res.NetworkEndpointDetails != nil {
724+
networkEndpointDetailsArray := []interface{}{}
725+
if networkEndpointDetailsMap := NetworkEndpointDetailsToMap(&s.Res.NetworkEndpointDetails); networkEndpointDetailsMap != nil {
726+
networkEndpointDetailsArray = append(networkEndpointDetailsArray, networkEndpointDetailsMap)
727+
}
728+
s.D.Set("network_endpoint_details", networkEndpointDetailsArray)
729+
} else {
730+
s.D.Set("network_endpoint_details", nil)
731+
}
732+
634733
if s.Res.ServiceUrl != nil {
635734
s.D.Set("service_url", *s.Res.ServiceUrl)
636735
}
@@ -675,6 +774,132 @@ func AnalyticsCapacityToMap(obj *oci_analytics.Capacity) map[string]interface{}
675774
return result
676775
}
677776

777+
func (s *AnalyticsAnalyticsInstanceResourceCrud) mapToNetworkEndpointDetails(fieldKeyFormat string) (oci_analytics.NetworkEndpointDetails, error) {
778+
var baseObject oci_analytics.NetworkEndpointDetails
779+
//discriminator
780+
networkEndpointTypeRaw, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "network_endpoint_type"))
781+
var networkEndpointType string
782+
if ok {
783+
networkEndpointType = networkEndpointTypeRaw.(string)
784+
} else {
785+
networkEndpointType = "" // default value
786+
}
787+
switch strings.ToLower(networkEndpointType) {
788+
case strings.ToLower("PRIVATE"):
789+
details := oci_analytics.PrivateEndpointDetails{}
790+
if subnetId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "subnet_id")); ok {
791+
tmp := subnetId.(string)
792+
details.SubnetId = &tmp
793+
}
794+
if vcnId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "vcn_id")); ok {
795+
tmp := vcnId.(string)
796+
details.VcnId = &tmp
797+
}
798+
baseObject = details
799+
case strings.ToLower("PUBLIC"):
800+
details := oci_analytics.PublicEndpointDetails{}
801+
if whitelistedIps, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "whitelisted_ips")); ok {
802+
interfaces := whitelistedIps.([]interface{})
803+
tmp := make([]string, len(interfaces))
804+
for i := range interfaces {
805+
if interfaces[i] != nil {
806+
tmp[i] = interfaces[i].(string)
807+
}
808+
}
809+
if len(tmp) != 0 || s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "whitelisted_ips")) {
810+
details.WhitelistedIps = tmp
811+
}
812+
}
813+
if whitelistedVcns, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "whitelisted_vcns")); ok {
814+
interfaces := whitelistedVcns.([]interface{})
815+
tmp := make([]oci_analytics.VirtualCloudNetwork, len(interfaces))
816+
for i := range interfaces {
817+
stateDataIndex := i
818+
fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "whitelisted_vcns"), stateDataIndex)
819+
converted, err := s.mapToVirtualCloudNetwork(fieldKeyFormatNextLevel)
820+
if err != nil {
821+
return details, err
822+
}
823+
tmp[i] = converted
824+
}
825+
if len(tmp) != 0 || s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "whitelisted_vcns")) {
826+
details.WhitelistedVcns = tmp
827+
}
828+
}
829+
baseObject = details
830+
default:
831+
return nil, fmt.Errorf("unknown network_endpoint_type '%v' was specified", networkEndpointType)
832+
}
833+
return baseObject, nil
834+
}
835+
836+
func NetworkEndpointDetailsToMap(obj *oci_analytics.NetworkEndpointDetails) map[string]interface{} {
837+
result := map[string]interface{}{}
838+
switch v := (*obj).(type) {
839+
case oci_analytics.PrivateEndpointDetails:
840+
result["network_endpoint_type"] = "PRIVATE"
841+
842+
if v.SubnetId != nil {
843+
result["subnet_id"] = string(*v.SubnetId)
844+
}
845+
846+
if v.VcnId != nil {
847+
result["vcn_id"] = string(*v.VcnId)
848+
}
849+
case oci_analytics.PublicEndpointDetails:
850+
result["network_endpoint_type"] = "PUBLIC"
851+
852+
result["whitelisted_ips"] = v.WhitelistedIps
853+
854+
whitelistedVcns := []interface{}{}
855+
for _, item := range v.WhitelistedVcns {
856+
whitelistedVcns = append(whitelistedVcns, VirtualCloudNetworkToMap(item))
857+
}
858+
result["whitelisted_vcns"] = whitelistedVcns
859+
default:
860+
log.Printf("[WARN] Received 'network_endpoint_type' of unknown type %v", *obj)
861+
return nil
862+
}
863+
864+
return result
865+
}
866+
867+
func (s *AnalyticsAnalyticsInstanceResourceCrud) mapToVirtualCloudNetwork(fieldKeyFormat string) (oci_analytics.VirtualCloudNetwork, error) {
868+
result := oci_analytics.VirtualCloudNetwork{}
869+
870+
if id, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "id")); ok {
871+
tmp := id.(string)
872+
result.Id = &tmp
873+
}
874+
875+
if whitelistedIps, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "whitelisted_ips")); ok {
876+
interfaces := whitelistedIps.([]interface{})
877+
tmp := make([]string, len(interfaces))
878+
for i := range interfaces {
879+
if interfaces[i] != nil {
880+
tmp[i] = interfaces[i].(string)
881+
}
882+
}
883+
if len(tmp) != 0 || s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "whitelisted_ips")) {
884+
result.WhitelistedIps = tmp
885+
}
886+
}
887+
888+
return result, nil
889+
}
890+
891+
func VirtualCloudNetworkToMap(obj oci_analytics.VirtualCloudNetwork) map[string]interface{} {
892+
result := map[string]interface{}{}
893+
894+
if obj.Id != nil {
895+
result["id"] = string(*obj.Id)
896+
}
897+
898+
result["whitelisted_ips"] = obj.WhitelistedIps
899+
900+
return result
901+
}
902+
678903
func (s *AnalyticsAnalyticsInstanceResourceCrud) updateCompartment(compartment interface{}) error {
679904
changeCompartmentRequest := oci_analytics.ChangeAnalyticsInstanceCompartmentRequest{}
680905

0 commit comments

Comments
 (0)