From 729634323d2c664e66d85b79ff6855c582573af6 Mon Sep 17 00:00:00 2001 From: FengyunPan Date: Tue, 19 Sep 2017 11:09:13 +0800 Subject: [PATCH] Fix missing floatingip when calling GetLoadBalancer() If user specify floating-network-id, a floatingip be assigned to LoadBalancer service, So its status contains a floatingip, but GetLoadBalancer() only return vip. --- .../openstack/openstack_loadbalancer.go | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go b/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go index a4cdca131cf..b6f722a0ccd 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go +++ b/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go @@ -536,7 +536,17 @@ func (lbaas *LbaasV2) GetLoadBalancer(clusterName string, service *v1.Service) ( } status := &v1.LoadBalancerStatus{} - status.Ingress = []v1.LoadBalancerIngress{{IP: loadbalancer.VipAddress}} + + portID := loadbalancer.VipPortID + if portID != "" { + floatIP, err := getFloatingIPByPortID(lbaas.network, portID) + if err != nil { + return nil, false, fmt.Errorf("Error getting floating ip for port %s: %v", portID, err) + } + status.Ingress = []v1.LoadBalancerIngress{{IP: floatIP.FloatingIP}} + } else { + status.Ingress = []v1.LoadBalancerIngress{{IP: loadbalancer.VipAddress}} + } return status, true, err } @@ -1287,7 +1297,16 @@ func (lb *LbaasV1) GetLoadBalancer(clusterName string, service *v1.Service) (*v1 } status := &v1.LoadBalancerStatus{} - status.Ingress = []v1.LoadBalancerIngress{{IP: vip.Address}} + + if vip.PortID != "" { + floatingIP, err := getFloatingIPByPortID(lb.network, vip.PortID) + if err != nil { + return nil, false, fmt.Errorf("Error getting floating ip for port %s: %v", vip.PortID, err) + } + status.Ingress = []v1.LoadBalancerIngress{{IP: floatingIP.FloatingIP}} + } else { + status.Ingress = []v1.LoadBalancerIngress{{IP: vip.Address}} + } return status, true, err }