CLOUDSTACK-2604 Fixed deleting secondary ip when no PF rules set Signed-off-by: Abhinandan Prateek <aprat...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c1ad3b79 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c1ad3b79 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c1ad3b79 Branch: refs/heads/disk_io_throttling Commit: c1ad3b7974449f457a1cc4e50fe7af260d1c5bf6 Parents: 673b293 Author: Jayapal <jayapalreddy.ur...@citrix.com> Authored: Thu May 23 16:10:44 2013 +0530 Committer: Abhinandan Prateek <aprat...@apache.org> Committed: Mon Jun 10 12:13:08 2013 +0530 ---------------------------------------------------------------------- api/src/com/cloud/network/NetworkModel.java | 2 ++ .../network/rules/dao/PortForwardingRulesDao.java | 2 +- .../network/rules/dao/PortForwardingRulesDaoImpl.java | 9 ++++++++- server/src/com/cloud/network/NetworkModelImpl.java | 5 +++-- server/src/com/cloud/network/NetworkServiceImpl.java | 13 +++++++++---- .../src/com/cloud/network/rules/RulesManagerImpl.java | 2 +- .../test/com/cloud/network/MockNetworkModelImpl.java | 5 +++++ server/test/com/cloud/vpc/MockNetworkModelImpl.java | 5 +++++ 8 files changed, 34 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1ad3b79/api/src/com/cloud/network/NetworkModel.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index f84a8b0..05307eb 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -272,4 +272,6 @@ public interface NetworkModel { Map<Detail, String> getNtwkOffDetails(long offId); Networks.IsolationType[] listNetworkIsolationMethods(); + + Nic getNicInNetworkIncludingRemoved(long vmId, long networkId); } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1ad3b79/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java b/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java index 682a941..9a1d321 100644 --- a/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java +++ b/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDao.java @@ -43,5 +43,5 @@ public interface PortForwardingRulesDao extends GenericDao<PortForwardingRuleVO, List<PortForwardingRuleVO> listByAccount(long accountId); List<PortForwardingRuleVO> listByDestIpAddr(String ip4Address); - + PortForwardingRuleVO findByIdAndIp(long id, String secondaryIp); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1ad3b79/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java b/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java index cc780cb..c0db780 100644 --- a/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java +++ b/engine/schema/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java @@ -158,5 +158,12 @@ public class PortForwardingRulesDaoImpl extends GenericDaoBase<PortForwardingRul sc.setParameters("dstIp", ip4Address); return listBy(sc); } - + + @Override + public PortForwardingRuleVO findByIdAndIp(long id, String secondaryIp) { + SearchCriteria<PortForwardingRuleVO> sc = AllFieldsSearch.create(); + sc.setParameters("id", id); + sc.setParameters("dstIp", secondaryIp); + return findOneBy(sc); + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1ad3b79/server/src/com/cloud/network/NetworkModelImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index 21917f7..fa34d65 100755 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -770,7 +770,7 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { @Override public Nic getNicInNetwork(long vmId, long networkId) { - return _nicDao.findByInstanceIdAndNetworkIdIncludingRemoved(networkId, vmId); + return _nicDao.findByNtwkIdAndInstanceId(networkId, vmId); } @Override @@ -1761,7 +1761,8 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { return true; } - Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { + @Override + public Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { return _nicDao.findByInstanceIdAndNetworkIdIncludingRemoved(networkId, vmId); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1ad3b79/server/src/com/cloud/network/NetworkServiceImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index c7be2c6..d5a59d6 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -789,10 +789,15 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { if (dc.getNetworkType() == NetworkType.Advanced && network.getGuestType() == Network.GuestType.Isolated) { //check PF or static NAT is configured on this ip address String secondaryIp = secIpVO.getIp4Address(); - List<PortForwardingRuleVO> pfRuleList = _portForwardingDao.listByDestIpAddr(secondaryIp); - if (pfRuleList.size() != 0) { - s_logger.debug("VM nic IP " + secondaryIp + " is associated with the port forwarding rule"); - throw new InvalidParameterValueException("Can't remove the secondary ip " + secondaryIp + " is associate with the port forwarding rule"); + List<FirewallRuleVO> fwRulesList = _firewallDao.listByNetworkAndPurpose(network.getId(), Purpose.PortForwarding); + + if (fwRulesList.size() != 0) { + for (FirewallRuleVO rule: fwRulesList) { + if (_portForwardingDao.findByIdAndIp(rule.getId(), secondaryIp) != null) { + s_logger.debug("VM nic IP " + secondaryIp + " is associated with the port forwarding rule"); + throw new InvalidParameterValueException("Can't remove the secondary ip " + secondaryIp + " is associate with the port forwarding rule"); + } + } } //check if the secondary ip associated with any static nat rule IPAddressVO publicIpVO = _ipAddressDao.findByVmIp(secondaryIp); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1ad3b79/server/src/com/cloud/network/rules/RulesManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 41bf2b3..bcda32d 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -1371,7 +1371,7 @@ public class RulesManagerImpl extends ManagerBase implements RulesManager, Rules // create new static nat rule // Get nic IP4 address - Nic guestNic = _networkModel.getNicInNetwork(vm.getId(), networkId); + Nic guestNic = _networkModel.getNicInNetworkIncludingRemoved(vm.getId(), networkId); if (guestNic == null) { throw new InvalidParameterValueException("Vm doesn't belong to the network with specified id"); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1ad3b79/server/test/com/cloud/network/MockNetworkModelImpl.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index c3a0d6c..3a36748 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -874,4 +874,9 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { // TODO Auto-generated method stub return null; } + + @Override + public Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { + return null; + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c1ad3b79/server/test/com/cloud/vpc/MockNetworkModelImpl.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vpc/MockNetworkModelImpl.java b/server/test/com/cloud/vpc/MockNetworkModelImpl.java index d9e33b7..3e67f5e 100644 --- a/server/test/com/cloud/vpc/MockNetworkModelImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkModelImpl.java @@ -887,4 +887,9 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { return null; } + @Override + public Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { + return null; + } + }