From 4dcc5671d17bd96feacda0c1999bf1e9a64f530e Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 6 Jan 2014 17:22:17 -0800 Subject: [PATCH] CLOUDSTACK-5812: pass podId information when request for secondary ip address in Basic zone guest network --- .../src/com/cloud/network/IpAddressManager.java | 2 +- .../com/cloud/network/IpAddressManagerImpl.java | 4 ++-- .../src/com/cloud/network/NetworkServiceImpl.java | 14 +++++++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/engine/components-api/src/com/cloud/network/IpAddressManager.java b/engine/components-api/src/com/cloud/network/IpAddressManager.java index dc72ab5b00d..9ccc9466f70 100644 --- a/engine/components-api/src/com/cloud/network/IpAddressManager.java +++ b/engine/components-api/src/com/cloud/network/IpAddressManager.java @@ -170,6 +170,6 @@ public interface IpAddressManager { public String allocateGuestIP(Network network, String requestedIp) throws InsufficientAddressCapacityException; - String allocatePublicIpForGuestNic(Network network, Account ipOwner, String requestedIp) throws InsufficientAddressCapacityException; + String allocatePublicIpForGuestNic(Network network, Long podId, Account ipOwner, String requestedIp) throws InsufficientAddressCapacityException; } diff --git a/server/src/com/cloud/network/IpAddressManagerImpl.java b/server/src/com/cloud/network/IpAddressManagerImpl.java index 59101964c25..6596074ad34 100644 --- a/server/src/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/com/cloud/network/IpAddressManagerImpl.java @@ -1888,8 +1888,8 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage } @Override - public String allocatePublicIpForGuestNic(Network network, Account owner, String requestedIp) throws InsufficientAddressCapacityException { - PublicIp ip = assignPublicIpAddress(network.getDataCenterId(), null, owner, VlanType.DirectAttached, network.getId(), requestedIp, false); + public String allocatePublicIpForGuestNic(Network network, Long podId, Account owner, String requestedIp) throws InsufficientAddressCapacityException { + PublicIp ip = assignPublicIpAddress(network.getDataCenterId(), podId, owner, VlanType.DirectAttached, network.getId(), requestedIp, false); if (ip == null) { s_logger.debug("There is no free public ip address"); return null; diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index aeb058c5e80..fb6f3fd451a 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -679,8 +679,20 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { throw new InvalidParameterValueException("Allocating guest ip for nic failed"); } } else if (network.getGuestType() == Network.GuestType.Shared) { + //for basic zone, need to provide the podId to ensure proper ip alloation + Long podId = null; + DataCenter dc = _dcDao.findById(network.getDataCenterId()); + + if (dc.getNetworkType() == NetworkType.Basic) { + VMInstanceVO vmi = (VMInstanceVO)vm; + podId = vmi.getPodIdToDeployIn(); + if (podId == null) { + throw new InvalidParameterValueException("vm pod id is null in Basic zone; can't decide the range for ip allocation"); + } + } + try { - ipaddr = _ipAddrMgr.allocatePublicIpForGuestNic(network, ipOwner, requestedIp); + ipaddr = _ipAddrMgr.allocatePublicIpForGuestNic(network, podId, ipOwner, requestedIp); if (ipaddr == null) { throw new InvalidParameterValueException("Allocating ip to guest nic " + nicId + " failed"); }