Skip to content

Commit d6f5d5b

Browse files
Support Network Load Balancer
1 parent adc9971 commit d6f5d5b

File tree

53 files changed

+7683
-42
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+7683
-42
lines changed
Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
variable "tenancy_ocid" {
5+
}
6+
7+
variable "user_ocid" {
8+
}
9+
10+
variable "fingerprint" {
11+
}
12+
13+
variable "private_key_path" {
14+
}
15+
16+
variable "compartment_ocid" {
17+
}
18+
19+
variable "region" {
20+
}
21+
22+
variable "instance_image_ocid" {
23+
type = map(string)
24+
25+
default = {
26+
# See https://docs.us-phoenix-1.oraclecloud.com/images/
27+
# Oracle-provided image "Oracle-Linux-7.5-2018.10.16-0"
28+
us-phoenix-1 = "ocid1.image.oc1.phx.aaaaaaaaoqj42sokaoh42l76wsyhn3k2beuntrh5maj3gmgmzeyr55zzrwwa"
29+
us-ashburn-1 = "ocid1.image.oc1.iad.aaaaaaaageeenzyuxgia726xur4ztaoxbxyjlxogdhreu3ngfj2gji3bayda"
30+
eu-frankfurt-1 = "ocid1.image.oc1.eu-frankfurt-1.aaaaaaaaitzn6tdyjer7jl34h2ujz74jwy5nkbukbh55ekp6oyzwrtfa4zma"
31+
uk-london-1 = "ocid1.image.oc1.uk-london-1.aaaaaaaa32voyikkkzfxyo4xbdmadc2dmvorfxxgdhpnk6dw64fa3l4jh7wa"
32+
}
33+
}
34+
35+
variable "instance_shape" {
36+
default = "VM.Standard2.1"
37+
}
38+
39+
variable "availability_domain" {
40+
default = 3
41+
}
42+
43+
provider "oci" {
44+
tenancy_ocid = var.tenancy_ocid
45+
user_ocid = var.user_ocid
46+
fingerprint = var.fingerprint
47+
private_key_path = var.private_key_path
48+
region = var.region
49+
}
50+
51+
data "oci_identity_availability_domain" "ad1" {
52+
compartment_id = var.tenancy_ocid
53+
ad_number = 1
54+
}
55+
56+
/* Network */
57+
58+
resource "oci_core_vcn" "vcn1" {
59+
cidr_block = "10.1.0.0/16"
60+
compartment_id = var.compartment_ocid
61+
display_name = "vcn1"
62+
dns_label = "vcn1"
63+
}
64+
65+
resource "oci_core_subnet" "subnet1" {
66+
cidr_block = "10.1.20.0/24"
67+
display_name = "subnet1"
68+
dns_label = "subnet1"
69+
security_list_ids = [oci_core_security_list.securitylist1.id]
70+
compartment_id = var.compartment_ocid
71+
vcn_id = oci_core_vcn.vcn1.id
72+
route_table_id = oci_core_route_table.routetable1.id
73+
dhcp_options_id = oci_core_vcn.vcn1.default_dhcp_options_id
74+
75+
provisioner "local-exec" {
76+
command = "sleep 5"
77+
}
78+
}
79+
80+
resource "oci_core_public_ip" "test_reserved_ip" {
81+
compartment_id = "${var.compartment_ocid}"
82+
lifetime = "RESERVED"
83+
84+
lifecycle {
85+
ignore_changes = [private_ip_id]
86+
}
87+
}
88+
89+
resource "oci_core_internet_gateway" "internetgateway1" {
90+
compartment_id = var.compartment_ocid
91+
display_name = "internetgateway1"
92+
vcn_id = oci_core_vcn.vcn1.id
93+
}
94+
95+
resource "oci_core_route_table" "routetable1" {
96+
compartment_id = var.compartment_ocid
97+
vcn_id = oci_core_vcn.vcn1.id
98+
display_name = "routetable1"
99+
100+
route_rules {
101+
destination = "0.0.0.0/0"
102+
destination_type = "CIDR_BLOCK"
103+
network_entity_id = oci_core_internet_gateway.internetgateway1.id
104+
}
105+
}
106+
107+
resource "oci_core_security_list" "securitylist1" {
108+
display_name = "public"
109+
compartment_id = oci_core_vcn.vcn1.compartment_id
110+
vcn_id = oci_core_vcn.vcn1.id
111+
112+
egress_security_rules {
113+
protocol = "all"
114+
destination = "0.0.0.0/0"
115+
}
116+
117+
ingress_security_rules {
118+
protocol = "6"
119+
source = "0.0.0.0/0"
120+
121+
tcp_options {
122+
min = 80
123+
max = 80
124+
}
125+
}
126+
127+
ingress_security_rules {
128+
protocol = "6"
129+
source = "0.0.0.0/0"
130+
131+
tcp_options {
132+
min = 443
133+
max = 443
134+
}
135+
}
136+
}
137+
138+
/* Instances */
139+
140+
resource "oci_core_instance" "instance1" {
141+
availability_domain = data.oci_identity_availability_domain.ad1.name
142+
compartment_id = var.compartment_ocid
143+
display_name = "be-instance1"
144+
shape = var.instance_shape
145+
146+
metadata = {
147+
user_data = base64encode(var.user-data)
148+
}
149+
150+
create_vnic_details {
151+
subnet_id = oci_core_subnet.subnet1.id
152+
hostname_label = "be-instance1"
153+
}
154+
155+
source_details {
156+
source_type = "image"
157+
source_id = var.instance_image_ocid[var.region]
158+
}
159+
}
160+
161+
variable "user-data" {
162+
default = <<EOF
163+
#!/bin/bash -x
164+
echo '################### webserver userdata begins #####################'
165+
touch ~opc/userdata.`date +%s`.start
166+
167+
# echo '########## yum update all ###############'
168+
# yum update -y
169+
170+
echo '########## basic webserver ##############'
171+
yum install -y httpd
172+
systemctl enable httpd.service
173+
systemctl start httpd.service
174+
echo '<html><head></head><body><pre><code>' > /var/www/html/index.html
175+
hostname >> /var/www/html/index.html
176+
echo '' >> /var/www/html/index.html
177+
cat /etc/os-release >> /var/www/html/index.html
178+
echo '</code></pre></body></html>' >> /var/www/html/index.html
179+
firewall-offline-cmd --add-service=http
180+
systemctl enable firewalld
181+
systemctl restart firewalld
182+
183+
touch ~opc/userdata.`date +%s`.finish
184+
echo '################### webserver userdata ends #######################'
185+
EOF
186+
187+
}
188+
189+
/* Network Load Balancer */
190+
191+
resource "oci_network_load_balancer_network_load_balancer" "nlb1" {
192+
compartment_id = var.compartment_ocid
193+
194+
subnet_id = oci_core_subnet.subnet1.id
195+
196+
display_name = "nlb1"
197+
}
198+
199+
resource "oci_network_load_balancer_backend_set" "nlb-bes1" {
200+
name = "nlb-bes1"
201+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
202+
policy = "TWO_TUPLE"
203+
204+
health_checker {
205+
port = "80"
206+
protocol = "TCP"
207+
request_data = "SGVsbG9Xb3JsZA=="
208+
response_data = "SGVsbG9Xb3JsZA=="
209+
timeout_in_millis = 10000
210+
interval_in_millis = 10000
211+
retries = 3
212+
}
213+
}
214+
215+
resource "oci_network_load_balancer_backend_set" "nlb-bes2" {
216+
name = "nlb-bes2"
217+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
218+
policy = "THREE_TUPLE"
219+
220+
health_checker {
221+
port = "443"
222+
protocol = "HTTPS"
223+
url_path = "/testPath"
224+
return_code = 200
225+
response_body_regex = "^(?i)(true)$"
226+
timeout_in_millis = 10000
227+
interval_in_millis = 10000
228+
retries = 3
229+
}
230+
}
231+
232+
resource "oci_network_load_balancer_listener" "nlb-listener1" {
233+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
234+
name = "tcp_listener"
235+
default_backend_set_name = oci_network_load_balancer_backend_set.nlb-bes1.name
236+
port = 80
237+
protocol = "TCP"
238+
}
239+
240+
resource "oci_network_load_balancer_listener" "nlb-listener2" {
241+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
242+
name = "udp_listener"
243+
default_backend_set_name = oci_network_load_balancer_backend_set.nlb-bes2.name
244+
port = 80
245+
protocol = "UDP"
246+
}
247+
248+
resource "oci_network_load_balancer_backend" "nlb-be1" {
249+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
250+
backend_set_name = oci_network_load_balancer_backend_set.nlb-bes1.name
251+
ip_address = "10.0.0.3"
252+
port = 80
253+
is_backup = false
254+
is_drain = false
255+
is_offline = false
256+
weight = 1
257+
}
258+
259+
resource "oci_network_load_balancer_backend" "nlb-be2" {
260+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
261+
backend_set_name = oci_network_load_balancer_backend_set.nlb-bes2.name
262+
target_id = oci_core_instance.instance1.id
263+
port = 20
264+
is_backup = false
265+
is_drain = false
266+
is_offline = false
267+
weight = 1
268+
}

oci/export_definitions.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
oci_marketplace "github.com/oracle/oci-go-sdk/v36/marketplace"
3636
oci_monitoring "github.com/oracle/oci-go-sdk/v36/monitoring"
3737
oci_mysql "github.com/oracle/oci-go-sdk/v36/mysql"
38+
oci_network_load_balancer "github.com/oracle/oci-go-sdk/v36/networkloadbalancer"
3839
oci_nosql "github.com/oracle/oci-go-sdk/v36/nosql"
3940
oci_oce "github.com/oracle/oci-go-sdk/v36/oce"
4041
oci_ocvp "github.com/oracle/oci-go-sdk/v36/ocvp"
@@ -1659,6 +1660,45 @@ var exportMysqlChannelHints = &TerraformResourceHints{
16591660
},
16601661
}
16611662

1663+
var exportNetworkLoadBalancerNetworkLoadBalancerHints = &TerraformResourceHints{
1664+
resourceClass: "oci_network_load_balancer_network_load_balancer",
1665+
datasourceClass: "oci_network_load_balancer_network_load_balancers",
1666+
datasourceItemsAttr: "network_load_balancer_collection",
1667+
isDatasourceCollection: true,
1668+
resourceAbbreviation: "network_load_balancer",
1669+
requireResourceRefresh: true,
1670+
discoverableLifecycleStates: []string{
1671+
string(oci_network_load_balancer.LifecycleStateActive),
1672+
},
1673+
}
1674+
1675+
var exportNetworkLoadBalancerBackendSetHints = &TerraformResourceHints{
1676+
resourceClass: "oci_network_load_balancer_backend_set",
1677+
datasourceClass: "oci_network_load_balancer_backend_sets",
1678+
datasourceItemsAttr: "backend_set_collection",
1679+
isDatasourceCollection: true,
1680+
resourceAbbreviation: "backend_set",
1681+
requireResourceRefresh: true,
1682+
}
1683+
1684+
var exportNetworkLoadBalancerBackendHints = &TerraformResourceHints{
1685+
resourceClass: "oci_network_load_balancer_backend",
1686+
datasourceClass: "oci_network_load_balancer_backends",
1687+
datasourceItemsAttr: "backend_collection",
1688+
isDatasourceCollection: true,
1689+
resourceAbbreviation: "backend",
1690+
requireResourceRefresh: true,
1691+
}
1692+
1693+
var exportNetworkLoadBalancerListenerHints = &TerraformResourceHints{
1694+
resourceClass: "oci_network_load_balancer_listener",
1695+
datasourceClass: "oci_network_load_balancer_listeners",
1696+
datasourceItemsAttr: "listener_collection",
1697+
isDatasourceCollection: true,
1698+
resourceAbbreviation: "listener",
1699+
requireResourceRefresh: true,
1700+
}
1701+
16621702
var exportNosqlTableHints = &TerraformResourceHints{
16631703
resourceClass: "oci_nosql_table",
16641704
datasourceClass: "oci_nosql_tables",

0 commit comments

Comments
 (0)