mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-2604 Fixed deleting secondary ip when no PF rules set
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
This commit is contained in:
parent
673b293d75
commit
c1ad3b7974
|
|
@ -272,4 +272,6 @@ public interface NetworkModel {
|
|||
Map<Detail, String> getNtwkOffDetails(long offId);
|
||||
|
||||
Networks.IsolationType[] listNetworkIsolationMethods();
|
||||
|
||||
Nic getNicInNetworkIncludingRemoved(long vmId, long networkId);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -887,4 +887,9 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue