'Get an unused ip address in a allocation pool of net'

@classmethod
def get_unused_ip(cls, net_id, ip_version=None):

    body = cls.admin_client.list_ports(network_id=net_id)
    ports = body['ports']
    used_ips = []
    for port in ports:
        used_ips.extend([fixed_ip['ip_address'] for fixed_ip in port['fixed_ips']])
    body = cls.admin_client.list_subnets(network_id=net_id)
    subnets = body['subnets']
    for subnet in subnets:
        if (ip_version and (subnet['ip_version'] != ip_version)):
            continue
        cidr = subnet['cidr']
        allocation_pools = subnet['allocation_pools']
        iterators = []
        if allocation_pools:
            for allocation_pool in allocation_pools:
                iterators.append(netaddr.iter_iprange(allocation_pool['start'], allocation_pool['end']))
        else:
            net = netaddr.IPNetwork(cidr)
            def _iterip():
                for ip in net:
                    if (ip not in (net.network, net.broadcast)):
                        (yield ip)
            iterators.append(iter(_iterip()))
        for iterator in iterators:
            for ip in iterator:
                if (str(ip) not in used_ips):
                    return str(ip)
    message = ('net(%s)    has    no    usable    IP    address    in    allocation    pools' % net_id)
    raise exceptions.InvalidConfiguration(message)
