anexia-it/k8s-anexia-ccm

View on GitHub
anx/provider/loadbalancer/discovery/loadbalancer.go

Summary

Maintainability
A
0 mins
Test Coverage
package discovery
 
import (
"context"
"fmt"
 
"github.com/go-logr/logr"
"go.anx.io/go-anxcloud/pkg/api"
"go.anx.io/go-anxcloud/pkg/api/types"
 
corev1 "go.anx.io/go-anxcloud/pkg/apis/core/v1"
lbaasv1 "go.anx.io/go-anxcloud/pkg/apis/lbaas/v1"
)
 
// DiscoverLoadBalancers uses the given generic API client and tag to discover LBaaS LoadBalancers to use.
func DiscoverLoadBalancers(ctx context.Context, apiClient api.API, tag string) ([]string, error) {
logger := logr.FromContextOrDiscard(ctx)
 
ctx, cancel := context.WithCancel(ctx)
defer cancel()
 
ret := make([]string, 0)
 
var oc types.ObjectChannel
err := apiClient.List(ctx, &corev1.Resource{Tags: []string{tag}}, api.ObjectChannel(&oc))
if err != nil {
return nil, fmt.Errorf("unable to autodiscover load balancer by tag %q: %w", tag, err)
}
 
for retriever := range oc {
var res corev1.Resource
err := retriever(&res)
if err != nil {
return nil, fmt.Errorf("error retrieving resource: %w", err)
}
 
lb := lbaasv1.LoadBalancer{Identifier: res.Identifier}
err = apiClient.Get(ctx, &lb)
if err != nil {
logger.Error(err, "Error retrieving LoadBalancer, maybe something else is tagged with %q? Ignoring this one and continuing",
"identifier", res.Identifier,
)
continue
}
 
logger.V(1).Info("Found LoadBalancer via auto discovery", "identifier", lb.Identifier)
 
ret = append(ret, res.Identifier)
}
 
return ret, nil
}