Revision 031d2db1 lib/network.py
b/lib/network.py | ||
---|---|---|
153 | 153 |
def Validate(self): |
154 | 154 |
assert len(self.reservations) == self._GetSize() |
155 | 155 |
assert len(self.ext_reservations) == self._GetSize() |
156 |
all_res = self.reservations & self.ext_reservations |
|
157 |
assert not all_res.any() |
|
158 | 156 |
|
159 | 157 |
if self.gateway is not None: |
160 | 158 |
assert self.gateway in self.network |
... | ... | |
188 | 186 |
""" |
189 | 187 |
return self.all_reservations.to01().replace("1", "X").replace("0", ".") |
190 | 188 |
|
191 |
def IsReserved(self, address): |
|
189 |
def IsReserved(self, address, external=False):
|
|
192 | 190 |
"""Checks if the given IP is reserved. |
193 | 191 |
|
194 | 192 |
""" |
195 | 193 |
idx = self._GetAddrIndex(address) |
196 |
return self.all_reservations[idx] |
|
194 |
if external: |
|
195 |
return self.ext_reservations[idx] |
|
196 |
else: |
|
197 |
return self.reservations[idx] |
|
197 | 198 |
|
198 | 199 |
def Reserve(self, address, external=False): |
199 | 200 |
"""Mark an address as used. |
200 | 201 |
|
201 | 202 |
""" |
202 |
if self.IsReserved(address): |
|
203 |
raise errors.AddressPoolError("%s is already reserved" % address) |
|
203 |
if self.IsReserved(address, external): |
|
204 |
if external: |
|
205 |
msg = "IP %s is already externally reserved" % address |
|
206 |
else: |
|
207 |
msg = "IP %s is already used by an instance" % address |
|
208 |
raise errors.AddressPoolError(msg) |
|
209 |
|
|
204 | 210 |
self._Mark(address, external=external) |
205 | 211 |
|
206 | 212 |
def Release(self, address, external=False): |
207 | 213 |
"""Release a given address reservation. |
208 | 214 |
|
209 | 215 |
""" |
216 |
if not self.IsReserved(address, external): |
|
217 |
if external: |
|
218 |
msg = "IP %s is not externally reserved" % address |
|
219 |
else: |
|
220 |
msg = "IP %s is not used by an instance" % address |
|
221 |
raise errors.AddressPoolError(msg) |
|
222 |
|
|
210 | 223 |
self._Mark(address, value=False, external=external) |
211 | 224 |
|
212 | 225 |
def GetFreeAddress(self): |
Also available in: Unified diff