Skip to content
This repository was archived by the owner on Mar 22, 2018. It is now read-only.

Commit c5d751a

Browse files
Allow use of Octavia endpoint
1 parent 0a7c607 commit c5d751a

3 files changed

Lines changed: 76 additions & 51 deletions

File tree

pkg/cloudprovider/providers/openstack/openstack.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,13 @@ func (d *MyDuration) UnmarshalText(text []byte) error {
7474
type LoadBalancer struct {
7575
network *gophercloud.ServiceClient
7676
compute *gophercloud.ServiceClient
77+
lb *gophercloud.ServiceClient
7778
opts LoadBalancerOpts
7879
}
7980

8081
type LoadBalancerOpts struct {
8182
LBVersion string `gcfg:"lb-version"` // overrides autodetection. Only support v2.
83+
UseOctavia bool `gcfg:"use-octavia"` // uses Octavia V2 service catalog endpoint
8284
SubnetId string `gcfg:"subnet-id"` // overrides autodetection.
8385
FloatingNetworkId string `gcfg:"floating-network-id"` // If specified, will create floating ip for loadbalancer, or do not create floating ip.
8486
LBMethod string `gcfg:"lb-method"` // default to ROUND_ROBIN.
@@ -507,6 +509,11 @@ func (os *OpenStack) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
507509
return nil, false
508510
}
509511

512+
lb, err := os.NewLoadBalancerV2()
513+
if err != nil {
514+
return nil, false
515+
}
516+
510517
// LBaaS v1 is deprecated in the OpenStack Liberty release.
511518
// Currently kubernetes OpenStack cloud provider just support LBaaS v2.
512519
lbVersion := os.lbOpts.LBVersion
@@ -517,7 +524,7 @@ func (os *OpenStack) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
517524

518525
glog.V(1).Info("Claiming to support LoadBalancer")
519526

520-
return &LbaasV2{LoadBalancer{network, compute, os.lbOpts}}, true
527+
return &LbaasV2{LoadBalancer{network, compute, lb, os.lbOpts}}, true
521528
}
522529

523530
func isNotFound(err error) bool {

pkg/cloudprovider/providers/openstack/openstack_client.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,21 @@ func (os *OpenStack) NewBlockStorageV2() (*gophercloud.ServiceClient, error) {
6262
}
6363
return storage, nil
6464
}
65+
66+
func (os *OpenStack) NewLoadBalancerV2() (*gophercloud.ServiceClient, error) {
67+
var lb *gophercloud.ServiceClient
68+
var err error
69+
if os.lbOpts.UseOctavia {
70+
lb, err = openstack.NewLoadBalancerV2(os.provider, gophercloud.EndpointOpts{
71+
Region: os.region,
72+
})
73+
} else {
74+
lb, err = openstack.NewNetworkV2(os.provider, gophercloud.EndpointOpts{
75+
Region: os.region,
76+
})
77+
}
78+
if err != nil {
79+
return nil, fmt.Errorf("failed to find load-balancer v2 endpoint for region %s: %v", os.region, err)
80+
}
81+
return lb, nil
82+
}

0 commit comments

Comments
 (0)