diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 16ef4cc7864..efbf2410269 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -2060,15 +2060,29 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } - protected ArrayList getPublicIpsToApply(VirtualRouter router, Provider provider, Long guestNetworkId) { + protected ArrayList getPublicIpsToApply(VirtualRouter router, Provider provider, + Long guestNetworkId, com.cloud.network.IpAddress.State... skipInStates) { long ownerId = router.getAccountId(); final List userIps = _networkMgr.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); List allPublicIps = new ArrayList(); if (userIps != null && !userIps.isEmpty()) { + boolean addIp = true; for (IPAddressVO userIp : userIps) { + if (skipInStates != null) { + for (IpAddress.State stateToSkip : skipInStates) { + if (userIp.getState() == stateToSkip) { + s_logger.debug("Skipping ip address " + userIp + " in state " + userIp.getState()); + addIp = false; + break; + } + } + } + + if (addIp) { PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); - allPublicIps.add(publicIp); + allPublicIps.add(publicIp); + } } } diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 887f284d066..2e7bd251a58 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -18,6 +18,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import javax.ejb.Local; @@ -1030,13 +1031,12 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian protected void finalizeIpAssocForNetwork(Commands cmds, VirtualRouter router, Provider provider, Long guestNetworkId) { - ArrayList publicIps = getPublicIpsToApply(router, provider, guestNetworkId); + ArrayList publicIps = getPublicIpsToApply(router, provider, guestNetworkId, IpAddress.State.Releasing); if (publicIps != null && !publicIps.isEmpty()) { s_logger.debug("Found " + publicIps.size() + " ip(s) to apply as a part of domR " + router + " start."); // Re-apply public ip addresses - should come before PF/LB/VPN createVpcAssociatePublicIPCommands(router, publicIps, cmds); - } } @@ -1209,4 +1209,5 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian privateNic.setMacAddress(ip.getMacAddress()); return privateNic; } + }