Skip to content

Commit c23f359

Browse files
Abdurahman Sherifsrishtipmishra
authored andcommitted
Support for HTTP2 and Advance Rules Sets added to load balancer
1 parent 08201ef commit c23f359

24 files changed

+1378
-29
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
### Added
44
- Support for updating instance type in `oci_oce_oce_instance`
55
- Support for private native vcn clusters to `container_engine`
6+
- Support for HTTP2 and Advance Rules Sets added to `load_balancer`
67

78
## 4.17.0 (March 10, 2021)
89

oci/export_definitions.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,6 +1524,13 @@ var exportLoadBalancerPathRouteSetHints = &TerraformResourceHints{
15241524
resourceAbbreviation: "path_route_set",
15251525
}
15261526

1527+
var exportLoadBalancerLoadBalancerRoutingPolicyHints = &TerraformResourceHints{
1528+
resourceClass: "oci_load_balancer_load_balancer_routing_policy",
1529+
datasourceClass: "oci_load_balancer_load_balancer_routing_policies",
1530+
datasourceItemsAttr: "routing_policies",
1531+
resourceAbbreviation: "load_balancer_routing_policy",
1532+
}
1533+
15271534
var exportLoadBalancerRuleSetHints = &TerraformResourceHints{
15281535
resourceClass: "oci_load_balancer_rule_set",
15291536
datasourceClass: "oci_load_balancer_rule_sets",

oci/export_graphs.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,12 @@ var loadBalancerResourceGraph = TerraformResourceGraph{
656656
"load_balancer_id": "id",
657657
},
658658
},
659+
{
660+
TerraformResourceHints: exportLoadBalancerLoadBalancerRoutingPolicyHints,
661+
datasourceQueryParams: map[string]string{
662+
"load_balancer_id": "id",
663+
},
664+
},
659665
{
660666
TerraformResourceHints: exportLoadBalancerPathRouteSetHints,
661667
datasourceQueryParams: map[string]string{

oci/export_helpers.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ func init() {
2828
exportIdentitySwiftPasswordHints.getIdFn = getIdentitySwiftPasswordId
2929
exportKmsKeyHints.getIdFn = getKmsKeyId
3030
exportKmsKeyVersionHints.getIdFn = getKmsKeyVersionId
31+
exportLoadBalancerBackendHints.getIdFn = getLoadBalancerBackendId
32+
exportLoadBalancerBackendSetHints.getIdFn = getLoadBalancerBackendSetId
33+
exportLoadBalancerCertificateHints.getIdFn = getLoadBalancerCertificateId
34+
exportLoadBalancerHostnameHints.getIdFn = getLoadBalancerHostnameId
35+
exportLoadBalancerListenerHints.getIdFn = getLoadBalancerListenerId
36+
exportLoadBalancerPathRouteSetHints.getIdFn = getLoadBalancerPathRouteSetId
37+
exportLoadBalancerLoadBalancerRoutingPolicyHints.getIdFn = getLoadBalancerLoadBalancerRoutingPolicyId
38+
exportLoadBalancerRuleSetHints.getIdFn = getLoadBalancerRuleSetId
3139
exportNosqlIndexHints.getIdFn = getNosqlIndexId
3240
exportObjectStorageBucketHints.getIdFn = getObjectStorageBucketId
3341
exportObjectStorageObjectLifecyclePolicyHints.getIdFn = getObjectStorageObjectLifecyclePolicyId
@@ -317,6 +325,16 @@ func getLoadBalancerPathRouteSetId(resource *OCIResource) (string, error) {
317325
return getPathRouteSetCompositeId(loadBalancerId, pathRouteSetName), nil
318326
}
319327

328+
func getLoadBalancerLoadBalancerRoutingPolicyId(resource *OCIResource) (string, error) {
329+
330+
loadBalancerId := resource.parent.id
331+
routingPolicyName, ok := resource.sourceAttributes["name"].(string)
332+
if !ok {
333+
return "", fmt.Errorf("[ERROR] unable to find routingPolicyName for LoadBalancer LoadBalancerRoutingPolicy")
334+
}
335+
return getLoadBalancerRoutingPolicyCompositeId(loadBalancerId, routingPolicyName), nil
336+
}
337+
320338
func getLoadBalancerRuleSetId(resource *OCIResource) (string, error) {
321339

322340
loadBalancerId := resource.parent.id

oci/export_resource_helpers.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,7 @@ func init() {
660660
exportLoadBalancerListenerHints.processDiscoveredResourcesFn = processLoadBalancerListeners
661661
exportLoadBalancerPathRouteSetHints.processDiscoveredResourcesFn = processLoadBalancerPathRouteSets
662662
exportLoadBalancerRuleSetHints.processDiscoveredResourcesFn = processLoadBalancerRuleSets
663+
exportLoadBalancerLoadBalancerRoutingPolicyHints.processDiscoveredResourcesFn = processLoadBalancerRoutingPolicies
663664

664665
exportCoreBootVolumeHints.processDiscoveredResourcesFn = filterSourcedBootVolumes
665666
exportCoreCrossConnectGroupHints.discoverableLifecycleStates = append(exportCoreCrossConnectGroupHints.discoverableLifecycleStates, string(oci_core.CrossConnectGroupLifecycleStateInactive))
@@ -1211,6 +1212,19 @@ func processLoadBalancerPathRouteSets(ctx *resourceDiscoveryContext, resources [
12111212
return resources, nil
12121213
}
12131214

1215+
func processLoadBalancerRoutingPolicies(ctx *resourceDiscoveryContext, resources []*OCIResource) ([]*OCIResource, error) {
1216+
for _, routingPolicy := range resources {
1217+
if routingPolicy.parent == nil {
1218+
continue
1219+
}
1220+
1221+
routingPolicy.id = getLoadBalancerRoutingPolicyCompositeId(routingPolicy.parent.id, routingPolicy.sourceAttributes["name"].(string))
1222+
routingPolicy.sourceAttributes["load_balancer_id"] = routingPolicy.parent.id
1223+
}
1224+
1225+
return resources, nil
1226+
}
1227+
12141228
func processLoadBalancerRuleSets(ctx *resourceDiscoveryContext, resources []*OCIResource) ([]*OCIResource, error) {
12151229
for _, ruleSet := range resources {
12161230
if ruleSet.parent == nil {

oci/load_balancer_listener_resource.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ func LoadBalancerListenerResource() *schema.Resource {
9696
Optional: true,
9797
Computed: true,
9898
},
99+
"routing_policy_name": {
100+
Type: schema.TypeString,
101+
Optional: true,
102+
Computed: true,
103+
},
99104
"rule_set_names": {
100105
Type: schema.TypeList,
101106
Optional: true,
@@ -298,6 +303,11 @@ func (s *LoadBalancerListenerResourceCrud) Create() error {
298303
request.Protocol = &tmp
299304
}
300305

306+
if routingPolicyName, ok := s.D.GetOkExists("routing_policy_name"); ok {
307+
tmp := routingPolicyName.(string)
308+
request.RoutingPolicyName = &tmp
309+
}
310+
301311
if ruleSetNames, ok := s.D.GetOkExists("rule_set_names"); ok {
302312
interfaces := ruleSetNames.([]interface{})
303313
tmp := make([]string, len(interfaces))
@@ -449,6 +459,11 @@ func (s *LoadBalancerListenerResourceCrud) Update() error {
449459
request.Protocol = &tmp
450460
}
451461

462+
if routingPolicyName, ok := s.D.GetOkExists("routing_policy_name"); ok {
463+
tmp := routingPolicyName.(string)
464+
request.RoutingPolicyName = &tmp
465+
}
466+
452467
if ruleSetNames, ok := s.D.GetOkExists("rule_set_names"); ok {
453468
interfaces := ruleSetNames.([]interface{})
454469
tmp := make([]string, len(interfaces))

oci/load_balancer_listener_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ var (
3131
"connection_configuration": RepresentationGroup{Optional, listenerConnectionConfigurationRepresentation},
3232
"hostname_names": Representation{repType: Optional, create: []string{`${oci_load_balancer_hostname.test_hostname.name}`}},
3333
"path_route_set_name": Representation{repType: Optional, create: `${oci_load_balancer_path_route_set.test_path_route_set.name}`},
34+
"routing_policy_name": Representation{repType: Optional, create: `${oci_load_balancer_load_balancer_routing_policy.test_load_balancer_routing_policy.name}`},
3435
"rule_set_names": Representation{repType: Optional, create: []string{`${oci_load_balancer_rule_set.test_rule_set.name}`}},
3536
"ssl_configuration": RepresentationGroup{Optional, listenerSslConfigurationRepresentation},
3637
}
@@ -43,7 +44,8 @@ var (
4344
"verify_peer_certificate": Representation{repType: Optional, create: `false`, update: `true`},
4445
}
4546

46-
ListenerResourceDependencies = generateResourceFromRepresentationMap("oci_load_balancer_backend_set", "test_backend_set", Required, Create, backendSetRepresentation) +
47+
ListenerResourceDependencies = generateResourceFromRepresentationMap("oci_load_balancer_load_balancer_routing_policy", "test_load_balancer_routing_policy", Required, Create, loadBalancerRoutingPolicyRepresentation) +
48+
generateResourceFromRepresentationMap("oci_load_balancer_backend_set", "test_backend_set", Required, Create, backendSetRepresentation) +
4749
generateResourceFromRepresentationMap("oci_load_balancer_certificate", "test_certificate", Optional, Create, certificateRepresentation) +
4850
generateResourceFromRepresentationMap("oci_load_balancer_load_balancer", "test_load_balancer", Required, Create, loadBalancerRepresentation) +
4951
LoadBalancerSubnetDependencies +
@@ -123,6 +125,7 @@ func TestLoadBalancerListenerResource_basic(t *testing.T) {
123125
resource.TestCheckResourceAttrSet(resourceName, "path_route_set_name"),
124126
resource.TestCheckResourceAttr(resourceName, "port", "10"),
125127
resource.TestCheckResourceAttr(resourceName, "protocol", "HTTP"),
128+
resource.TestCheckResourceAttrSet(resourceName, "routing_policy_name"),
126129
resource.TestCheckResourceAttr(resourceName, "rule_set_names.#", "1"),
127130
resource.TestCheckResourceAttr(resourceName, "ssl_configuration.#", "1"),
128131
resource.TestCheckResourceAttrSet(resourceName, "ssl_configuration.0.certificate_name"),
@@ -156,6 +159,7 @@ func TestLoadBalancerListenerResource_basic(t *testing.T) {
156159
resource.TestCheckResourceAttrSet(resourceName, "path_route_set_name"),
157160
resource.TestCheckResourceAttr(resourceName, "port", "11"),
158161
resource.TestCheckResourceAttr(resourceName, "protocol", "HTTP"),
162+
resource.TestCheckResourceAttrSet(resourceName, "routing_policy_name"),
159163
resource.TestCheckResourceAttr(resourceName, "rule_set_names.#", "1"),
160164
resource.TestCheckResourceAttr(resourceName, "ssl_configuration.#", "1"),
161165
resource.TestCheckResourceAttrSet(resourceName, "ssl_configuration.0.certificate_name"),
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package oci
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
oci_load_balancer "github.com/oracle/oci-go-sdk/v36/loadbalancer"
11+
)
12+
13+
func init() {
14+
RegisterDatasource("oci_load_balancer_load_balancer_routing_policies", LoadBalancerLoadBalancerRoutingPoliciesDataSource())
15+
}
16+
17+
func LoadBalancerLoadBalancerRoutingPoliciesDataSource() *schema.Resource {
18+
return &schema.Resource{
19+
Read: readLoadBalancerLoadBalancerRoutingPolicies,
20+
Schema: map[string]*schema.Schema{
21+
"filter": dataSourceFiltersSchema(),
22+
"load_balancer_id": {
23+
Type: schema.TypeString,
24+
Required: true,
25+
},
26+
"routing_policies": {
27+
Type: schema.TypeList,
28+
Computed: true,
29+
Elem: LoadBalancerLoadBalancerRoutingPolicyResource(),
30+
},
31+
},
32+
}
33+
}
34+
35+
func readLoadBalancerLoadBalancerRoutingPolicies(d *schema.ResourceData, m interface{}) error {
36+
sync := &LoadBalancerLoadBalancerRoutingPoliciesDataSourceCrud{}
37+
sync.D = d
38+
sync.Client = m.(*OracleClients).loadBalancerClient()
39+
40+
return ReadResource(sync)
41+
}
42+
43+
type LoadBalancerLoadBalancerRoutingPoliciesDataSourceCrud struct {
44+
D *schema.ResourceData
45+
Client *oci_load_balancer.LoadBalancerClient
46+
Res *oci_load_balancer.ListRoutingPoliciesResponse
47+
}
48+
49+
func (s *LoadBalancerLoadBalancerRoutingPoliciesDataSourceCrud) VoidState() {
50+
s.D.SetId("")
51+
}
52+
53+
func (s *LoadBalancerLoadBalancerRoutingPoliciesDataSourceCrud) Get() error {
54+
request := oci_load_balancer.ListRoutingPoliciesRequest{}
55+
56+
if loadBalancerId, ok := s.D.GetOkExists("load_balancer_id"); ok {
57+
tmp := loadBalancerId.(string)
58+
request.LoadBalancerId = &tmp
59+
}
60+
61+
request.RequestMetadata.RetryPolicy = getRetryPolicy(false, "load_balancer")
62+
63+
response, err := s.Client.ListRoutingPolicies(context.Background(), request)
64+
if err != nil {
65+
return err
66+
}
67+
68+
s.Res = &response
69+
request.Page = s.Res.OpcNextPage
70+
71+
for request.Page != nil {
72+
listResponse, err := s.Client.ListRoutingPolicies(context.Background(), request)
73+
if err != nil {
74+
return err
75+
}
76+
77+
s.Res.Items = append(s.Res.Items, listResponse.Items...)
78+
request.Page = listResponse.OpcNextPage
79+
}
80+
81+
return nil
82+
}
83+
84+
func (s *LoadBalancerLoadBalancerRoutingPoliciesDataSourceCrud) SetData() error {
85+
if s.Res == nil {
86+
return nil
87+
}
88+
89+
s.D.SetId(GenerateDataSourceHashID("LoadBalancerLoadBalancerRoutingPoliciesDataSource-", LoadBalancerLoadBalancerRoutingPoliciesDataSource(), s.D))
90+
resources := []map[string]interface{}{}
91+
92+
for _, r := range s.Res.Items {
93+
loadBalancerRoutingPolicy := map[string]interface{}{}
94+
95+
loadBalancerRoutingPolicy["condition_language_version"] = r.ConditionLanguageVersion
96+
97+
if r.Name != nil {
98+
loadBalancerRoutingPolicy["name"] = *r.Name
99+
}
100+
101+
rules := []interface{}{}
102+
for _, item := range r.Rules {
103+
rules = append(rules, RoutingRuleToMap(item))
104+
}
105+
loadBalancerRoutingPolicy["rules"] = rules
106+
107+
resources = append(resources, loadBalancerRoutingPolicy)
108+
}
109+
110+
if f, fOk := s.D.GetOkExists("filter"); fOk {
111+
resources = ApplyFilters(f.(*schema.Set), resources, LoadBalancerLoadBalancerRoutingPoliciesDataSource().Schema["routing_policies"].Elem.(*schema.Resource).Schema)
112+
}
113+
114+
if err := s.D.Set("routing_policies", resources); err != nil {
115+
return err
116+
}
117+
118+
return nil
119+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package oci
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
oci_load_balancer "github.com/oracle/oci-go-sdk/v36/loadbalancer"
11+
)
12+
13+
func init() {
14+
RegisterDatasource("oci_load_balancer_load_balancer_routing_policy", LoadBalancerLoadBalancerRoutingPolicyDataSource())
15+
}
16+
17+
func LoadBalancerLoadBalancerRoutingPolicyDataSource() *schema.Resource {
18+
fieldMap := make(map[string]*schema.Schema)
19+
fieldMap["load_balancer_id"] = &schema.Schema{
20+
Type: schema.TypeString,
21+
Required: true,
22+
}
23+
fieldMap["routing_policy_name"] = &schema.Schema{
24+
Type: schema.TypeString,
25+
Required: true,
26+
}
27+
return GetSingularDataSourceItemSchema(LoadBalancerLoadBalancerRoutingPolicyResource(), fieldMap, readSingularLoadBalancerLoadBalancerRoutingPolicy)
28+
}
29+
30+
func readSingularLoadBalancerLoadBalancerRoutingPolicy(d *schema.ResourceData, m interface{}) error {
31+
sync := &LoadBalancerLoadBalancerRoutingPolicyDataSourceCrud{}
32+
sync.D = d
33+
sync.Client = m.(*OracleClients).loadBalancerClient()
34+
35+
return ReadResource(sync)
36+
}
37+
38+
type LoadBalancerLoadBalancerRoutingPolicyDataSourceCrud struct {
39+
D *schema.ResourceData
40+
Client *oci_load_balancer.LoadBalancerClient
41+
Res *oci_load_balancer.GetRoutingPolicyResponse
42+
}
43+
44+
func (s *LoadBalancerLoadBalancerRoutingPolicyDataSourceCrud) VoidState() {
45+
s.D.SetId("")
46+
}
47+
48+
func (s *LoadBalancerLoadBalancerRoutingPolicyDataSourceCrud) Get() error {
49+
request := oci_load_balancer.GetRoutingPolicyRequest{}
50+
51+
if loadBalancerId, ok := s.D.GetOkExists("load_balancer_id"); ok {
52+
tmp := loadBalancerId.(string)
53+
request.LoadBalancerId = &tmp
54+
}
55+
56+
if routingPolicyName, ok := s.D.GetOkExists("routing_policy_name"); ok {
57+
tmp := routingPolicyName.(string)
58+
request.RoutingPolicyName = &tmp
59+
}
60+
61+
request.RequestMetadata.RetryPolicy = getRetryPolicy(false, "load_balancer")
62+
63+
response, err := s.Client.GetRoutingPolicy(context.Background(), request)
64+
if err != nil {
65+
return err
66+
}
67+
68+
s.Res = &response
69+
return nil
70+
}
71+
72+
func (s *LoadBalancerLoadBalancerRoutingPolicyDataSourceCrud) SetData() error {
73+
if s.Res == nil {
74+
return nil
75+
}
76+
77+
s.D.SetId(GenerateDataSourceHashID("LoadBalancerLoadBalancerRoutingPolicyDataSource-", LoadBalancerLoadBalancerRoutingPolicyDataSource(), s.D))
78+
79+
s.D.Set("condition_language_version", s.Res.ConditionLanguageVersion)
80+
81+
if s.Res.Name != nil {
82+
s.D.Set("name", *s.Res.Name)
83+
}
84+
85+
rules := []interface{}{}
86+
for _, item := range s.Res.Rules {
87+
rules = append(rules, RoutingRuleToMap(item))
88+
}
89+
s.D.Set("rules", rules)
90+
91+
return nil
92+
}

0 commit comments

Comments
 (0)