'Free an IP from the used list and re-insert it to its queue.
Any IP freed will also be re-inserted into the associated queue, which
is calculated at deletion.
If an IP matches multiple CIDR ranges available, it will be inserted
to the first one matched.
:param ip: ``str`` IP address which to release back into the usable
pool.'

def release(self, ip):

    self._used_ips.discard(ip)
    addr = netaddr.IPAddress(ip)
    for (name, network) in self._networks.items():
        if (addr in network):
            self._queues[name].append(ip)
