mirror of https://github.com/apache/cloudstack.git
CS-15574: Delete VPN gateway and connection when deleting VPC
This commit is contained in:
parent
14c3ef17ad
commit
d2643c0fdf
|
|
@ -59,6 +59,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;
|
||||
|
|
@ -68,6 +69,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;
|
||||
|
|
@ -145,7 +147,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
|||
@Inject
|
||||
ResourceTagDao _resourceTagDao;
|
||||
@Inject
|
||||
Site2SiteVpnGatewayDao _vpnGatewayDao;
|
||||
Site2SiteVpnManager _s2sVpnMgr;
|
||||
|
||||
private final ScheduledExecutorService _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("VpcChecker"));
|
||||
|
||||
|
|
@ -1047,7 +1049,13 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
|||
s_logger.debug("Cleaning up resources for vpc id=" + vpcId);
|
||||
boolean success = true;
|
||||
|
||||
//1) release all ip addresses
|
||||
//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);
|
||||
|
||||
//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) {
|
||||
|
|
@ -1064,13 +1072,13 @@ public class VpcManagerImpl implements VpcManager, Manager{
|
|||
//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…
Reference in New Issue