Skip to content

Commit e4fc414

Browse files
Anish Vermavarmax2511
authored andcommitted
Added - Support for IPv6 support on Network Load Balancer
1 parent a486b05 commit e4fc414

18 files changed

+193
-12
lines changed

oci/network_load_balancer_backend_set_data_source.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ func (s *NetworkLoadBalancerBackendSetDataSourceCrud) SetData() error {
8888
s.D.Set("health_checker", nil)
8989
}
9090

91+
s.D.Set("ip_version", s.Res.IpVersion)
92+
9193
if s.Res.IsPreserveSource != nil {
9294
s.D.Set("is_preserve_source", *s.Res.IsPreserveSource)
9395
}

oci/network_load_balancer_backend_set_resource.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,11 @@ func NetworkLoadBalancerBackendSetResource() *schema.Resource {
119119
},
120120

121121
// Optional
122+
"ip_version": {
123+
Type: schema.TypeString,
124+
Optional: true,
125+
Computed: true,
126+
},
122127
"is_preserve_source": {
123128
Type: schema.TypeBool,
124129
Optional: true,
@@ -247,6 +252,10 @@ func (s *NetworkLoadBalancerBackendSetResourceCrud) Create() error {
247252
}
248253
}
249254

255+
if ipVersion, ok := s.D.GetOkExists("ip_version"); ok {
256+
request.IpVersion = oci_network_load_balancer.IpVersionEnum(ipVersion.(string))
257+
}
258+
250259
if isPreserveSource, ok := s.D.GetOkExists("is_preserve_source"); ok {
251260
tmp := isPreserveSource.(bool)
252261
request.IsPreserveSource = &tmp
@@ -472,6 +481,10 @@ func (s *NetworkLoadBalancerBackendSetResourceCrud) Update() error {
472481
}
473482
}
474483

484+
if ipVersion, ok := s.D.GetOkExists("ip_version"); ok {
485+
request.IpVersion = oci_network_load_balancer.IpVersionEnum(ipVersion.(string))
486+
}
487+
475488
if isPreserveSource, ok := s.D.GetOkExists("is_preserve_source"); ok {
476489
tmp := isPreserveSource.(bool)
477490
request.IsPreserveSource = &tmp
@@ -547,6 +560,8 @@ func (s *NetworkLoadBalancerBackendSetResourceCrud) SetData() error {
547560
s.D.Set("health_checker", nil)
548561
}
549562

563+
s.D.Set("ip_version", s.Res.IpVersion)
564+
550565
if s.Res.IsPreserveSource != nil {
551566
s.D.Set("is_preserve_source", *s.Res.IsPreserveSource)
552567
}
@@ -677,6 +692,8 @@ func NlbBackendSetSummaryToMap(obj oci_network_load_balancer.BackendSetSummary)
677692
result["health_checker"] = []interface{}{NlbHealthCheckerToMap(obj.HealthChecker)}
678693
}
679694

695+
result["ip_version"] = string(obj.IpVersion)
696+
680697
if obj.IsPreserveSource != nil {
681698
result["is_preserve_source"] = bool(*obj.IsPreserveSource)
682699
}

oci/network_load_balancer_backend_set_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ var (
4343
"name": Representation{RepType: Required, Create: `example_backend_set`},
4444
"network_load_balancer_id": Representation{RepType: Required, Create: `${oci_network_load_balancer_network_load_balancer.test_network_load_balancer.id}`},
4545
"policy": Representation{RepType: Required, Create: `FIVE_TUPLE`, Update: `THREE_TUPLE`},
46+
"ip_version": Representation{RepType: Optional, Create: `IPV4`},
4647
"is_preserve_source": Representation{RepType: Optional, Create: `false`, Update: `true`},
4748
}
4849
nlbBackendSetHealthCheckerRepresentation = map[string]interface{}{
@@ -137,8 +138,10 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
137138
resource.TestCheckResourceAttr(resourceName, "health_checker.0.response_body_regex", ""),
138139
resource.TestCheckResourceAttr(resourceName, "health_checker.0.response_data", "SGVsbG9Xb3JsZA=="),
139140
resource.TestCheckResourceAttr(resourceName, "health_checker.0.retries", "3"),
141+
resource.TestCheckResourceAttr(resourceName, "health_checker.0.return_code", "0"),
140142
resource.TestCheckResourceAttr(resourceName, "health_checker.0.timeout_in_millis", "10000"),
141143
resource.TestCheckResourceAttr(resourceName, "health_checker.0.url_path", ""),
144+
resource.TestCheckResourceAttr(resourceName, "ip_version", "IPV4"),
142145
resource.TestCheckResourceAttr(resourceName, "is_preserve_source", "false"),
143146
resource.TestCheckResourceAttr(resourceName, "name", "example_backend_set"),
144147
resource.TestCheckResourceAttrSet(resourceName, "network_load_balancer_id"),
@@ -279,6 +282,8 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
279282
resource.TestCheckResourceAttr(resourceName, "name", "example_backend_set"),
280283
resource.TestCheckResourceAttrSet(resourceName, "network_load_balancer_id"),
281284
resource.TestCheckResourceAttr(resourceName, "policy", "TWO_TUPLE"),
285+
// getting a validation error. so this update of ipversion is not allowed and the expected error is thrown
286+
//resource.TestCheckResourceAttr(resourceName, "ip_version", "IPV6"),
282287

283288
func(s *terraform.State) (err error) {
284289
resId2, err = FromInstanceState(s, resourceName, "id")
@@ -414,6 +419,7 @@ func TestNetworkLoadBalancerBackendSetResource_basic(t *testing.T) {
414419
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.0.return_code", "204"),
415420
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.0.timeout_in_millis", "30000"),
416421
resource.TestCheckResourceAttr(singularDatasourceName, "health_checker.0.url_path", "/urlPath2"),
422+
resource.TestCheckResourceAttr(singularDatasourceName, "ip_version", "IPV4"),
417423
resource.TestCheckResourceAttr(singularDatasourceName, "is_preserve_source", "true"),
418424
resource.TestCheckResourceAttr(singularDatasourceName, "name", "example_backend_set"),
419425
resource.TestCheckResourceAttr(singularDatasourceName, "policy", "TWO_TUPLE"),

oci/network_load_balancer_listener_data_source.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ func (s *NetworkLoadBalancerListenerDataSourceCrud) SetData() error {
8080
s.D.Set("default_backend_set_name", *s.Res.DefaultBackendSetName)
8181
}
8282

83+
s.D.Set("ip_version", s.Res.IpVersion)
84+
8385
if s.Res.Name != nil {
8486
s.D.Set("name", *s.Res.Name)
8587
}

oci/network_load_balancer_listener_resource.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ func NetworkLoadBalancerListenerResource() *schema.Resource {
5959
},
6060

6161
// Optional
62+
"ip_version": {
63+
Type: schema.TypeString,
64+
Optional: true,
65+
Computed: true,
66+
},
6267

6368
// Computed
6469
},
@@ -117,6 +122,10 @@ func (s *NetworkLoadBalancerListenerResourceCrud) Create() error {
117122
request.DefaultBackendSetName = &tmp
118123
}
119124

125+
if ipVersion, ok := s.D.GetOkExists("ip_version"); ok {
126+
request.IpVersion = oci_network_load_balancer.IpVersionEnum(ipVersion.(string))
127+
}
128+
120129
if name, ok := s.D.GetOkExists("name"); ok {
121130
tmp := name.(string)
122131
request.Name = &tmp
@@ -304,6 +313,10 @@ func (s *NetworkLoadBalancerListenerResourceCrud) Update() error {
304313
request.DefaultBackendSetName = &tmp
305314
}
306315

316+
if ipVersion, ok := s.D.GetOkExists("ip_version"); ok {
317+
request.IpVersion = oci_network_load_balancer.IpVersionEnum(ipVersion.(string))
318+
}
319+
307320
if listenerName, ok := s.D.GetOkExists("name"); ok {
308321
tmp := listenerName.(string)
309322
request.ListenerName = &tmp
@@ -375,6 +388,8 @@ func (s *NetworkLoadBalancerListenerResourceCrud) SetData() error {
375388
s.D.Set("default_backend_set_name", *s.Res.DefaultBackendSetName)
376389
}
377390

391+
s.D.Set("ip_version", s.Res.IpVersion)
392+
378393
if s.Res.Name != nil {
379394
s.D.Set("name", *s.Res.Name)
380395
}
@@ -415,6 +430,8 @@ func NlbListenerSummaryToMap(obj oci_network_load_balancer.ListenerSummary) map[
415430
result["default_backend_set_name"] = string(*obj.DefaultBackendSetName)
416431
}
417432

433+
result["ip_version"] = string(obj.IpVersion)
434+
418435
if obj.Name != nil {
419436
result["name"] = string(*obj.Name)
420437
}

oci/network_load_balancer_listener_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ var (
3737
"network_load_balancer_id": Representation{RepType: Required, Create: `${oci_network_load_balancer_network_load_balancer.test_network_load_balancer.id}`},
3838
"port": Representation{RepType: Required, Create: `10`, Update: `11`},
3939
"protocol": Representation{RepType: Required, Create: `UDP`, Update: `TCP`},
40+
"ip_version": Representation{RepType: Optional, Create: `IPV4`},
4041
}
4142

4243
NlbListenerResourceDependencies = GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", Required, Create, subnetRepresentation) +
@@ -60,6 +61,9 @@ func TestNetworkLoadBalancerListenerResource_basic(t *testing.T) {
6061
singularDatasourceName := "data.oci_network_load_balancer_listener.test_listener"
6162

6263
var resId, resId2 string
64+
// Save TF content to Create resource with optional properties. This has to be exactly the same as the config part in the "create with optionals" step in the test.
65+
SaveConfigContent(config+compartmentIdVariableStr+ListenerResourceDependencies+
66+
GenerateResourceFromRepresentationMap("oci_network_load_balancer_listener", "test_listener", Optional, Create, nlbListenerRepresentation), "networkloadbalancer", "listener", t)
6367

6468
ResourceTest(t, testAccCheckNetworkLoadBalancerListenerDestroy, []resource.TestStep{
6569
// verify Create
@@ -73,6 +77,30 @@ func TestNetworkLoadBalancerListenerResource_basic(t *testing.T) {
7377
resource.TestCheckResourceAttr(resourceName, "port", "10"),
7478
resource.TestCheckResourceAttr(resourceName, "protocol", "UDP"),
7579

80+
func(s *terraform.State) (err error) {
81+
resId, err = FromInstanceState(s, resourceName, "id")
82+
return err
83+
},
84+
),
85+
},
86+
87+
// delete before next Create
88+
{
89+
Config: config + compartmentIdVariableStr + NlbListenerResourceDependencies,
90+
},
91+
92+
// verify Create with optionals
93+
{
94+
Config: config + compartmentIdVariableStr + NlbListenerResourceDependencies +
95+
GenerateResourceFromRepresentationMap("oci_network_load_balancer_listener", "test_listener", Optional, Create, nlbListenerRepresentation),
96+
Check: ComposeAggregateTestCheckFuncWrapper(
97+
resource.TestCheckResourceAttrSet(resourceName, "default_backend_set_name"),
98+
resource.TestCheckResourceAttr(resourceName, "ip_version", "IPV4"),
99+
resource.TestCheckResourceAttr(resourceName, "name", "example_listener"),
100+
resource.TestCheckResourceAttrSet(resourceName, "network_load_balancer_id"),
101+
resource.TestCheckResourceAttr(resourceName, "port", "10"),
102+
resource.TestCheckResourceAttr(resourceName, "protocol", "UDP"),
103+
76104
func(s *terraform.State) (err error) {
77105
resId, err = FromInstanceState(s, resourceName, "id")
78106
if isEnableExportCompartment, _ := strconv.ParseBool(getEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment {
@@ -91,6 +119,7 @@ func TestNetworkLoadBalancerListenerResource_basic(t *testing.T) {
91119
GenerateResourceFromRepresentationMap("oci_network_load_balancer_listener", "test_listener", Optional, Update, nlbListenerRepresentation),
92120
Check: ComposeAggregateTestCheckFuncWrapper(
93121
resource.TestCheckResourceAttrSet(resourceName, "default_backend_set_name"),
122+
resource.TestCheckResourceAttr(resourceName, "ip_version", "IPV4"),
94123
resource.TestCheckResourceAttr(resourceName, "name", "example_listener"),
95124
resource.TestCheckResourceAttrSet(resourceName, "network_load_balancer_id"),
96125
resource.TestCheckResourceAttr(resourceName, "port", "11"),
@@ -126,6 +155,7 @@ func TestNetworkLoadBalancerListenerResource_basic(t *testing.T) {
126155
resource.TestCheckResourceAttrSet(singularDatasourceName, "listener_name"),
127156
resource.TestCheckResourceAttrSet(singularDatasourceName, "network_load_balancer_id"),
128157

158+
resource.TestCheckResourceAttr(singularDatasourceName, "ip_version", "IPV4"),
129159
resource.TestCheckResourceAttr(singularDatasourceName, "name", "example_listener"),
130160
resource.TestCheckResourceAttr(singularDatasourceName, "port", "11"),
131161
resource.TestCheckResourceAttr(singularDatasourceName, "protocol", "TCP"),

oci/network_load_balancer_network_load_balancer_data_source.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ func (s *NetworkLoadBalancerNetworkLoadBalancerDataSourceCrud) SetData() error {
101101

102102
s.D.Set("network_security_group_ids", s.Res.NetworkSecurityGroupIds)
103103

104+
s.D.Set("nlb_ip_version", s.Res.NlbIpVersion)
105+
104106
s.D.Set("state", s.Res.LifecycleState)
105107

106108
if s.Res.SubnetId != nil {

oci/network_load_balancer_network_load_balancer_resource.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ func NetworkLoadBalancerNetworkLoadBalancerResource() *schema.Resource {
7979
Type: schema.TypeString,
8080
},
8181
},
82+
"nlb_ip_version": {
83+
Type: schema.TypeString,
84+
Optional: true,
85+
Computed: true,
86+
},
8287
"reserved_ips": {
8388
Type: schema.TypeList,
8489
Optional: true,
@@ -116,6 +121,10 @@ func NetworkLoadBalancerNetworkLoadBalancerResource() *schema.Resource {
116121
Type: schema.TypeString,
117122
Computed: true,
118123
},
124+
"ip_version": {
125+
Type: schema.TypeString,
126+
Computed: true,
127+
},
119128
"is_public": {
120129
Type: schema.TypeBool,
121130
Computed: true,
@@ -285,6 +294,10 @@ func (s *NetworkLoadBalancerNetworkLoadBalancerResourceCrud) Create() error {
285294
}
286295
}
287296

297+
if nlbIpVersion, ok := s.D.GetOkExists("nlb_ip_version"); ok {
298+
request.NlbIpVersion = oci_network_load_balancer.NlbIpVersionEnum(nlbIpVersion.(string))
299+
}
300+
288301
if reservedIps, ok := s.D.GetOkExists("reserved_ips"); ok {
289302
interfaces := reservedIps.([]interface{})
290303
tmp := make([]oci_network_load_balancer.ReservedIp, len(interfaces))
@@ -497,6 +510,10 @@ func (s *NetworkLoadBalancerNetworkLoadBalancerResourceCrud) Update() error {
497510
tmp := s.D.Id()
498511
request.NetworkLoadBalancerId = &tmp
499512

513+
if nlbIpVersion, ok := s.D.GetOkExists("nlb_ip_version"); ok {
514+
request.NlbIpVersion = oci_network_load_balancer.NlbIpVersionEnum(nlbIpVersion.(string))
515+
}
516+
500517
request.RequestMetadata.RetryPolicy = GetRetryPolicy(s.DisableNotFoundRetries, "network_load_balancer")
501518

502519
response, err := s.Client.UpdateNetworkLoadBalancer(context.Background(), request)
@@ -567,6 +584,8 @@ func (s *NetworkLoadBalancerNetworkLoadBalancerResourceCrud) SetData() error {
567584
}
568585
s.D.Set("network_security_group_ids", schema.NewSet(LiteralTypeHashCodeForSets, networkSecurityGroupIds))
569586

587+
s.D.Set("nlb_ip_version", s.Res.NlbIpVersion)
588+
570589
s.D.Set("state", s.Res.LifecycleState)
571590

572591
if s.Res.SubnetId != nil {
@@ -595,6 +614,8 @@ func NetworkLoadBalancerIpAddressToMap(obj oci_network_load_balancer.IpAddress)
595614
result["ip_address"] = string(*obj.IpAddress)
596615
}
597616

617+
result["ip_version"] = string(obj.IpVersion)
618+
598619
if obj.IsPublic != nil {
599620
result["is_public"] = bool(*obj.IsPublic)
600621
}
@@ -655,6 +676,8 @@ func NetworkLoadBalancerSummaryToMap(obj oci_network_load_balancer.NetworkLoadBa
655676
result["network_security_group_ids"] = schema.NewSet(LiteralTypeHashCodeForSets, networkSecurityGroupIds)
656677
}
657678

679+
result["nlb_ip_version"] = string(obj.NlbIpVersion)
680+
658681
result["state"] = string(obj.LifecycleState)
659682

660683
if obj.SubnetId != nil {

0 commit comments

Comments
 (0)