diff --git a/go.mod b/go.mod index 0ac3bf0f6d..ce8e3e1388 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/antonmedv/expr v1.9.0 github.com/argoproj/notifications-engine v0.3.1-0.20220129012210-32519f8f68ec github.com/argoproj/pkg v0.9.0 + github.com/aws/aws-sdk-go-v2 v1.13.0 github.com/aws/aws-sdk-go-v2/config v1.13.1 github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.15.0 github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.16.0 @@ -66,7 +67,6 @@ require ( github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20210112200207-10ab4d695d60 // indirect - github.com/aws/aws-sdk-go-v2 v1.13.0 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.8.0 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.10.0 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.4 // indirect diff --git a/utils/aws/aws.go b/utils/aws/aws.go index eba35e4f48..501e17b3ac 100644 --- a/utils/aws/aws.go +++ b/utils/aws/aws.go @@ -6,6 +6,8 @@ import ( "fmt" "strings" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/argoproj/argo-rollouts/utils/defaults" "github.com/aws/aws-sdk-go-v2/config" elbv2 "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2" @@ -128,13 +130,18 @@ func FakeNewClientFunc(elbClient ELBv2APIClient) func() (Client, error) { } func (c *ClientAdapter) FindLoadBalancerByDNSName(ctx context.Context, dnsName string) (*elbv2types.LoadBalancer, error) { - lbOutput, err := c.ELBV2.DescribeLoadBalancers(ctx, &elbv2.DescribeLoadBalancersInput{}) - if err != nil { - return nil, err - } - for _, lb := range lbOutput.LoadBalancers { - if lb.DNSName != nil && *lb.DNSName == dnsName { - return &lb, nil + paginator := elbv2.NewDescribeLoadBalancersPaginator(c.ELBV2, &elbv2.DescribeLoadBalancersInput{ + PageSize: aws.Int32(defaults.DefaultAwsLoadBalancerPageSize), + }) + for paginator.HasMorePages() { + output, err := paginator.NextPage(ctx) + if err != nil { + return nil, err + } + for _, lb := range output.LoadBalancers { + if lb.DNSName != nil && *lb.DNSName == dnsName { + return &lb, nil + } } } return nil, nil diff --git a/utils/defaults/defaults.go b/utils/defaults/defaults.go index 8a9a000675..5570f65481 100644 --- a/utils/defaults/defaults.go +++ b/utils/defaults/defaults.go @@ -40,6 +40,8 @@ const ( DefaultQPS float32 = 40.0 // DefaultBurst is the default value for Burst for client side throttling to the K8s API server DefaultBurst int = 80 + // DefaultAwsLoadBalancerPageSize is the default page size used when calling aws to get load balancers by DNS name + DefaultAwsLoadBalancerPageSize = int32(300) ) const (