mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-7218: Remvoing all static nat associated with vm in case of secondary ips
In vm secondary ips case static nat configured to vm primary/secondary ips IP1-->vm1Ip1, IP2-->vm1Ip2 While destroying vm deleting all static nats associated with the vm
This commit is contained in:
parent
30ecf935e8
commit
384025f258
@ -52,6 +52,10 @@ public interface IPAddressDao extends GenericDao<IPAddressVO, Long> {
|
||||
|
||||
IPAddressVO findByAssociatedVmId(long vmId);
|
||||
|
||||
// for vm secondary ips case mapping is IP1--> vmIp1, IP2-->vmIp2, etc
|
||||
// This method is used when one vm is mapped to muliple to public ips
|
||||
List<IPAddressVO> findAllByAssociatedVmId(long vmId);
|
||||
|
||||
IPAddressVO findByIpAndSourceNetworkId(long networkId, String ipAddress);
|
||||
|
||||
public IPAddressVO findByIpAndDcId(long dcId, String ipAddress);
|
||||
@ -79,4 +83,5 @@ public interface IPAddressDao extends GenericDao<IPAddressVO, Long> {
|
||||
boolean deletePublicIPRange(long vlanDbId);
|
||||
|
||||
void lockRange(long vlandbId);
|
||||
|
||||
}
|
||||
|
||||
@ -263,6 +263,17 @@ public class IPAddressDaoImpl extends GenericDaoBase<IPAddressVO, Long> implemen
|
||||
return findOneBy(sc);
|
||||
}
|
||||
|
||||
|
||||
// for vm secondary ips case mapping is IP1--> vmIp1, IP2-->vmIp2, etc
|
||||
// Used when vm is mapped to muliple to public ips
|
||||
@Override
|
||||
public List<IPAddressVO> findAllByAssociatedVmId(long vmId) {
|
||||
SearchCriteria<IPAddressVO> sc = AllFieldsSearch.create();
|
||||
sc.setParameters("associatedWithVmId", vmId);
|
||||
|
||||
return listBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPAddressVO findByVmIp(String vmIp) {
|
||||
SearchCriteria<IPAddressVO> sc = AllFieldsSearch.create();
|
||||
|
||||
@ -1776,19 +1776,20 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
|
||||
// If vm is assigned to static nat, disable static nat for the ip
|
||||
// address and disassociate ip if elasticIP is enabled
|
||||
IPAddressVO ip = _ipAddressDao.findByAssociatedVmId(vmId);
|
||||
try {
|
||||
if (ip != null) {
|
||||
List<IPAddressVO> ips = _ipAddressDao.findAllByAssociatedVmId(vmId);
|
||||
|
||||
for (IPAddressVO ip : ips) {
|
||||
try {
|
||||
if (_rulesMgr.disableStaticNat(ip.getId(), _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM), User.UID_SYSTEM, true)) {
|
||||
s_logger.debug("Disabled 1-1 nat for ip address " + ip + " as a part of vm id=" + vmId + " expunge");
|
||||
} else {
|
||||
s_logger.warn("Failed to disable static nat for ip address " + ip + " as a part of vm id=" + vmId + " expunge");
|
||||
success = false;
|
||||
}
|
||||
} catch (ResourceUnavailableException e) {
|
||||
success = false;
|
||||
s_logger.warn("Failed to disable static nat for ip address " + ip + " as a part of vm id=" + vmId + " expunge because resource is unavailable", e);
|
||||
}
|
||||
} catch (ResourceUnavailableException e) {
|
||||
success = false;
|
||||
s_logger.warn("Failed to disable static nat for ip address " + ip + " as a part of vm id=" + vmId + " expunge because resource is unavailable", e);
|
||||
}
|
||||
|
||||
return success;
|
||||
@ -4340,8 +4341,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
throw new InvalidParameterValueException("Remove the load balancing rules for this VM before assigning to another user.");
|
||||
}
|
||||
// check for one on one nat
|
||||
IPAddressVO ip = _ipAddressDao.findByAssociatedVmId(cmd.getVmId());
|
||||
if (ip != null) {
|
||||
List<IPAddressVO> ips = _ipAddressDao.findAllByAssociatedVmId(cmd.getVmId());
|
||||
for (IPAddressVO ip : ips) {
|
||||
if (ip.isOneToOneNat()) {
|
||||
throw new InvalidParameterValueException("Remove the one to one nat rule for this VM for ip " + ip.toString());
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user