diff --git a/cloudmock/aws/mockec2/eni.go b/cloudmock/aws/mockec2/eni.go index 5c3c4efb1c5f1..f84fae1c0babc 100644 --- a/cloudmock/aws/mockec2/eni.go +++ b/cloudmock/aws/mockec2/eni.go @@ -22,3 +22,7 @@ func (m *MockEC2) DescribeNetworkInterfaces(input *ec2.DescribeNetworkInterfaces output := &ec2.DescribeNetworkInterfacesOutput{} return output, nil } + +func (m *MockEC2) DescribeNetworkInterfacesPages(*ec2.DescribeNetworkInterfacesInput, func(*ec2.DescribeNetworkInterfacesOutput, bool) bool) error { + return nil +} diff --git a/pkg/resources/aws/eni.go b/pkg/resources/aws/eni.go index eb06153022e40..5a46c3ffea5a3 100644 --- a/pkg/resources/aws/eni.go +++ b/pkg/resources/aws/eni.go @@ -66,24 +66,28 @@ func DumpENI(op *resources.DumpOperation, r *resources.Resource) error { func DescribeENIs(cloud fi.Cloud, clusterName string) (map[string]*ec2.NetworkInterface, error) { c := cloud.(awsup.AWSCloud) + statusFilter := &ec2.Filter{ + Name: aws.String("status"), + Values: []*string{ + aws.String(ec2.NetworkInterfaceStatusDetaching), + aws.String(ec2.NetworkInterfaceStatusAvailable), + }, + } enis := make(map[string]*ec2.NetworkInterface) klog.V(2).Info("Listing ENIs") for _, filters := range buildEC2FiltersForCluster(clusterName) { request := &ec2.DescribeNetworkInterfacesInput{ - Filters: filters, + Filters: append(filters, statusFilter), } - response, err := c.EC2().DescribeNetworkInterfaces(request) + err := c.EC2().DescribeNetworkInterfacesPages(request, func(dnio *ec2.DescribeNetworkInterfacesOutput, b bool) bool { + for _, eni := range dnio.NetworkInterfaces { + enis[aws.StringValue(eni.NetworkInterfaceId)] = eni + } + return true + }) if err != nil { return nil, fmt.Errorf("error listing ENIs: %v", err) } - - for _, eni := range response.NetworkInterfaces { - // Skip ENIs that are attached - if eni.Attachment != nil { - continue - } - enis[aws.StringValue(eni.NetworkInterfaceId)] = eni - } } return enis, nil