From 4c37e111752fdf06037119cf56d34122cb15ed67 Mon Sep 17 00:00:00 2001 From: Jayapal Date: Wed, 8 Mar 2017 10:33:11 +0530 Subject: [PATCH] CLOUDSTACK-8931: Fail to deploy VM instance when use.system.public.ips=false (cherry picked from commit e1384c3b639541cad08bf11e46cfa5a8af171ee7) Signed-off-by: Rohit Yadav --- .../com/cloud/network/IpAddressManagerImpl.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/server/src/com/cloud/network/IpAddressManagerImpl.java b/server/src/com/cloud/network/IpAddressManagerImpl.java index 62a5e876de0..9c66f135d95 100644 --- a/server/src/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/com/cloud/network/IpAddressManagerImpl.java @@ -680,6 +680,7 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage boolean fetchFromDedicatedRange = false; List dedicatedVlanDbIds = new ArrayList(); List nonDedicatedVlanDbIds = new ArrayList(); + DataCenter zone = _entityMgr.findById(DataCenter.class, dcId); SearchCriteria sc = null; if (podId != null) { @@ -693,10 +694,14 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage // If owner has dedicated Public IP ranges, fetch IP from the dedicated range // Otherwise fetch IP from the system pool - List maps = _accountVlanMapDao.listAccountVlanMapsByAccount(owner.getId()); - for (AccountVlanMapVO map : maps) { - if (vlanDbIds == null || vlanDbIds.contains(map.getVlanDbId())) - dedicatedVlanDbIds.add(map.getVlanDbId()); + Network network = _networksDao.findById(guestNetworkId); + //Checking if network is null in the case of system VM's. At the time of allocation of IP address to systemVm, no network is present. + if(network == null || !(network.getGuestType() == GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced)) { + List maps = _accountVlanMapDao.listAccountVlanMapsByAccount(owner.getId()); + for (AccountVlanMapVO map : maps) { + if (vlanDbIds == null || vlanDbIds.contains(map.getVlanDbId())) + dedicatedVlanDbIds.add(map.getVlanDbId()); + } } List domainMaps = _domainVlanMapDao.listDomainVlanMapsByDomain(owner.getDomainId()); for (DomainVlanMapVO map : domainMaps) { @@ -729,8 +734,6 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage sc.setParameters("dc", dcId); - DataCenter zone = _entityMgr.findById(DataCenter.class, dcId); - // for direct network take ip addresses only from the vlans belonging to the network if (vlanUse == VlanType.DirectAttached) { sc.setJoinParameters("vlan", "networkId", guestNetworkId);