mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CS-15743: disable static nat as a part of network resources cleanup
Conflicts: server/src/com/cloud/network/NetworkManagerImpl.java server/src/com/cloud/network/rules/RulesManagerImpl.java
This commit is contained in:
parent
4507df088d
commit
372568cb9a
@ -5692,6 +5692,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//release all static nats for the network
|
||||||
|
if (!_rulesMgr.applyStaticNatForNetwork(networkId, false, caller, true)) {
|
||||||
|
s_logger.warn("Failed to disable static nats as part of shutdownNetworkRules for network id " + networkId);
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
// Get all ip addresses, mark as releasing and release them on the backend
|
// Get all ip addresses, mark as releasing and release them on the backend
|
||||||
Network network = getNetwork(networkId);
|
Network network = getNetwork(networkId);
|
||||||
List<IPAddressVO> userIps = _ipAddressDao.listByAssociatedNetwork(networkId, null);
|
List<IPAddressVO> userIps = _ipAddressDao.listByAssociatedNetwork(networkId, null);
|
||||||
|
|||||||
@ -78,4 +78,13 @@ public interface RulesManager extends RulesService {
|
|||||||
|
|
||||||
boolean disableStaticNat(long ipAddressId, Account caller, long callerUserId, boolean releaseIpIfElastic) throws ResourceUnavailableException;
|
boolean disableStaticNat(long ipAddressId, Account caller, long callerUserId, boolean releaseIpIfElastic) throws ResourceUnavailableException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param networkId
|
||||||
|
* @param continueOnError
|
||||||
|
* @param caller
|
||||||
|
* @param forRevoke
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean applyStaticNatForNetwork(long networkId, boolean continueOnError, Account caller, boolean forRevoke);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1173,13 +1173,58 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean applyStaticNatForIp(long sourceIpId, boolean continueOnError, Account caller, boolean forRevoke) {
|
public boolean applyStaticNatForIp(long sourceIpId, boolean continueOnError, Account caller, boolean forRevoke) {
|
||||||
|
|
||||||
List<StaticNat> staticNats = new ArrayList<StaticNat>();
|
|
||||||
IpAddress sourceIp = _ipAddressDao.findById(sourceIpId);
|
IpAddress sourceIp = _ipAddressDao.findById(sourceIpId);
|
||||||
|
|
||||||
|
List<StaticNat> staticNats = createStaticNatForIp(sourceIp, caller, forRevoke);
|
||||||
|
|
||||||
|
if (staticNats != null && !staticNats.isEmpty()) {
|
||||||
|
try {
|
||||||
|
if (!_networkMgr.applyStaticNats(staticNats, continueOnError)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (ResourceUnavailableException ex) {
|
||||||
|
s_logger.warn("Failed to create static nat rule due to ", ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean applyStaticNatForNetwork(long networkId, boolean continueOnError, Account caller, boolean forRevoke) {
|
||||||
|
List<? extends IpAddress> staticNatIps = _ipAddressDao.listStaticNatPublicIps(networkId);
|
||||||
|
|
||||||
|
List<StaticNat> staticNats = new ArrayList<StaticNat>();
|
||||||
|
for (IpAddress staticNatIp : staticNatIps) {
|
||||||
|
staticNats.addAll(createStaticNatForIp(staticNatIp, caller, forRevoke));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (staticNats != null && !staticNats.isEmpty()) {
|
||||||
|
if (forRevoke) {
|
||||||
|
s_logger.debug("Found " + staticNats.size() + " static nats to disable for network id " + networkId);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (!_networkMgr.applyStaticNats(staticNats, continueOnError)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (ResourceUnavailableException ex) {
|
||||||
|
s_logger.warn("Failed to create static nat rule due to ", ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
s_logger.debug("Found 0 static nat rules to apply for network id " + networkId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List<StaticNat> createStaticNatForIp(IpAddress sourceIp, Account caller, boolean forRevoke) {
|
||||||
|
List<StaticNat> staticNats = new ArrayList<StaticNat>();
|
||||||
if (!sourceIp.isOneToOneNat()) {
|
if (!sourceIp.isOneToOneNat()) {
|
||||||
s_logger.debug("Source ip id=" + sourceIpId + " is not one to one nat");
|
s_logger.debug("Source ip id=" + sourceIp + " is not one to one nat");
|
||||||
return true;
|
return staticNats;
|
||||||
}
|
}
|
||||||
|
|
||||||
Long networkId = sourceIp.getAssociatedWithNetworkId();
|
Long networkId = sourceIp.getAssociatedWithNetworkId();
|
||||||
@ -1190,8 +1235,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
|
|||||||
UserVmVO vm = _vmDao.findById(sourceIp.getAssociatedWithVmId());
|
UserVmVO vm = _vmDao.findById(sourceIp.getAssociatedWithVmId());
|
||||||
Network network = _networkMgr.getNetwork(networkId);
|
Network network = _networkMgr.getNetwork(networkId);
|
||||||
if (network == null) {
|
if (network == null) {
|
||||||
CloudRuntimeException ex = new CloudRuntimeException("Unable to find an ip address to map to specified vm id");
|
CloudRuntimeException ex = new CloudRuntimeException("Unable to find an ip address to map to specified vm id");
|
||||||
ex.addProxyObject(vm, vm.getId(), "vmId");
|
ex.addProxyObject(vm, vm.getId(), "vmId");
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1209,19 +1254,10 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
|
|||||||
dstIp = _networkMgr.getIpInNetwork(sourceIp.getAssociatedWithVmId(), networkId);
|
dstIp = _networkMgr.getIpInNetwork(sourceIp.getAssociatedWithVmId(), networkId);
|
||||||
}
|
}
|
||||||
|
|
||||||
StaticNatImpl staticNat = new StaticNatImpl(sourceIp.getAllocatedToAccountId(), sourceIp.getAllocatedInDomainId(), networkId, sourceIpId, dstIp, forRevoke);
|
StaticNatImpl staticNat = new StaticNatImpl(sourceIp.getAllocatedToAccountId(), sourceIp.getAllocatedInDomainId(),
|
||||||
|
networkId, sourceIp.getId(), dstIp, forRevoke);
|
||||||
staticNats.add(staticNat);
|
staticNats.add(staticNat);
|
||||||
|
return staticNats;
|
||||||
try {
|
|
||||||
if (!_networkMgr.applyStaticNats(staticNats, continueOnError)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} catch (ResourceUnavailableException ex) {
|
|
||||||
s_logger.warn("Failed to create static nat rule due to ", ex);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user