in internal/deployers/eksapi/infra.go [330:364]
func (m *InfrastructureManager) deleteLeakedENIs() error {
infra, err := m.getInfrastructureStackResources()
if err != nil {
var notFound *cloudformationtypes.StackNotFoundException
if errors.As(err, ¬Found) {
return nil
}
return fmt.Errorf("failed to get infrastructure stack resources: %w", err)
}
enis, err := m.getVPCCNINetworkInterfaceIds(infra.vpc)
if err != nil {
return err
}
if len(enis) == 0 {
return nil
}
klog.Infof("waiting for %d leaked ENI(s) to become available: %v", len(enis), enis)
if err := ec2.NewNetworkInterfaceAvailableWaiter(m.clients.EC2()).Wait(context.TODO(), &ec2.DescribeNetworkInterfacesInput{
NetworkInterfaceIds: enis,
}, networkInterfaceDetachmentTimeout); err != nil {
return fmt.Errorf("failed to wait for ENI(s) to become available: %v", err)
}
for _, eni := range enis {
klog.Infof("deleting leaked ENI: %s", eni)
_, err := m.clients.EC2().DeleteNetworkInterface(context.TODO(), &ec2.DeleteNetworkInterfaceInput{
NetworkInterfaceId: aws.String(eni),
})
if err != nil {
return fmt.Errorf("failed to delete leaked ENI: %w", err)
}
}
klog.Infof("deleted %d leaked ENI(s)!", len(enis))
m.metrics.Record(infraLeakedENIs, float64(len(enis)), nil)
return nil
}