func()

in cmd/lb_list.go [55:99]


func (o lbListOperation) find() (elbv2.LoadBalancers, error) {
	var wg sync.WaitGroup

	o.output.Debug("Describing Load Balancers [API=elbv2 Action=DescribeLoadBalancers]")
	loadBalancers, err := o.elbv2.DescribeLoadBalancers()

	if err != nil {
		return elbv2.LoadBalancers{}, err
	}

	errs := make(chan error)
	done := make(chan bool)
	limiter := rate.NewLimiter(describeRequestLimitRate, 1)

	for i := 0; i < len(loadBalancers); i++ {
		wg.Add(1)

		go func(index int) {
			defer wg.Done()

			if err := limiter.Wait(context.Background()); err == nil {
				o.output.Debug("Describing Listeners [API=elbv2 Action=DescribeListeners LoadBalancerArn=%s]", loadBalancers[index].ARN)
				listeners, err := o.elbv2.DescribeListeners(loadBalancers[index].ARN)

				if err != nil {
					errs <- err
				}

				loadBalancers[index].Listeners = listeners
			}
		}(i)
	}

	go func() {
		wg.Wait()
		done <- true
	}()

	select {
	case err := <-errs:
		return elbv2.LoadBalancers{}, err
	case <-done:
		return loadBalancers, nil
	}
}