CS-15574: Delete VPN gateway and connection when deleting VPC

Conflicts:

	server/src/com/cloud/network/vpc/VpcManagerImpl.java
This commit is contained in:
Sheng Yang 2012-07-17 18:05:31 -07:00
parent 7d68e33323
commit c357134330
3 changed files with 49 additions and 10 deletions

View File

@ -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");

View File

@ -0,0 +1,6 @@
package com.cloud.network.vpn;
public interface Site2SiteVpnManager extends Site2SiteVpnService {
boolean cleanupVpnConnectionByVpc(long vpcId);
boolean cleanupVpnGatewayByVpc(long vpcId);
}

View File

@ -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;
}
}