Skip to content

Commit 30ebf95

Browse files
Rich Choisankhsin
authored andcommitted
Added - Support for NLB Active/Standby Purist Mode
1 parent 2b47c3b commit 30ebf95

File tree

23 files changed

+495
-166
lines changed

23 files changed

+495
-166
lines changed

examples/network_load_balancer/backend_set_unified/backend_set_unified.tf

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,49 @@ resource "oci_network_load_balancer_network_load_balancers_backend_sets_unified"
228228
depends_on = [oci_network_load_balancer_network_load_balancer.nlb1]
229229
}
230230

231+
resource "oci_network_load_balancer_network_load_balancers_backend_sets_unified" "nlb-bes2" {
232+
name = "nlb-bes2"
233+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
234+
policy = "TWO_TUPLE"
235+
is_instant_failover_enabled = true
236+
is_instant_failover_tcp_reset_enabled = true
237+
are_operationally_active_backends_preferred = true
238+
239+
health_checker {
240+
port = "80"
241+
protocol = "TCP"
242+
request_data = "SGVsbG9Xb3JsZA=="
243+
response_data = "SGVsbG9Xb3JsZA=="
244+
timeout_in_millis = 10000
245+
interval_in_millis = 10000
246+
retries = 3
247+
}
248+
249+
backends {
250+
ip_address = "10.0.0.11"
251+
port = 80
252+
is_backup = true
253+
is_drain = false
254+
is_offline = false
255+
}
256+
257+
backends {
258+
ip_address = "10.0.0.12"
259+
port = 80
260+
is_backup = false
261+
is_drain = false
262+
is_offline = false
263+
}
264+
265+
depends_on = [oci_network_load_balancer_network_load_balancers_backend_sets_unified.nlb-bes1]
266+
}
267+
231268
resource "oci_network_load_balancer_listener" "nlb-listener1" {
232269
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
233270
name = "tcp_listener"
234271
default_backend_set_name = oci_network_load_balancer_network_load_balancers_backend_sets_unified.nlb-bes1.name
235272
port = 80
236273
protocol = "TCP"
237274

238-
depends_on = [oci_network_load_balancer_network_load_balancers_backend_sets_unified.nlb-bes1]
275+
depends_on = [oci_network_load_balancer_network_load_balancers_backend_sets_unified.nlb-bes2]
239276
}

examples/network_load_balancer/network_load_balancer_full/nlb_full.tf

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,13 @@ variable "compartment_ocid" {
1919
variable "region" {
2020
}
2121

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-
}
22+
data "oci_core_images" "test_images" {
23+
compartment_id = var.compartment_ocid
24+
operating_system = "Oracle Linux"
25+
operating_system_version = "8"
26+
shape = var.instance_shape
27+
sort_by = "TIMECREATED"
28+
sort_order = "DESC"
3329
}
3430

3531
variable "instance_shape" {
@@ -241,7 +237,7 @@ resource "oci_core_instance" "instance1" {
241237

242238
source_details {
243239
source_type = "image"
244-
source_id = var.instance_image_ocid[var.region]
240+
source_id = lookup(data.oci_core_images.test_images.images[0], "id")
245241
}
246242
}
247243

@@ -293,6 +289,11 @@ resource "oci_network_load_balancer_network_load_balancer" "nlb-symmetic" {
293289

294290
is_preserve_source_destination = true
295291
is_symmetric_hash_enabled = true
292+
293+
security_attributes = {
294+
"secAttriZprNlb.secAttri.mode" = "enforce"
295+
"secAttriZprNlb.secAttri.value" = "someVal"
296+
}
296297
}
297298

298299
resource "oci_network_load_balancer_backend_set" "nlb-bes-symmetric" {
@@ -350,6 +351,7 @@ resource "oci_network_load_balancer_backend_set" "nlb-bes1" {
350351
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
351352
policy = "TWO_TUPLE"
352353
is_instant_failover_enabled = true
354+
is_instant_failover_tcp_reset_enabled = true
353355

354356
health_checker {
355357
port = "80"
@@ -368,6 +370,7 @@ resource "oci_network_load_balancer_backend_set" "nlb-bes2" {
368370
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
369371
policy = "THREE_TUPLE"
370372
is_instant_failover_enabled = true
373+
is_instant_failover_tcp_reset_enabled = false
371374
is_fail_open = true
372375

373376
health_checker {
@@ -390,6 +393,7 @@ resource "oci_network_load_balancer_backend_set" "nlb-bes3" {
390393
policy = "THREE_TUPLE"
391394
is_fail_open = false
392395
is_instant_failover_enabled = true
396+
are_operationally_active_backends_preferred = true
393397

394398

395399
health_checker {
@@ -503,6 +507,29 @@ resource "oci_network_load_balancer_backend" "nlb-be2" {
503507
depends_on = [oci_network_load_balancer_backend.nlb-be1]
504508
}
505509

510+
resource "oci_network_load_balancer_backend" "nlb-be3" {
511+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
512+
backend_set_name = oci_network_load_balancer_backend_set.nlb-bes3.name
513+
ip_address = "10.1.20.11"
514+
port = 22
515+
is_backup = false
516+
is_drain = false
517+
is_offline = false
518+
weight = 1
519+
depends_on = [oci_network_load_balancer_backend.nlb-be2]
520+
}
521+
522+
resource "oci_network_load_balancer_backend" "nlb-be4" {
523+
network_load_balancer_id = oci_network_load_balancer_network_load_balancer.nlb1.id
524+
backend_set_name = oci_network_load_balancer_backend_set.nlb-bes3.name
525+
ip_address = "10.1.20.12"
526+
port = 22
527+
is_backup = true
528+
is_drain = false
529+
is_offline = false
530+
weight = 1
531+
depends_on = [oci_network_load_balancer_backend.nlb-be3]
532+
}
506533

507534
/* Network Load Balancer IPv6*/
508535

internal/integrationtest/network_load_balancer_backend_set_test.go

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,16 @@ var (
4545
}
4646

4747
NetworkLoadBalancerBackendSetRepresentation = map[string]interface{}{
48-
"health_checker": acctest.RepresentationGroup{RepType: acctest.Required, Group: NetworkLoadBalancerBackendSetHealthCheckerRepresentation},
49-
"name": acctest.Representation{RepType: acctest.Required, Create: `example_backend_set`},
50-
"network_load_balancer_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_network_load_balancer_network_load_balancer.test_network_load_balancer.id}`},
51-
"policy": acctest.Representation{RepType: acctest.Required, Create: `FIVE_TUPLE`, Update: `THREE_TUPLE`},
52-
"ip_version": acctest.Representation{RepType: acctest.Optional, Create: `IPV4`},
53-
"is_fail_open": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
54-
"is_preserve_source": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
55-
"is_instant_failover_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
48+
"health_checker": acctest.RepresentationGroup{RepType: acctest.Required, Group: NetworkLoadBalancerBackendSetHealthCheckerRepresentation},
49+
"name": acctest.Representation{RepType: acctest.Required, Create: `example_backend_set`},
50+
"network_load_balancer_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_network_load_balancer_network_load_balancer.test_network_load_balancer.id}`},
51+
"policy": acctest.Representation{RepType: acctest.Required, Create: `FIVE_TUPLE`, Update: `THREE_TUPLE`},
52+
"are_operationally_active_backends_preferred": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
53+
"ip_version": acctest.Representation{RepType: acctest.Optional, Create: `IPV4`},
54+
"is_fail_open": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
55+
"is_instant_failover_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
56+
"is_instant_failover_tcp_reset_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
57+
"is_preserve_source": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
5658
}
5759
NetworkLoadBalancerBackendSetHealthCheckerRepresentation = map[string]interface{}{
5860
"protocol": acctest.Representation{RepType: acctest.Required, Create: `TCP`, Update: `TCP`},
@@ -174,6 +176,7 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
174176
Config: config + compartmentIdVariableStr + NetworkLoadBalancerBackendSetResourceDependencies +
175177
acctest.GenerateResourceFromRepresentationMap("oci_network_load_balancer_backend_set", "test_backend_set", acctest.Optional, acctest.Create, NetworkLoadBalancerBackendSetRepresentation),
176178
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
179+
resource.TestCheckResourceAttr(resourceName, "are_operationally_active_backends_preferred", "false"),
177180
resource.TestCheckResourceAttr(resourceName, "backends.#", "0"),
178181
resource.TestCheckResourceAttr(resourceName, "health_checker.#", "1"),
179182
resource.TestCheckResourceAttr(resourceName, "health_checker.0.dns.#", "0"),
@@ -189,6 +192,7 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
189192
resource.TestCheckResourceAttr(resourceName, "health_checker.0.url_path", ""),
190193
resource.TestCheckResourceAttr(resourceName, "ip_version", "IPV4"),
191194
resource.TestCheckResourceAttr(resourceName, "is_instant_failover_enabled", "false"),
195+
resource.TestCheckResourceAttr(resourceName, "is_instant_failover_tcp_reset_enabled", "false"),
192196
resource.TestCheckResourceAttr(resourceName, "is_fail_open", "false"),
193197
resource.TestCheckResourceAttr(resourceName, "is_preserve_source", "false"),
194198
resource.TestCheckResourceAttr(resourceName, "name", "example_backend_set"),
@@ -224,6 +228,9 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
224228
resource.TestCheckResourceAttr(resourceName, "health_checker.0.retries", "5"),
225229
resource.TestCheckResourceAttr(resourceName, "health_checker.0.timeout_in_millis", "30000"),
226230
resource.TestCheckResourceAttr(resourceName, "health_checker.0.url_path", ""),
231+
resource.TestCheckResourceAttr(resourceName, "is_instant_failover_enabled", "true"),
232+
resource.TestCheckResourceAttr(resourceName, "is_instant_failover_tcp_reset_enabled", "true"),
233+
resource.TestCheckResourceAttr(resourceName, "are_operationally_active_backends_preferred", "true"),
227234
resource.TestCheckResourceAttr(resourceName, "is_preserve_source", "true"),
228235
resource.TestCheckResourceAttr(resourceName, "name", "example_backend_set"),
229236
resource.TestCheckResourceAttrSet(resourceName, "network_load_balancer_id"),
@@ -285,6 +292,8 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
285292
resource.TestCheckResourceAttr(resourceName, "ip_version", "IPV4"),
286293
resource.TestCheckResourceAttr(resourceName, "is_fail_open", "true"),
287294
resource.TestCheckResourceAttr(resourceName, "is_instant_failover_enabled", "true"),
295+
resource.TestCheckResourceAttr(resourceName, "is_instant_failover_tcp_reset_enabled", "true"),
296+
resource.TestCheckResourceAttr(resourceName, "are_operationally_active_backends_preferred", "true"),
288297
resource.TestCheckResourceAttr(resourceName, "health_checker.0.return_code", "204"),
289298
resource.TestCheckResourceAttr(resourceName, "health_checker.0.timeout_in_millis", "30000"),
290299
resource.TestCheckResourceAttr(resourceName, "health_checker.0.url_path", "/urlPath2"),
@@ -400,6 +409,9 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
400409
resource.TestCheckResourceAttr(resourceName, "health_checker.0.response_body_regex", "^(?i)(false)$"),
401410
resource.TestCheckResourceAttr(resourceName, "health_checker.0.retries", "5"),
402411
resource.TestCheckResourceAttr(resourceName, "is_fail_open", "true"),
412+
resource.TestCheckResourceAttr(resourceName, "is_instant_failover_enabled", "true"),
413+
resource.TestCheckResourceAttr(resourceName, "is_instant_failover_tcp_reset_enabled", "true"),
414+
resource.TestCheckResourceAttr(resourceName, "are_operationally_active_backends_preferred", "true"),
403415
resource.TestCheckResourceAttr(resourceName, "health_checker.0.return_code", "204"),
404416
resource.TestCheckResourceAttr(resourceName, "health_checker.0.timeout_in_millis", "30000"),
405417
resource.TestCheckResourceAttr(resourceName, "health_checker.0.url_path", "/urlPath2"),
@@ -482,7 +494,8 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
482494
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
483495
resource.TestCheckResourceAttr(datasourceName, "backend_set_collection.#", "1"),
484496
resource.TestCheckResourceAttr(datasourceName, "backend_set_collection.0.items.#", "1"),
485-
resource.TestCheckNoResourceAttr(datasourceName, "backend_set_collection.0.items.0.backends"),
497+
resource.TestCheckResourceAttr(datasourceName, "backend_set_collection.0.items.0.backends.#", "0"),
498+
//resource.TestCheckNoResourceAttr(datasourceName, "backend_set_collection.0.items.0.backends"),
486499
resource.TestCheckResourceAttr(resourceName, "health_checker.#", "1"),
487500
resource.TestCheckResourceAttr(resourceName, "health_checker.0.interval_in_millis", "30000"),
488501
resource.TestCheckResourceAttr(resourceName, "health_checker.0.port", "8080"),
@@ -532,6 +545,7 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
532545
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
533546
resource.TestCheckResourceAttrSet(singularDatasourceName, "backend_set_name"),
534547
resource.TestCheckResourceAttrSet(singularDatasourceName, "network_load_balancer_id"),
548+
resource.TestCheckResourceAttr(singularDatasourceName, "are_operationally_active_backends_preferred", "true"),
535549
resource.TestCheckResourceAttr(singularDatasourceName, "backends.#", "0"),
536550
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.#", "1"),
537551
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.0.interval_in_millis", "30000"),
@@ -542,6 +556,7 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
542556
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.0.response_data", ""),
543557
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.0.retries", "5"),
544558
resource.TestCheckResourceAttr(singularDatasourceName, "is_instant_failover_enabled", "true"),
559+
resource.TestCheckResourceAttr(singularDatasourceName, "is_instant_failover_tcp_reset_enabled", "true"),
545560
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.0.return_code", "204"),
546561
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.0.timeout_in_millis", "30000"),
547562
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.0.url_path", "/urlPath2"),
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright (c) 2017, 2024, 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/oracle/terraform-provider-oci/httpreplay"
13+
"github.com/oracle/terraform-provider-oci/internal/acctest"
14+
15+
"github.com/oracle/terraform-provider-oci/internal/utils"
16+
)
17+
18+
var (
19+
NetworkLoadBalancerNetworkLoadBalancerBackendSetBackendOperationalStatusSingularDataSourceRepresentation = map[string]interface{}{
20+
"backend_name": acctest.Representation{RepType: acctest.Required, Create: `${oci_network_load_balancer_backend.test_backend.name}`},
21+
"backend_set_name": acctest.Representation{RepType: acctest.Required, Create: `${oci_network_load_balancer_backend_set.test_backend_set.name}`},
22+
"network_load_balancer_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_network_load_balancer_network_load_balancer.test_network_load_balancer.id}`},
23+
}
24+
25+
NetworkLoadBalancerNetworkLoadBalancerBackendSetBackendOperationalStatusResourceConfig = acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, CoreSubnetRepresentation) +
26+
acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, CoreVcnRepresentation) +
27+
acctest.GenerateResourceFromRepresentationMap("oci_network_load_balancer_backend_set", "test_backend_set", acctest.Required, acctest.Create, NetworkLoadBalancerBackendSetRepresentation) +
28+
acctest.GenerateResourceFromRepresentationMap("oci_network_load_balancer_backend", "test_backend", acctest.Required, acctest.Create, NetworkLoadBalancerBackendRepresentation) +
29+
acctest.GenerateResourceFromRepresentationMap("oci_network_load_balancer_network_load_balancer", "test_network_load_balancer", acctest.Required, acctest.Create, NetworkLoadBalancerNetworkLoadBalancerRepresentation)
30+
)
31+
32+
// issue-routing-tag: network_load_balancer/default
33+
func TestNetworkLoadBalancerNetworkLoadBalancerBackendSetBackendOperationalStatusResource_basic(t *testing.T) {
34+
httpreplay.SetScenario("TestNetworkLoadBalancerNetworkLoadBalancerBackendSetBackendOperationalStatusResource_basic")
35+
defer httpreplay.SaveScenario()
36+
37+
config := acctest.ProviderTestConfig()
38+
39+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
40+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
41+
42+
singularDatasourceName := "data.oci_network_load_balancer_network_load_balancer_backend_set_backend_operational_status.test_network_load_balancer_backend_set_backend_operational_status"
43+
44+
acctest.SaveConfigContent("", "", "", t)
45+
46+
acctest.ResourceTest(t, nil, []resource.TestStep{
47+
// verify singular datasource
48+
{
49+
Config: config +
50+
acctest.GenerateDataSourceFromRepresentationMap("oci_network_load_balancer_network_load_balancer_backend_set_backend_operational_status", "test_network_load_balancer_backend_set_backend_operational_status", acctest.Required, acctest.Create, NetworkLoadBalancerNetworkLoadBalancerBackendSetBackendOperationalStatusSingularDataSourceRepresentation) +
51+
compartmentIdVariableStr + NetworkLoadBalancerNetworkLoadBalancerBackendSetBackendOperationalStatusResourceConfig,
52+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
53+
resource.TestCheckResourceAttrSet(singularDatasourceName, "backend_name"),
54+
resource.TestCheckResourceAttrSet(singularDatasourceName, "backend_set_name"),
55+
resource.TestCheckResourceAttrSet(singularDatasourceName, "network_load_balancer_id"),
56+
57+
resource.TestCheckResourceAttrSet(singularDatasourceName, "status"),
58+
),
59+
},
60+
})
61+
}

internal/integrationtest/network_load_balancer_network_load_balancer_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ var (
6363
"reserved_ips": acctest.RepresentationGroup{RepType: acctest.Optional, Group: networkLoadBalancerReservedIpsRepresentation},
6464
"network_security_group_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${oci_core_network_security_group.test_network_security_group.id}`}},
6565
"lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: NetworkLoadBalancerIgnoreChangesRepresentation},
66-
"security_attributes": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"secAttriZprNlbIAD.secAttriIAD.mode": "enforce", "secAttriZprNlbIAD.secAttriIAD.value": "someVal"}},
66+
"security_attributes": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"secAttriZprNlb.secAttri.mode": "enforce", "secAttriZprNlb.secAttri.value": "someVal"}},
6767
}
6868

6969
NetworkLoadBalancerSubnetIpv6CidrRepresentation = map[string]interface{}{

0 commit comments

Comments
 (0)