in pkg/ipamd/datastore/data_store.go [901:952]
func (ds *DataStore) getDeletableENI(warmIPTarget, minimumIPTarget, warmPrefixTarget int) *ENI {
for _, eni := range ds.eniPool {
if eni.IsPrimary {
ds.log.Debugf("ENI %s cannot be deleted because it is primary", eni.ID)
continue
}
if eni.isTooYoung() {
ds.log.Debugf("ENI %s cannot be deleted because it is too young", eni.ID)
continue
}
if eni.hasIPInCooling(ds.ipCooldownPeriod) {
ds.log.Debugf("ENI %s cannot be deleted because has IPs in cooling", eni.ID)
continue
}
if eni.hasPods() {
ds.log.Debugf("ENI %s cannot be deleted because it has pods assigned", eni.ID)
continue
}
if warmIPTarget != 0 && ds.isRequiredForWarmIPTarget(warmIPTarget, eni) {
ds.log.Debugf("ENI %s cannot be deleted because it is required for WARM_IP_TARGET: %d", eni.ID, warmIPTarget)
continue
}
if minimumIPTarget != 0 && ds.isRequiredForMinimumIPTarget(minimumIPTarget, eni) {
ds.log.Debugf("ENI %s cannot be deleted because it is required for MINIMUM_IP_TARGET: %d", eni.ID, minimumIPTarget)
continue
}
if ds.isPDEnabled && warmPrefixTarget != 0 && ds.isRequiredForWarmPrefixTarget(warmPrefixTarget, eni) {
ds.log.Debugf("ENI %s cannot be deleted because it is required for WARM_PREFIX_TARGET: %d", eni.ID, warmPrefixTarget)
continue
}
if eni.IsTrunk {
ds.log.Debugf("ENI %s cannot be deleted because it is a trunk ENI", eni.ID)
continue
}
if eni.IsEFA {
ds.log.Debugf("ENI %s cannot be deleted because it is an EFA ENI", eni.ID)
continue
}
ds.log.Debugf("getDeletableENI: found a deletable ENI %s", eni.ID)
return eni
}
return nil
}