@@ -23,7 +23,6 @@ import (
2323 "github.com/aws/amazon-vpc-resource-controller-k8s/pkg/config"
2424 rcHealthz "github.com/aws/amazon-vpc-resource-controller-k8s/pkg/healthz"
2525 "github.com/aws/amazon-vpc-resource-controller-k8s/pkg/utils"
26- "github.com/samber/lo"
2726
2827 ec2Errors "github.com/aws/amazon-vpc-resource-controller-k8s/pkg/aws/errors"
2928 "github.com/aws/aws-sdk-go-v2/aws"
@@ -38,6 +37,7 @@ import (
3837// NetworkInterfaceManager interface allows to define the ENI filters and checks if ENI should be deleted for different callers like in the periodic cleanup routine or
3938// during node termination
4039type NetworkInterfaceManager interface {
40+ // If there are multiple filters then we will OR them.
4141 GetENITagFilters () []ec2types.Filter
4242 ShouldDeleteENI (eniID * string ) bool
4343 UpdateAvailableENIsIfNeeded (eniMap * map [string ]struct {})
@@ -126,18 +126,36 @@ func (e *ENICleaner) DeleteLeakedResources() error {
126126 }... )
127127
128128 // only apply extra filters when the controller is enabled which provides cninode resources
129+ var OrFilters []ec2types.Filter
130+ var err error
131+ var networkInterfaces []* ec2types.NetworkInterface
129132 if ! e .ControllerDisabled {
130133 // get cleaner specific filters
131- filters = append (filters , e .Manager .GetENITagFilters ()... )
132- }
133- describeNetworkInterfaceIp := & ec2.DescribeNetworkInterfacesInput {
134- Filters : filters ,
135- }
134+ OrFilters = e .Manager .GetENITagFilters ()
135+ for _ , OrFilter := range OrFilters {
136+ filterCopy := append ([]ec2types.Filter {}, filters ... )
137+ filterCopy = append (filterCopy , OrFilter )
138+
139+ describeNetworkInterfaceIp := & ec2.DescribeNetworkInterfacesInput {
140+ Filters : filterCopy ,
141+ }
136142
137- networkInterfaces , err := e .EC2Wrapper .DescribeNetworkInterfacesPagesWithRetry (describeNetworkInterfaceIp )
138- if err != nil {
139- e .Log .Error (err , "failed to describe network interfaces, cleanup will be retried in next cycle" )
140- return err
143+ tempNetworkInterfaces , err := e .EC2Wrapper .DescribeNetworkInterfacesPagesWithRetry (describeNetworkInterfaceIp )
144+ if err != nil {
145+ e .Log .Error (err , "failed to describe network interfaces, cleanup will be retried in next cycle" )
146+ return err
147+ }
148+ networkInterfaces = append (networkInterfaces , tempNetworkInterfaces ... )
149+ }
150+ } else {
151+ describeNetworkInterfaceIp := & ec2.DescribeNetworkInterfacesInput {
152+ Filters : filters ,
153+ }
154+ networkInterfaces , err = e .EC2Wrapper .DescribeNetworkInterfacesPagesWithRetry (describeNetworkInterfaceIp )
155+ if err != nil {
156+ e .Log .Error (err , "failed to describe network interfaces, cleanup will be retried in next cycle" )
157+ return err
158+ }
141159 }
142160
143161 for _ , nwInterface := range networkInterfaces {
@@ -169,9 +187,12 @@ func (e *ENICleaner) DeleteLeakedResources() error {
169187 }
170188 continue
171189 }
172- e .Log .Info ("deleted leaked ENI successfully" ,
173- "eniID" , nwInterface .NetworkInterfaceId ,
174- "instanceID" , lo .TernaryF (nwInterface .Attachment == nil , func () * string { return lo .ToPtr ("" ) }, func () * string { return nwInterface .Attachment .InstanceId }))
190+ // It is possible for eni attachment to be nil, if it was never attached to instance
191+ instanceID := ""
192+ if nwInterface .Attachment != nil && nwInterface .Attachment .InstanceId != nil {
193+ instanceID = aws .ToString (nwInterface .Attachment .InstanceId )
194+ }
195+ e .Log .Info ("deleted leaked ENI successfully" , "eni id" , * nwInterface .NetworkInterfaceId , "instance id" , instanceID )
175196 } else {
176197 // Seeing the ENI for the first time, add it to the new list of available network interfaces
177198 availableENIs [* nwInterface .NetworkInterfaceId ] = struct {}{}
@@ -184,11 +205,14 @@ func (e *ENICleaner) DeleteLeakedResources() error {
184205}
185206
186207func (e * ClusterENICleaner ) GetENITagFilters () []ec2types.Filter {
187- clusterNameTagKey := fmt .Sprintf (config .ClusterNameTagKeyFormat , e .ClusterName )
188208 return []ec2types.Filter {
189209 {
190- Name : aws .String ("tag:" + clusterNameTagKey ),
191- Values : []string {config .ClusterNameTagValue },
210+ Name : aws .String ("tag:" + config .VPCCNIClusterNameKey ),
211+ Values : []string {e .ClusterName },
212+ },
213+ {
214+ Name : aws .String ("tag:" + fmt .Sprintf (config .VPCRCClusterNameTagKeyFormat , e .ClusterName )),
215+ Values : []string {config .VPCRCClusterNameTagValue },
192216 },
193217 }
194218}
0 commit comments