net_uuid = self._UnlockedLookupNetwork(net)
nobj = self._UnlockedGetNetwork(net_uuid)
pool = network.AddressPool(nobj)
- gen_free = pool.GenerateFree()
def gen_one():
try:
- ip = gen_free()
- except StopIteration:
+ ip = pool.GenerateFree()
+ except errors.AddressPoolError:
raise errors.ReservationError("Cannot generate IP. Network is full")
return (constants.RESERVE_ACTION, ip, net_uuid)
return address
def GenerateFree(self):
- """A generator for free addresses."""
- def _iter_free():
- for idx in self.all_reservations.search("0", 64):
- yield str(self.network[idx])
+ """Returns the first free address of the network if any or
+ raises an error if it is full.
- return _iter_free().next
+ """
+ if self.IsFull():
+ raise errors.AddressPoolError("%s is full" % self.network)
+ idx = self.all_reservations.search("0", 1)
+ return str(self.network[idx])
def GetExternalReservations(self):
"""Returns a list of all externally reserved addresses"""