mirror of https://github.com/apache/cloudstack.git
CS-15743: disable static nat as a part of network resources cleanup
This commit is contained in:
parent
bd63d4b4bb
commit
d467ff8a49
|
|
@ -6186,6 +6186,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
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
|
||||
Network network = getNetwork(networkId);
|
||||
|
|
|
|||
|
|
@ -74,4 +74,13 @@ public interface RulesManager extends RulesService {
|
|||
|
||||
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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1293,13 +1293,58 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
|
|||
|
||||
@Override
|
||||
public boolean applyStaticNatForIp(long sourceIpId, boolean continueOnError, Account caller, boolean forRevoke) {
|
||||
|
||||
List<StaticNat> staticNats = new ArrayList<StaticNat>();
|
||||
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()) {
|
||||
s_logger.debug("Source ip id=" + sourceIpId + " is not one to one nat");
|
||||
return true;
|
||||
s_logger.debug("Source ip id=" + sourceIp + " is not one to one nat");
|
||||
return staticNats;
|
||||
}
|
||||
|
||||
Long networkId = sourceIp.getAssociatedWithNetworkId();
|
||||
|
|
@ -1330,19 +1375,9 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
|
|||
}
|
||||
|
||||
StaticNatImpl staticNat = new StaticNatImpl(sourceIp.getAllocatedToAccountId(), sourceIp.getAllocatedInDomainId(),
|
||||
networkId, sourceIpId, dstIp, forRevoke);
|
||||
networkId, sourceIp.getId(), dstIp, forRevoke);
|
||||
staticNats.add(staticNat);
|
||||
|
||||
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;
|
||||
return staticNats;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Reference in New Issue