mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CS-15574: Delete VPN gateway and connection when deleting VPC
Conflicts: server/src/com/cloud/network/vpc/VpcManagerImpl.java
This commit is contained in:
parent
7d68e33323
commit
c357134330
@ -64,6 +64,7 @@ import com.cloud.network.addr.PublicIp;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.dao.PhysicalNetworkDao;
|
||||
import com.cloud.network.dao.Site2SiteVpnConnectionDao;
|
||||
import com.cloud.network.dao.Site2SiteVpnGatewayDao;
|
||||
import com.cloud.network.element.VpcProvider;
|
||||
import com.cloud.network.vpc.VpcOffering.State;
|
||||
@ -73,6 +74,7 @@ import com.cloud.network.vpc.Dao.VpcDao;
|
||||
import com.cloud.network.vpc.Dao.VpcGatewayDao;
|
||||
import com.cloud.network.vpc.Dao.VpcOfferingDao;
|
||||
import com.cloud.network.vpc.Dao.VpcOfferingServiceMapDao;
|
||||
import com.cloud.network.vpn.Site2SiteVpnManager;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offerings.NetworkOfferingServiceMapVO;
|
||||
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
||||
@ -146,6 +148,8 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
||||
FirewallRulesDao _firewallDao;
|
||||
@Inject
|
||||
Site2SiteVpnGatewayDao _vpnGatewayDao;
|
||||
@Inject
|
||||
Site2SiteVpnManager _s2sVpnMgr;
|
||||
|
||||
private final ScheduledExecutorService _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("VpcChecker"));
|
||||
|
||||
@ -1003,8 +1007,14 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
||||
throws ResourceUnavailableException, ConcurrentOperationException {
|
||||
s_logger.debug("Cleaning up resources for vpc id=" + vpcId);
|
||||
boolean success = true;
|
||||
|
||||
//1) Remove VPN connections and VPN gateway
|
||||
s_logger.debug("Cleaning up existed site to site VPN connections");
|
||||
_s2sVpnMgr.cleanupVpnConnectionByVpc(vpcId);
|
||||
s_logger.debug("Cleaning up existed site to site VPN gateways");
|
||||
_s2sVpnMgr.cleanupVpnGatewayByVpc(vpcId);
|
||||
|
||||
//1) release all ip addresses
|
||||
//2) release all ip addresses
|
||||
List<IPAddressVO> ipsToRelease = _ipAddressDao.listByAssociatedVpc(vpcId, null);
|
||||
s_logger.debug("Releasing ips for vpc id=" + vpcId + " as a part of vpc cleanup");
|
||||
for (IPAddressVO ipToRelease : ipsToRelease) {
|
||||
@ -1020,14 +1030,14 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
||||
s_logger.warn("Failed to release ip addresses for vpc id=" + vpcId + " as a part of cleanup vpc process");
|
||||
//although it failed, proceed to the next cleanup step as it doesn't depend on the public ip release
|
||||
}
|
||||
|
||||
//2) Delete all static route rules
|
||||
|
||||
//3) Delete all static route rules
|
||||
if (!revokeStaticRoutesForVpc(vpcId, caller)) {
|
||||
s_logger.warn("Failed to revoke static routes for vpc " + vpcId + " as a part of cleanup vpc process");
|
||||
return false;
|
||||
}
|
||||
|
||||
//3) Delete private gateway
|
||||
|
||||
//4) Delete private gateway
|
||||
VpcGateway gateway = getPrivateGatewayForVpc(vpcId);
|
||||
if (gateway != null) {
|
||||
s_logger.debug("Deleting private gateway " + gateway + " as a part of vpc " + vpcId + " resources cleanup");
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
package com.cloud.network.vpn;
|
||||
|
||||
public interface Site2SiteVpnManager extends Site2SiteVpnService {
|
||||
boolean cleanupVpnConnectionByVpc(long vpcId);
|
||||
boolean cleanupVpnGatewayByVpc(long vpcId);
|
||||
}
|
||||
@ -48,8 +48,8 @@ import com.cloud.utils.component.Manager;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.net.NetUtils;
|
||||
|
||||
@Local(value = Site2SiteVpnService.class)
|
||||
public class Site2SiteVpnManagerImpl implements Site2SiteVpnService, Manager {
|
||||
@Local(value = Site2SiteVpnManager.class)
|
||||
public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager {
|
||||
private static final Logger s_logger = Logger.getLogger(Site2SiteVpnManagerImpl.class);
|
||||
|
||||
@Inject Site2SiteCustomerGatewayDao _customerGatewayDao;
|
||||
@ -226,9 +226,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnService, Manager {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteVpnGateway(DeleteVpnGatewayCmd cmd) {
|
||||
Long id = cmd.getId();
|
||||
protected void doDeleteVpnGateway(long id) {
|
||||
Site2SiteVpnGateway vpnGateway = _vpnGatewayDao.findById(id);
|
||||
if (vpnGateway == null) {
|
||||
throw new InvalidParameterValueException("Fail to find vpn gateway with " + id + " !");
|
||||
@ -238,6 +236,12 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnService, Manager {
|
||||
throw new InvalidParameterValueException("Unable to delete VPN gateway " + id + " because there is still related VPN connections!");
|
||||
}
|
||||
_vpnGatewayDao.remove(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteVpnGateway(DeleteVpnGatewayCmd cmd) {
|
||||
Long id = cmd.getId();
|
||||
doDeleteVpnGateway(id);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -386,4 +390,23 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnService, Manager {
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cleanupVpnConnectionByVpc(long vpcId) {
|
||||
List<Site2SiteVpnConnectionVO> conns = _vpnConnectionDao.listByVpcId(vpcId);
|
||||
for (Site2SiteVpnConnection conn : conns) {
|
||||
_vpnConnectionDao.remove(conn.getId());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cleanupVpnGatewayByVpc(long vpcId) {
|
||||
Site2SiteVpnGatewayVO gw = _vpnGatewayDao.findByVpcId(vpcId);
|
||||
if (gw == null) {
|
||||
return true;
|
||||
}
|
||||
doDeleteVpnGateway(gw.getId());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user