OpenStack: Support loadbalancer client IP affinity

This commit is contained in:
Angus Lees 2014-12-24 10:35:59 +11:00
parent 879bc3a677
commit 4ff292a65e

View File

@ -427,10 +427,18 @@ func (lb *LoadBalancer) TCPLoadBalancerExists(name, region string) (bool, error)
// each region. // each region.
func (lb *LoadBalancer) CreateTCPLoadBalancer(name, region string, externalIP net.IP, port int, hosts []string, affinity api.AffinityType) (string, error) { func (lb *LoadBalancer) CreateTCPLoadBalancer(name, region string, externalIP net.IP, port int, hosts []string, affinity api.AffinityType) (string, error) {
glog.V(2).Infof("CreateTCPLoadBalancer(%v, %v, %v, %v, %v)", name, region, externalIP, port, hosts) glog.V(2).Infof("CreateTCPLoadBalancer(%v, %v, %v, %v, %v, %v)", name, region, externalIP, port, hosts, affinity)
if affinity != api.AffinityTypeNone {
var persistence *vips.SessionPersistence
switch affinity {
case api.AffinityTypeNone:
persistence = nil
case api.AffinityTypeClientIP:
persistence = &vips.SessionPersistence{Type: "SOURCE_IP"}
default:
return "", fmt.Errorf("unsupported load balancer affinity: %v", affinity) return "", fmt.Errorf("unsupported load balancer affinity: %v", affinity)
} }
pool, err := pools.Create(lb.network, pools.CreateOpts{ pool, err := pools.Create(lb.network, pools.CreateOpts{
Name: name, Name: name,
Protocol: pools.ProtocolTCP, Protocol: pools.ProtocolTCP,
@ -485,6 +493,7 @@ func (lb *LoadBalancer) CreateTCPLoadBalancer(name, region string, externalIP ne
Protocol: "TCP", Protocol: "TCP",
ProtocolPort: port, ProtocolPort: port,
PoolID: pool.ID, PoolID: pool.ID,
Persistence: persistence,
}).Extract() }).Extract()
if err != nil { if err != nil {
if mon != nil { if mon != nil {