Skip to content

Commit 798afa0

Browse files
Terraform Team AutomationMonica Joshi
authored andcommitted
Added - Support for NLB Transparent Mode(Non-SNAT Use Case)
1 parent 707834f commit 798afa0

15 files changed

+284
-89
lines changed

examples/network_load_balancer/network_load_balancer_full/nlb_full.tf

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,12 +233,62 @@ EOF
233233

234234
/* Network Load Balancer */
235235

236+
resource "oci_network_load_balancer_network_load_balancer" "nlb-symmetic" {
237+
compartment_id = var.compartment_ocid
238+
239+
subnet_id = oci_core_subnet.subnet1.id
240+
241+
display_name = "nlb-symmetic"
242+
243+
is_preserve_source_destination = true
244+
is_symmetric_hash_enabled = true
245+
}
246+
247+
resource "oci_network_load_balancer_backend_set" "nlb-bes-symmetric" {
248+
name = "nlb-bes-symmetric"
249+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb-symmetic.id
250+
policy = "TWO_TUPLE"
251+
252+
health_checker {
253+
port = "8090"
254+
protocol = "TCP"
255+
request_data = "SGVsbG9Xb3JsZA=="
256+
response_data = "SGVsbG9Xb3JsZA=="
257+
timeout_in_millis = 10000
258+
interval_in_millis = 10000
259+
retries = 3
260+
}
261+
depends_on = [oci_network_load_balancer_network_load_balancer.nlb-symmetic]
262+
}
263+
264+
resource "oci_network_load_balancer_listener" "nlb-listener-symmetric" {
265+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb-symmetic.id
266+
name = "tcp_listener_symmetric"
267+
default_backend_set_name = oci_network_load_balancer_backend_set.nlb-bes-symmetric.name
268+
port = 80
269+
protocol = "TCP"
270+
depends_on = [oci_network_load_balancer_backend_set.nlb-bes-symmetric]
271+
}
272+
273+
resource "oci_network_load_balancer_backend" "nlb-be-symmetic" {
274+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb-symmetic.id
275+
backend_set_name = oci_network_load_balancer_backend_set.nlb-bes-symmetric.name
276+
ip_address = "10.1.20.2"
277+
port = 80
278+
is_backup = false
279+
is_drain = false
280+
is_offline = false
281+
weight = 1
282+
depends_on = [oci_network_load_balancer_listener.nlb-listener-symmetric]
283+
}
284+
236285
resource "oci_network_load_balancer_network_load_balancer" "nlb1" {
237286
compartment_id = var.compartment_ocid
238287

239288
subnet_id = oci_core_subnet.subnet1.id
240289

241290
display_name = "nlb1"
291+
is_symmetric_hash_enabled = false
242292
}
243293

244294
resource "oci_network_load_balancer_backend_set" "nlb-bes1" {
@@ -255,6 +305,7 @@ resource "oci_network_load_balancer_backend_set" "nlb-bes1" {
255305
interval_in_millis = 10000
256306
retries = 3
257307
}
308+
depends_on = [oci_network_load_balancer_network_load_balancer.nlb1]
258309
}
259310

260311
resource "oci_network_load_balancer_backend_set" "nlb-bes2" {
@@ -272,6 +323,7 @@ resource "oci_network_load_balancer_backend_set" "nlb-bes2" {
272323
interval_in_millis = 10000
273324
retries = 3
274325
}
326+
depends_on = [oci_network_load_balancer_backend_set.nlb-bes1]
275327
}
276328

277329
resource "oci_network_load_balancer_backend_set" "nlb-bes3" {
@@ -289,6 +341,7 @@ resource "oci_network_load_balancer_backend_set" "nlb-bes3" {
289341
interval_in_millis = 10000
290342
retries = 3
291343
}
344+
depends_on = [oci_network_load_balancer_backend_set.nlb-bes2]
292345
}
293346

294347
resource "oci_network_load_balancer_listener" "nlb-listener1" {
@@ -297,6 +350,7 @@ resource "oci_network_load_balancer_listener" "nlb-listener1" {
297350
default_backend_set_name = oci_network_load_balancer_backend_set.nlb-bes1.name
298351
port = 80
299352
protocol = "TCP"
353+
depends_on = [oci_network_load_balancer_backend_set.nlb-bes3]
300354
}
301355

302356
resource "oci_network_load_balancer_listener" "nlb-listener2" {
@@ -305,25 +359,28 @@ resource "oci_network_load_balancer_listener" "nlb-listener2" {
305359
default_backend_set_name = oci_network_load_balancer_backend_set.nlb-bes2.name
306360
port = 80
307361
protocol = "UDP"
362+
depends_on = [oci_network_load_balancer_listener.nlb-listener1]
308363
}
309364

310365
resource "oci_network_load_balancer_listener" "nlb-listener3" {
311366
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
312367
name = "tcp_and_udp_listener"
313368
default_backend_set_name = oci_network_load_balancer_backend_set.nlb-bes3.name
314-
port = 80
369+
port = 8080
315370
protocol = "TCP_AND_UDP"
371+
depends_on = [oci_network_load_balancer_listener.nlb-listener2]
316372
}
317373

318374
resource "oci_network_load_balancer_backend" "nlb-be1" {
319375
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
320376
backend_set_name = oci_network_load_balancer_backend_set.nlb-bes1.name
321-
ip_address = "10.0.0.3"
377+
ip_address = "10.1.20.1"
322378
port = 80
323379
is_backup = false
324380
is_drain = false
325381
is_offline = false
326382
weight = 1
383+
depends_on = [oci_network_load_balancer_listener.nlb-listener3]
327384
}
328385

329386
resource "oci_network_load_balancer_backend" "nlb-be2" {
@@ -335,6 +392,7 @@ resource "oci_network_load_balancer_backend" "nlb-be2" {
335392
is_drain = false
336393
is_offline = false
337394
weight = 1
395+
depends_on = [oci_network_load_balancer_backend.nlb-be1]
338396
}
339397

340398

@@ -376,6 +434,7 @@ resource "oci_network_load_balancer_backend_set" "nlb-bes-ipv6" {
376434
interval_in_millis = 10000
377435
retries = 3
378436
}
437+
depends_on = [oci_network_load_balancer_network_load_balancer.nlb-ipv6]
379438
}
380439

381440
resource "oci_network_load_balancer_listener" "nlb-listener-ipv6" {
@@ -385,6 +444,7 @@ resource "oci_network_load_balancer_listener" "nlb-listener-ipv6" {
385444
port = 80
386445
protocol = "TCP"
387446
ip_version = "IPV6"
447+
depends_on = [oci_network_load_balancer_backend_set.nlb-bes-ipv6]
388448
}
389449

390450
resource "oci_network_load_balancer_backend" "nlb-be-ipv6" {
@@ -396,4 +456,5 @@ resource "oci_network_load_balancer_backend" "nlb-be-ipv6" {
396456
is_drain = false
397457
is_offline = false
398458
weight = 1
399-
}
459+
depends_on = [oci_network_load_balancer_listener.nlb-listener-ipv6]
460+
}

internal/integrationtest/network_load_balancer_network_load_balancer_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ var (
4646
"values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_network_load_balancer_network_load_balancer.test_network_load_balancer.id}`}},
4747
}
4848

49+
ignoreNlbDefinedTagsChangesRepresentation = map[string]interface{}{
50+
"ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`defined_tags`}},
51+
}
52+
4953
NetworkLoadBalancerNetworkLoadBalancerRepresentation = map[string]interface{}{
5054
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
5155
"display_name": acctest.Representation{RepType: acctest.Required, Create: `displayName`, Update: `displayName2`},
@@ -54,9 +58,11 @@ var (
5458
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}},
5559
"is_preserve_source_destination": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
5660
"is_private": acctest.Representation{RepType: acctest.Optional, Create: `false`},
61+
"is_symmetric_hash_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
5762
"nlb_ip_version": acctest.Representation{RepType: acctest.Optional, Create: `IPV4`, Update: `IPV4_AND_IPV6`},
5863
"network_security_group_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${oci_core_network_security_group.test_network_security_group.id}`}},
5964
"reserved_ips": acctest.RepresentationGroup{RepType: acctest.Optional, Group: networkLoadBalancerReservedIpsRepresentation},
65+
"lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: ignoreNlbDefinedTagsChangesRepresentation},
6066
}
6167
networkLoadBalancerRepresentationIpv6 = map[string]interface{}{
6268
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
@@ -68,6 +74,7 @@ var (
6874
"is_private": acctest.Representation{RepType: acctest.Optional, Create: `false`},
6975
"nlb_ip_version": acctest.Representation{RepType: acctest.Optional, Create: `IPV4_AND_IPV6`},
7076
"network_security_group_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${oci_core_network_security_group.test_network_security_group.id}`}},
77+
"lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: ignoreNlbDefinedTagsChangesRepresentation},
7178
}
7279
networkLoadBalancerReservedIpsRepresentation = map[string]interface{}{
7380
"id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_core_public_ip.test_public_ip.id}`},
@@ -173,6 +180,7 @@ func TestNetworkLoadBalancerNetworkLoadBalancerResource_basic(t *testing.T) {
173180
resource.TestCheckResourceAttrSet(resourceName, "id"),
174181
resource.TestCheckResourceAttr(resourceName, "is_preserve_source_destination", "false"),
175182
resource.TestCheckResourceAttr(resourceName, "is_private", "false"),
183+
resource.TestCheckResourceAttr(resourceName, "is_symmetric_hash_enabled", "false"),
176184
resource.TestCheckResourceAttr(resourceName, "nlb_ip_version", "IPV4"),
177185
resource.TestCheckResourceAttr(resourceName, "ip_addresses.#", "1"),
178186
resource.TestCheckResourceAttr(resourceName, "ip_addresses.0.is_public", "true"),
@@ -209,6 +217,7 @@ func TestNetworkLoadBalancerNetworkLoadBalancerResource_basic(t *testing.T) {
209217
resource.TestCheckResourceAttrSet(resourceName, "id"),
210218
resource.TestCheckResourceAttr(resourceName, "is_preserve_source_destination", "false"),
211219
resource.TestCheckResourceAttr(resourceName, "is_private", "false"),
220+
resource.TestCheckResourceAttr(resourceName, "is_symmetric_hash_enabled", "false"),
212221
resource.TestCheckResourceAttr(resourceName, "nlb_ip_version", "IPV4"),
213222
resource.TestCheckResourceAttrSet(resourceName, "ip_addresses.0.ip_address"),
214223
resource.TestCheckResourceAttrSet(resourceName, "ip_addresses.0.reserved_ip.0.id"),
@@ -240,6 +249,7 @@ func TestNetworkLoadBalancerNetworkLoadBalancerResource_basic(t *testing.T) {
240249
resource.TestCheckResourceAttr(resourceName, "ip_addresses.0.is_public", "false"),
241250
resource.TestCheckResourceAttr(resourceName, "is_preserve_source_destination", "true"),
242251
resource.TestCheckResourceAttr(resourceName, "is_private", "false"),
252+
resource.TestCheckResourceAttr(resourceName, "is_symmetric_hash_enabled", "true"),
243253
resource.TestCheckResourceAttr(resourceName, "nlb_ip_version", "IPV4_AND_IPV6"),
244254
resource.TestCheckResourceAttr(resourceName, "ip_addresses.#", "2"),
245255
resource.TestCheckResourceAttrSet(resourceName, "state"),
@@ -320,6 +330,7 @@ func TestNetworkLoadBalancerNetworkLoadBalancerResource_basic(t *testing.T) {
320330
resource.TestCheckResourceAttr(singularDatasourceName, "ip_addresses.0.is_public", "false"),
321331
resource.TestCheckResourceAttr(singularDatasourceName, "is_preserve_source_destination", "true"),
322332
resource.TestCheckResourceAttr(singularDatasourceName, "is_private", "false"),
333+
resource.TestCheckResourceAttr(singularDatasourceName, "is_symmetric_hash_enabled", "true"),
323334
resource.TestCheckResourceAttr(singularDatasourceName, "nlb_ip_version", "IPV4_AND_IPV6"),
324335
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),
325336
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),

internal/service/network_load_balancer/network_load_balancer_network_load_balancer_data_source.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ func (s *NetworkLoadBalancerNetworkLoadBalancerDataSourceCrud) SetData() error {
9494
s.D.Set("is_private", *s.Res.IsPrivate)
9595
}
9696

97+
if s.Res.IsSymmetricHashEnabled != nil {
98+
s.D.Set("is_symmetric_hash_enabled", *s.Res.IsSymmetricHashEnabled)
99+
}
100+
97101
if s.Res.LifecycleDetails != nil {
98102
s.D.Set("lifecycle_details", *s.Res.LifecycleDetails)
99103
}

internal/service/network_load_balancer/network_load_balancer_network_load_balancer_resource.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ func NetworkLoadBalancerNetworkLoadBalancerResource() *schema.Resource {
7070
Computed: true,
7171
ForceNew: true,
7272
},
73+
"is_symmetric_hash_enabled": {
74+
Type: schema.TypeBool,
75+
Optional: true,
76+
Computed: true,
77+
},
7378
"network_security_group_ids": {
7479
Type: schema.TypeSet,
7580
Optional: true,
@@ -277,6 +282,11 @@ func (s *NetworkLoadBalancerNetworkLoadBalancerResourceCrud) Create() error {
277282
request.IsPrivate = &tmp
278283
}
279284

285+
if isSymmetricHashEnabled, ok := s.D.GetOkExists("is_symmetric_hash_enabled"); ok {
286+
tmp := isSymmetricHashEnabled.(bool)
287+
request.IsSymmetricHashEnabled = &tmp
288+
}
289+
280290
if networkSecurityGroupIds, ok := s.D.GetOkExists("network_security_group_ids"); ok {
281291
set := networkSecurityGroupIds.(*schema.Set)
282292
interfaces := set.List()
@@ -507,6 +517,11 @@ func (s *NetworkLoadBalancerNetworkLoadBalancerResourceCrud) Update() error {
507517
request.IsPreserveSourceDestination = &tmp
508518
}
509519

520+
if isSymmetricHashEnabled, ok := s.D.GetOkExists("is_symmetric_hash_enabled"); ok {
521+
tmp := isSymmetricHashEnabled.(bool)
522+
request.IsSymmetricHashEnabled = &tmp
523+
}
524+
510525
tmp := s.D.Id()
511526
request.NetworkLoadBalancerId = &tmp
512527
if nlbIpVersion, ok := s.D.GetOkExists("nlb_ip_version"); ok {
@@ -572,6 +587,10 @@ func (s *NetworkLoadBalancerNetworkLoadBalancerResourceCrud) SetData() error {
572587
s.D.Set("is_private", *s.Res.IsPrivate)
573588
}
574589

590+
if s.Res.IsSymmetricHashEnabled != nil {
591+
s.D.Set("is_symmetric_hash_enabled", *s.Res.IsSymmetricHashEnabled)
592+
}
593+
575594
if s.Res.LifecycleDetails != nil {
576595
s.D.Set("lifecycle_details", *s.Res.LifecycleDetails)
577596
}
@@ -656,6 +675,10 @@ func NetworkLoadBalancerSummaryToMap(obj oci_network_load_balancer.NetworkLoadBa
656675
result["is_private"] = bool(*obj.IsPrivate)
657676
}
658677

678+
if obj.IsSymmetricHashEnabled != nil {
679+
result["is_symmetric_hash_enabled"] = bool(*obj.IsSymmetricHashEnabled)
680+
}
681+
659682
if obj.LifecycleDetails != nil {
660683
result["lifecycle_details"] = string(*obj.LifecycleDetails)
661684
}

0 commit comments

Comments
 (0)