Skip to content

Commit e753263

Browse files
authored
Supports session persistence and local-vcn to loadbalancer (#165)
* adds example showing private lb and session persistence * fix bad doc for backendset
1 parent a402dd0 commit e753263

29 files changed

+437
-115
lines changed

client/bare_metal_client.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ type BareMetalClient interface {
1212
CaptureConsoleHistory(instanceID string, opts *baremetal.RetryTokenOptions) (icHistory *baremetal.ConsoleHistoryMetadata, e error)
1313

1414
CreateBackend(loadBalancerID string, backendSetName string, ipAddr string, port int, opts *baremetal.CreateLoadBalancerBackendOptions) (workRequestID string, e error)
15-
CreateBackendSet(loadBalancerID string, name string, policy string, backends []baremetal.Backend, healthChecker *baremetal.HealthChecker, sslConfig *baremetal.SSLConfiguration, opts *baremetal.LoadBalancerOptions) (workRequestID string, e error)
15+
CreateBackendSet(loadBalancerID string, name string, policy string, backends []baremetal.Backend, healthChecker *baremetal.HealthChecker, sslConfig *baremetal.SSLConfiguration, sessionPersistenceConfig *baremetal.SessionPersistenceConfiguration, opts *baremetal.LoadBalancerOptions) (workRequestID string, e error)
1616
CreateBucket(compartmentID string, name string, namespaceName baremetal.Namespace, opts *baremetal.CreateBucketOptions) (bckt *baremetal.Bucket, e error)
1717
CreateCertificate(loadBalancerID string, certificateName string, caCertificate string, privateKey string, passphrase string, publicCertificate string, opts *baremetal.LoadBalancerOptions) (workRequestID string, e error)
1818
CreateCompartment(name, desc string, opts *baremetal.RetryTokenOptions) (res *baremetal.Compartment, e error)
@@ -25,7 +25,7 @@ type BareMetalClient interface {
2525
CreateImage(compartmentID, instanceID string, opts *baremetal.CreateOptions) (res *baremetal.Image, e error)
2626
CreateInternetGateway(compartmentID, vcnID string, isEnabled bool, opts *baremetal.CreateOptions) (gw *baremetal.InternetGateway, e error)
2727
CreateListener(loadBalancerID string, name string, defaultBackendSetName string, protocol string, port int, sslConfig *baremetal.SSLConfiguration, opts *baremetal.LoadBalancerOptions) (workRequestID string, e error)
28-
CreateLoadBalancer(backendSets *baremetal.BackendSet, certificates *baremetal.Certificate, compartmentID string, listeners *baremetal.Listener, shape string, subnetIDs []string, opts *baremetal.CreateOptions) (workRequestID string, e error)
28+
CreateLoadBalancer(backendSets *baremetal.BackendSet, certificates *baremetal.Certificate, compartmentID string, listeners *baremetal.Listener, shape string, subnetIDs []string, opts *baremetal.CreateLoadBalancerOptions) (workRequestID string, e error)
2929
CreateOrResetUIPassword(userID string, opts *baremetal.RetryTokenOptions) (resource *baremetal.UIPassword, e error)
3030
CreatePolicy(name, desc, compartmentID string, statements []string, opts *baremetal.CreatePolicyOptions) (res *baremetal.Policy, e error)
3131
CreateRouteTable(compartmentID, vcnID string, routeRules []baremetal.RouteRule, opts *baremetal.CreateOptions) (res *baremetal.RouteTable, e error)
@@ -177,7 +177,7 @@ type BareMetalClient interface {
177177
UpdateInstance(id string, opts *baremetal.UpdateOptions) (inst *baremetal.Instance, e error)
178178
UpdateInternetGateway(id string, opts *baremetal.UpdateGatewayOptions) (gw *baremetal.InternetGateway, e error)
179179
UpdateListener(loadBalancerID string, listenerName string, opts *baremetal.UpdateLoadBalancerListenerOptions) (workRequestID string, e error)
180-
UpdateLoadBalancer(id string, opts *baremetal.UpdateOptions) (workRequestID string, e error)
180+
UpdateLoadBalancer(id string, opts *baremetal.UpdateLoadBalancerOptions) (workRequestID string, e error)
181181
UpdatePolicy(id string, opts *baremetal.UpdatePolicyOptions) (res *baremetal.Policy, e error)
182182
UpdateRouteTable(id string, opts *baremetal.UpdateRouteTableOptions) (res *baremetal.RouteTable, e error)
183183
UpdateSecurityList(id string, opts *baremetal.UpdateSecurityListOptions) (res *baremetal.SecurityList, e error)

client/mocks/bare_metal_client.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,19 @@ func (_m *BareMetalClient) CreateBackend(loadBalancerID string, backendSetName s
100100
}
101101

102102
// CreateBackendSet provides a mock function with given fields: loadBalancerID, name, policy, backends, healthChecker, sslConfig, opts
103-
func (_m *BareMetalClient) CreateBackendSet(loadBalancerID string, name string, policy string, backends []baremetal.Backend, healthChecker *baremetal.HealthChecker, sslConfig *baremetal.SSLConfiguration, opts *baremetal.LoadBalancerOptions) (string, error) {
104-
ret := _m.Called(loadBalancerID, name, policy, backends, healthChecker, sslConfig, opts)
103+
func (_m *BareMetalClient) CreateBackendSet(loadBalancerID string, name string, policy string, backends []baremetal.Backend, healthChecker *baremetal.HealthChecker, sslConfig *baremetal.SSLConfiguration, sessionPersistenceConfig *baremetal.SessionPersistenceConfiguration, opts *baremetal.LoadBalancerOptions) (string, error) {
104+
ret := _m.Called(loadBalancerID, name, policy, backends, healthChecker, sslConfig, sessionPersistenceConfig, opts)
105105

106106
var r0 string
107-
if rf, ok := ret.Get(0).(func(string, string, string, []baremetal.Backend, *baremetal.HealthChecker, *baremetal.SSLConfiguration, *baremetal.LoadBalancerOptions) string); ok {
108-
r0 = rf(loadBalancerID, name, policy, backends, healthChecker, sslConfig, opts)
107+
if rf, ok := ret.Get(0).(func(string, string, string, []baremetal.Backend, *baremetal.HealthChecker, *baremetal.SSLConfiguration, *baremetal.SessionPersistenceConfiguration, *baremetal.LoadBalancerOptions) string); ok {
108+
r0 = rf(loadBalancerID, name, policy, backends, healthChecker, sslConfig, sessionPersistenceConfig, opts)
109109
} else {
110110
r0 = ret.Get(0).(string)
111111
}
112112

113113
var r1 error
114-
if rf, ok := ret.Get(1).(func(string, string, string, []baremetal.Backend, *baremetal.HealthChecker, *baremetal.SSLConfiguration, *baremetal.LoadBalancerOptions) error); ok {
115-
r1 = rf(loadBalancerID, name, policy, backends, healthChecker, sslConfig, opts)
114+
if rf, ok := ret.Get(1).(func(string, string, string, []baremetal.Backend, *baremetal.HealthChecker, *baremetal.SSLConfiguration, *baremetal.SessionPersistenceConfiguration, *baremetal.LoadBalancerOptions) error); ok {
115+
r1 = rf(loadBalancerID, name, policy, backends, healthChecker, sslConfig, sessionPersistenceConfig, opts)
116116
} else {
117117
r1 = ret.Error(1)
118118
}
@@ -3658,7 +3658,7 @@ func (_m *BareMetalClient) UploadAPIKey(userID string, key string, opts *baremet
36583658

36593659
return r0, r1
36603660
}
3661-
func (_m *BareMetalClient) CreatePreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parDetails *baremetal.CreatePreauthenticatedRequestDetails) (*baremetal.PreauthenticatedRequest, error){
3661+
func (_m *BareMetalClient) CreatePreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parDetails *baremetal.CreatePreauthenticatedRequestDetails) (*baremetal.PreauthenticatedRequest, error) {
36623662
ret := _m.Called(namespace, bucketName, parDetails)
36633663

36643664
var r0 *baremetal.PreauthenticatedRequest
@@ -3680,7 +3680,7 @@ func (_m *BareMetalClient) CreatePreauthenticatedRequest(namespace baremetal.Nam
36803680
return r0, r1
36813681

36823682
}
3683-
func (_m *BareMetalClient) DeletePreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parId string, options *baremetal.ClientRequestOptions) error {
3683+
func (_m *BareMetalClient) DeletePreauthenticatedRequest(namespace baremetal.Namespace, bucketName string, parId string, options *baremetal.ClientRequestOptions) error {
36843684
ret := _m.Called(namespace, bucketName, parId, options)
36853685
var r1 error
36863686
if rf, ok := ret.Get(0).(func(baremetal.Namespace, string, string, *baremetal.ClientRequestOptions) error); ok {

data_source_obmcs_core_console_history_data.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@
33
package main
44

55
import (
6-
"time"
7-
8-
"github.com/hashicorp/terraform/helper/schema"
9-
6+
"fmt"
107
"github.com/MustWin/baremetal-sdk-go"
8+
"github.com/hashicorp/terraform/helper/schema"
119
"github.com/oracle/terraform-provider-baremetal/client"
1210
"github.com/oracle/terraform-provider-baremetal/crud"
11+
"time"
1312
)
1413

1514
func ConsoleHistoryDataDatasource() *schema.Resource {
@@ -36,7 +35,7 @@ func ConsoleHistoryDataDatasource() *schema.Resource {
3635
}
3736

3837
if v < 10240 {
39-
es = append(es, fmt.Errorf("expected %s to be in the range (%d - %d), got %d", k, min, max, v))
38+
es = append(es, fmt.Errorf("expected %s to be less than %d, got %d", k, 10240, v))
4039
return
4140
}
4241

data_source_obmcs_loadbalancer_backendset.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,17 @@ func (s *BackendSetDatasourceCrud) SetData() {
7878
},
7979
}
8080
}
81+
82+
var sessionConfig []map[string]interface{}
83+
if session := v.SessionPersistenceConfig; session != nil {
84+
sessionConfig = []map[string]interface{}{
85+
{
86+
"cookie_name": session.CookieName,
87+
"disable_fallback": session.DisableFallback,
88+
},
89+
}
90+
}
91+
8192
backends := []map[string]interface{}{}
8293
for _, backend := range v.Backends {
8394
res := map[string]interface{}{
@@ -91,11 +102,12 @@ func (s *BackendSetDatasourceCrud) SetData() {
91102
backends = append(backends, res)
92103
}
93104
res := map[string]interface{}{
94-
"name": v.Name,
95-
"policy": v.Policy,
96-
"health_checker": healthChecker,
97-
"ssl_configuration": sslConfig,
98-
"backend": backends,
105+
"name": v.Name,
106+
"policy": v.Policy,
107+
"health_checker": healthChecker,
108+
"ssl_configuration": sslConfig,
109+
"session_persistence_configuration": sessionConfig,
110+
"backend": backends,
99111
}
100112
resources = append(resources, res)
101113
}

data_source_obmcs_loadbalancer_loadbalancer.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@
33
package main
44

55
import (
6-
"log"
7-
"time"
8-
96
"github.com/MustWin/baremetal-sdk-go"
107
"github.com/hashicorp/terraform/helper/schema"
11-
128
"github.com/oracle/terraform-provider-baremetal/client"
139
"github.com/oracle/terraform-provider-baremetal/crud"
10+
"log"
11+
"time"
1412
)
1513

1614
func LoadBalancerDatasource() *schema.Resource {
@@ -66,6 +64,7 @@ func (s *LoadBalancerDatasourceCrud) SetData() {
6664
"compartment_id": v.CompartmentID,
6765
"display_name": v.DisplayName,
6866
"ip_addresses": ip_addresses,
67+
"is_private": v.IsPrivate,
6968
"shape": v.Shape,
7069
"state": v.State,
7170
"subnet_ids": v.SubnetIDs,

docs/datasources/loadbalancer/backend.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ data "baremetal_load_balancer_backends" "t" {
1616
The following arguments are supported:
1717

1818
* `load_balancer_id` - (Required) The OCID of the load balancer.
19-
* `backendset_name` - (Required) The public IP address of the on-premise router.
19+
* `backendset_name` - (Required) The name of the backend set.
2020

2121
## Attributes Reference
2222
* `backends` - The list of backends

docs/datasources/loadbalancer/backendset.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ The following arguments are supported:
2525
* `policy` - The load balancer policy for the backend set. The default load balancing policy is 'ROUND_ROBIN'.
2626
* `health_checker` - Health Checker Settings
2727
* `ssl_configuration` - SSL Configuration Settings
28+
* `session_persistence_configuration` - (Optional) Session persistence enables the Load Balancing Service to direct any number of requests that originate from a single logical client to a single backend web server.

docs/datasources/loadbalancer/loadbalancer.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ The following arguments are supported:
2222
## Load Balancer Reference
2323
* `id` - The OCID of the load balancer.
2424
* `ip_addresses` - An array of IP Addresses
25+
* `is_private` - Whether the load balancer has a VCN-local (private) IP address
2526
* `time_created` - The date and time the image was created.
2627
* `shape` - A template that determines the total pre-provisioned bandwidth (ingress plus egress).
2728
* `subnet_ids` - An array of subnet OCIDs
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
* This example creates a private load balancer on one subnet in a single AD.
3+
*/
4+
5+
variable "tenancy_ocid" {}
6+
variable "user_ocid" {}
7+
variable "fingerprint" {}
8+
variable "private_key_path" {}
9+
variable "compartment_ocid" {}
10+
11+
12+
provider "baremetal" {
13+
tenancy_ocid = "${var.tenancy_ocid}"
14+
user_ocid = "${var.user_ocid}"
15+
fingerprint = "${var.fingerprint}"
16+
private_key_path = "${var.private_key_path}"
17+
}
18+
19+
data "baremetal_identity_availability_domains" "ADs" {
20+
compartment_id = "${var.tenancy_ocid}"
21+
}
22+
23+
24+
/* Network */
25+
26+
resource "baremetal_core_virtual_network" "vcn1" {
27+
cidr_block = "10.1.0.0/16"
28+
compartment_id = "${var.compartment_ocid}"
29+
display_name = "vcn1"
30+
dns_label = "vcn1"
31+
}
32+
33+
resource "baremetal_core_subnet" "subnet1" {
34+
availability_domain = "${lookup(data.baremetal_identity_availability_domains.ADs.availability_domains[0],"name")}"
35+
cidr_block = "10.1.20.0/24"
36+
display_name = "subnet1"
37+
dns_label = "subnet1"
38+
compartment_id = "${var.compartment_ocid}"
39+
vcn_id = "${baremetal_core_virtual_network.vcn1.id}"
40+
security_list_ids = ["${baremetal_core_virtual_network.vcn1.default_security_list_id}"]
41+
route_table_id = "${baremetal_core_virtual_network.vcn1.default_route_table_id}"
42+
dhcp_options_id = "${baremetal_core_virtual_network.vcn1.default_dhcp_options_id}"
43+
prohibit_public_ip_on_vnic = true
44+
45+
provisioner "local-exec" {
46+
command = "sleep 5"
47+
}
48+
}
49+
50+
51+
/* Load Balancer */
52+
53+
resource "baremetal_load_balancer" "lb1" {
54+
shape = "100Mbps"
55+
compartment_id = "${var.compartment_ocid}"
56+
subnet_ids = [
57+
"${baremetal_core_subnet.subnet1.id}"
58+
]
59+
display_name = "lb1"
60+
is_private = true
61+
}
62+
63+
resource "baremetal_load_balancer_backendset" "lb-bes1" {
64+
name = "lb-bes1"
65+
load_balancer_id = "${baremetal_load_balancer.lb1.id}"
66+
policy = "ROUND_ROBIN"
67+
68+
health_checker {
69+
port = "80"
70+
protocol = "HTTP"
71+
response_body_regex = ".*"
72+
url_path = "/"
73+
}
74+
75+
session_persistence_configuration {
76+
cookie_name = "lb-session1"
77+
disable_fallback = true
78+
}
79+
}
80+
81+
output "lb_private_ip" {
82+
value = ["${baremetal_load_balancer.lb1.ip_addresses}"]
83+
}

docs/resources/loadbalancer/backend.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ resource "baremetal_load_balancer_backend" "t" {
2222
The following arguments are supported:
2323

2424
* `load_balancer_id` - (Required) The OCID of the load balancer.
25-
* `backendset_name` - (Required) The public IP address of the on-premise router.
25+
* `backendset_name` - (Required) The name of the backend set to add the backend server to.
2626
* `ip_address` - (Required) The IP address of the backend server.
2727
* `port` - (Required) The communication port for the backend server.
2828
* `backup` - (Optional) Whether the load balancer should treat this server as a backup unit.

0 commit comments

Comments
 (0)