Skip to content

Commit 97b7df2

Browse files
committed
add find lb by label first
1 parent 47dab94 commit 97b7df2

1 file changed

Lines changed: 26 additions & 7 deletions

File tree

serverscom/loadbalancers.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func newLoadBalancers(client *cli.Client, defaultLocationID *int64) cloudprovide
3434
}
3535

3636
func (l *loadBalancers) GetLoadBalancer(ctx context.Context, clusterName string, service *v1.Service) (*v1.LoadBalancerStatus, bool, error) {
37-
loadBalancer, err := l.findLoadBalancerByName(ctx, clusterName, service)
37+
loadBalancer, err := l.findLoadBalancer(ctx, clusterName, service)
3838

3939
if err != nil && isNotFoundError(err) {
4040
return nil, false, nil
@@ -59,7 +59,7 @@ func (l *loadBalancers) GetLoadBalancerName(ctx context.Context, clusterName str
5959
}
6060

6161
func (l *loadBalancers) EnsureLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) {
62-
loadBalancer, err := l.findLoadBalancerByName(ctx, clusterName, service)
62+
loadBalancer, err := l.findLoadBalancer(ctx, clusterName, service)
6363
if err != nil {
6464
if !isNotFoundError(err) {
6565
return nil, err
@@ -130,7 +130,7 @@ func (l *loadBalancers) EnsureLoadBalancer(ctx context.Context, clusterName stri
130130
}
131131

132132
func (l *loadBalancers) UpdateLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) error {
133-
loadBalancer, err := l.findLoadBalancerByName(ctx, clusterName, service)
133+
loadBalancer, err := l.findLoadBalancer(ctx, clusterName, service)
134134
if err != nil {
135135
return err
136136
}
@@ -166,7 +166,7 @@ func (l *loadBalancers) UpdateLoadBalancer(ctx context.Context, clusterName stri
166166
}
167167

168168
func (l *loadBalancers) EnsureLoadBalancerDeleted(ctx context.Context, clusterName string, service *v1.Service) error {
169-
loadBalancer, err := l.findLoadBalancerByName(ctx, clusterName, service)
169+
loadBalancer, err := l.findLoadBalancer(ctx, clusterName, service)
170170
if err != nil {
171171
if isNotFoundError(err) {
172172
return nil
@@ -178,10 +178,29 @@ func (l *loadBalancers) EnsureLoadBalancerDeleted(ctx context.Context, clusterNa
178178
return l.client.LoadBalancers.DeleteL4LoadBalancer(ctx, loadBalancer.ID)
179179
}
180180

181-
func (l *loadBalancers) findLoadBalancerByName(ctx context.Context, clusterName string, service *v1.Service) (*cli.L4LoadBalancer, error) {
182-
name := l.GetLoadBalancerName(ctx, clusterName, service)
183-
181+
// findLoadBalancer tries to find load balancer by label selector first, then by name
182+
func (l *loadBalancers) findLoadBalancer(ctx context.Context, clusterName string, service *v1.Service) (*cli.L4LoadBalancer, error) {
183+
// first try to find by label selector
184+
labelSelector := loadBalancerServiceUUIDLabel + "=" + string(service.UID)
184185
loadBalancers, err := l.client.LoadBalancers.Collection().
186+
SetPerPage(100).
187+
SetParam(typeParamKey, "l4").
188+
SetParam("label_selector", labelSelector).
189+
Collect(ctx)
190+
191+
if err != nil {
192+
return nil, err
193+
}
194+
195+
if len(loadBalancers) == 1 {
196+
return l.client.LoadBalancers.GetL4LoadBalancer(ctx, loadBalancers[0].ID)
197+
} else if len(loadBalancers) > 1 {
198+
return nil, fmt.Errorf("found more than one load balancer with the same label selector: %s", labelSelector)
199+
}
200+
201+
// fallback to name-based search
202+
name := l.GetLoadBalancerName(ctx, clusterName, service)
203+
loadBalancers, err = l.client.LoadBalancers.Collection().
185204
SetPerPage(100).
186205
SetParam(typeParamKey, "l4").
187206
SetParam(searchPatternParamKey, name).

0 commit comments

Comments
 (0)