def Validate(self):
assert len(self.reservations) == self._GetSize()
assert len(self.ext_reservations) == self._GetSize()
- all_res = self.reservations & self.ext_reservations
- assert not all_res.any()
if self.gateway is not None:
assert self.gateway in self.network
"""
return self.all_reservations.to01().replace("1", "X").replace("0", ".")
- def IsReserved(self, address):
+ def IsReserved(self, address, external=False):
"""Checks if the given IP is reserved.
"""
idx = self._GetAddrIndex(address)
- return self.all_reservations[idx]
+ if external:
+ return self.ext_reservations[idx]
+ else:
+ return self.reservations[idx]
def Reserve(self, address, external=False):
"""Mark an address as used.
"""
- if self.IsReserved(address):
- raise errors.AddressPoolError("%s is already reserved" % address)
+ if self.IsReserved(address, external):
+ if external:
+ msg = "IP %s is already externally reserved" % address
+ else:
+ msg = "IP %s is already used by an instance" % address
+ raise errors.AddressPoolError(msg)
+
self._Mark(address, external=external)
def Release(self, address, external=False):
"""Release a given address reservation.
"""
+ if not self.IsReserved(address, external):
+ if external:
+ msg = "IP %s is not externally reserved" % address
+ else:
+ msg = "IP %s is not used by an instance" % address
+ raise errors.AddressPoolError(msg)
+
self._Mark(address, value=False, external=external)
def GetFreeAddress(self):