Revision e5370111 lib/config.py

b/lib/config.py
384 384
    _, address, _ = self._temporary_ips.Generate([], gen_one, ec_id)
385 385
    return address
386 386

  
387
  def _UnlockedReserveIp(self, net_uuid, address, ec_id):
387
  def _UnlockedReserveIp(self, net_uuid, address, ec_id, check=True):
388 388
    """Reserve a given IPv4 address for use by an instance.
389 389

  
390 390
    """
......
392 392
    pool = network.AddressPool(nobj)
393 393
    try:
394 394
      isreserved = pool.IsReserved(address)
395
      isextreserved = pool.IsReserved(address, external=True)
395 396
    except errors.AddressPoolError:
396 397
      raise errors.ReservationError("IP address not in network")
397 398
    if isreserved:
398 399
      raise errors.ReservationError("IP address already in use")
400
    if check and isextreserved:
401
      raise errors.ReservationError("IP is externally reserved")
399 402

  
400 403
    return self._temporary_ips.Reserve(ec_id,
401 404
                                       (constants.RESERVE_ACTION,
402 405
                                        address, net_uuid))
403 406

  
404 407
  @locking.ssynchronized(_config_lock, shared=1)
405
  def ReserveIp(self, net_uuid, address, ec_id):
408
  def ReserveIp(self, net_uuid, address, ec_id, check=True):
406 409
    """Reserve a given IPv4 address for use by an instance.
407 410

  
408 411
    """
409 412
    if net_uuid:
410
      return self._UnlockedReserveIp(net_uuid, address, ec_id)
413
      return self._UnlockedReserveIp(net_uuid, address, ec_id, check)
411 414

  
412 415
  @locking.ssynchronized(_config_lock, shared=1)
413 416
  def ReserveLV(self, lv_name, ec_id):

Also available in: Unified diff