diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index eb176f7f49f..45f335fbbd8 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -170,7 +170,6 @@ import com.cloud.user.User; import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserStatisticsDao; -import com.cloud.uservm.UserVm; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.component.Adapters; @@ -1929,15 +1928,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (_accountVlanMapDao.findAccountVlanMap(ipVO.getAllocatedToAccountId(), ipVO.getVlanId()) != null) { throw new InvalidParameterValueException("Ip address id=" + ipAddressId + " belongs to Account wide IP pool and cannot be disassociated"); } + + //don't allow releasing elastic ip address + if (ipVO.getElastic()) { + throw new InvalidParameterValueException("Can't release elastic IP address " + ipVO); + } boolean success = releasePublicIpAddress(ipAddressId, userId, caller); if (success) { - Long vmId = ipVO.getAssociatedWithVmId(); - UserVm vm = null; - if (vmId != null) { - vm = _userVmDao.findById(vmId); - return _rulesMgr.enableElasticIpAndStaticNatForVm(vm, true); - } return true; } else { s_logger.warn("Failed to release public ip address id=" + ipAddressId); diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 3e28d229e18..ef1173c8b19 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -1022,22 +1022,13 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { Account caller = ctx.getCaller(); IPAddressVO ipAddress = _ipAddressDao.findById(ipId); checkIpAndUserVm(ipAddress, null, caller); - - Long vmId = ipAddress.getAssociatedWithVmId(); + + if (ipAddress.getElastic()) { + throw new InvalidParameterValueException("Can't release elastic IP address " + ipAddress); + } - boolean success = disableStaticNat(ipId, caller, ctx.getCallerUserId(), false); - if (success && vmId != null) { - s_logger.debug("Allocating ip and enabling static nat for vm id=" + vmId + " as a part of disassociateIp command"); - UserVm vm = _vmDao.findById(vmId); - success = enableElasticIpAndStaticNatForVm(vm, true); - if (!success) { - s_logger.warn("Failed to allocate ip and enable static nat for vm id=" + vmId + " as a part of disassociateIp command"); - } else { - s_logger.debug("Successfully allocated ip and enabled static nat for vm id=" + vmId + " as a part of disassociateIp command"); - } - } + return disableStaticNat(ipId, caller, ctx.getCallerUserId(), false); - return success; } @Override @DB