You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ya...@apache.org on 2012/07/31 00:34:47 UTC

git commit: S2S VPN: CS-15748: Deleting customer vpn gateway when delete account

Updated Branches:
  refs/heads/vpc 5f2bbf0e2 -> d90be0d9b


S2S VPN: CS-15748: Deleting customer vpn gateway when delete account

Conflicts:

	server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/d90be0d9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/d90be0d9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/d90be0d9

Branch: refs/heads/vpc
Commit: d90be0d9bc04eb34f9fe9c9766dede62ddda7934
Parents: 5f2bbf0
Author: Sheng Yang <sh...@citrix.com>
Authored: Mon Jul 30 11:48:30 2012 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Mon Jul 30 15:34:41 2012 -0700

----------------------------------------------------------------------
 .../network/dao/Site2SiteCustomerGatewayDao.java   |    3 ++
 .../dao/Site2SiteCustomerGatewayDaoImpl.java       |    9 +++++
 .../com/cloud/network/vpn/Site2SiteVpnManager.java |    1 +
 .../cloud/network/vpn/Site2SiteVpnManagerImpl.java |   24 +++++++++++----
 server/src/com/cloud/user/AccountManagerImpl.java  |   16 +++++++++-
 5 files changed, 46 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d90be0d9/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java b/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
index 5b39dbd..7854689 100644
--- a/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
+++ b/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDao.java
@@ -1,9 +1,12 @@
 package com.cloud.network.dao;
 
+import java.util.List;
+
 import com.cloud.network.Site2SiteCustomerGatewayVO;
 import com.cloud.utils.db.GenericDao;
 
 public interface Site2SiteCustomerGatewayDao extends GenericDao<Site2SiteCustomerGatewayVO, Long> {
     Site2SiteCustomerGatewayVO findByGatewayIp(String ip);
     Site2SiteCustomerGatewayVO findByName(String name);
+    List<Site2SiteCustomerGatewayVO> listByAccountId(long accountId);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d90be0d9/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java b/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
index 80b5c02..c3a4d94 100644
--- a/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
+++ b/server/src/com/cloud/network/dao/Site2SiteCustomerGatewayDaoImpl.java
@@ -1,5 +1,7 @@
 package com.cloud.network.dao;
 
+import java.util.List;
+
 import javax.ejb.Local;
 
 import org.apache.log4j.Logger;
@@ -19,6 +21,7 @@ public class Site2SiteCustomerGatewayDaoImpl extends GenericDaoBase<Site2SiteCus
         AllFieldsSearch = createSearchBuilder();
         AllFieldsSearch.and("gatewayIp", AllFieldsSearch.entity().getGatewayIp(), SearchCriteria.Op.EQ);
         AllFieldsSearch.and("name", AllFieldsSearch.entity().getName(), SearchCriteria.Op.EQ);
+        AllFieldsSearch.and("accountId", AllFieldsSearch.entity().getAccountId(), SearchCriteria.Op.EQ);
         AllFieldsSearch.done();
     }
     
@@ -36,4 +39,10 @@ public class Site2SiteCustomerGatewayDaoImpl extends GenericDaoBase<Site2SiteCus
         return findOneBy(sc);
     }
 
+    @Override
+    public List<Site2SiteCustomerGatewayVO> listByAccountId(long accountId) {
+        SearchCriteria<Site2SiteCustomerGatewayVO> sc = AllFieldsSearch.create();
+        sc.setParameters("accountId", accountId);
+        return listBy(sc, null);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d90be0d9/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java
index 567b765..922ac2c 100644
--- a/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java
+++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManager.java
@@ -10,4 +10,5 @@ public interface Site2SiteVpnManager extends Site2SiteVpnService {
     boolean cleanupVpnGatewayByVpc(long vpcId);
     void markDisconnectVpnConnByVpc(long vpcId);
     List<Site2SiteVpnConnectionVO> getConnectionsForRouter(DomainRouterVO router);
+    boolean deleteCustomerGatewayByAccount(long accountId);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d90be0d9/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
index b723d16..3b6e533 100644
--- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
@@ -50,7 +50,6 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.UserContext;
 import com.cloud.user.dao.AccountDao;
-import com.cloud.utils.IdentityProxy;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.Inject;
 import com.cloud.utils.component.Manager;
@@ -207,10 +206,8 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager {
                     + vpnGatewayId + " already existed!");
         }
         if (_vpnConnectionDao.findByCustomerGatewayId(customerGatewayId) != null) {
-            List<IdentityProxy> idList = new ArrayList<IdentityProxy>();
-//            idList.add(new IdentityProxy(customerGateway, customerGatewayId, "customerGatewayId"));
-//            throw new InvalidParameterValueException("The vpn connection with specified customer gateway id " +
-//                    " already exists!", idList);
+            throw new InvalidParameterValueException("The vpn connection with specified customer gateway id " + customerGatewayId +
+                    " already exists!");
         }
         Site2SiteVpnConnectionVO conn = new Site2SiteVpnConnectionVO(owner.getAccountId(), owner.getDomainId(), vpnGatewayId, customerGatewayId);
         conn.setState(State.Pending);
@@ -263,9 +260,14 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager {
         }
         _accountMgr.checkAccess(caller, null, false, customerGateway);
         
+        return doDeleteCustomerGateway(customerGateway);
+    }
+
+    protected boolean doDeleteCustomerGateway(Site2SiteCustomerGateway gw) {
+        long id = gw.getId();
         List<Site2SiteVpnConnectionVO> vpnConnections = _vpnConnectionDao.listByCustomerGatewayId(id);
         if (vpnConnections != null && vpnConnections.size() != 0) {
-            throw new InvalidParameterValueException("Unable to delete VPN customer gateway " + id + " because there is still related VPN connections!");
+            throw new InvalidParameterValueException("Unable to delete VPN customer gateway with id " + id + " because there is still related VPN connections!");
         }
         _customerGatewayDao.remove(id);
         return true;
@@ -596,4 +598,14 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager {
         conns.addAll(_vpnConnectionDao.listByVpcId(vpcId));
         return conns;
     }
+
+    @Override
+    public boolean deleteCustomerGatewayByAccount(long accountId) {
+        boolean result = true;;
+        List<Site2SiteCustomerGatewayVO> gws = _customerGatewayDao.listByAccountId(accountId);
+        for (Site2SiteCustomerGatewayVO gw : gws) {
+            result = result & doDeleteCustomerGateway(gw);
+        }
+        return result;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d90be0d9/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java
index 503c45a..38153f3 100755
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@ -74,16 +74,22 @@ import com.cloud.network.IpAddress;
 import com.cloud.network.NetworkManager;
 import com.cloud.network.NetworkVO;
 import com.cloud.network.RemoteAccessVpnVO;
+import com.cloud.network.Site2SiteCustomerGatewayVO;
+import com.cloud.network.Site2SiteVpnConnectionVO;
 import com.cloud.network.VpnUserVO;
 import com.cloud.network.dao.IPAddressDao;
 import com.cloud.network.dao.NetworkDao;
 import com.cloud.network.dao.RemoteAccessVpnDao;
+import com.cloud.network.dao.Site2SiteCustomerGatewayDao;
+import com.cloud.network.dao.Site2SiteVpnConnectionDao;
+import com.cloud.network.dao.Site2SiteVpnGatewayDao;
 import com.cloud.network.dao.VpnUserDao;
 import com.cloud.network.security.SecurityGroupManager;
 import com.cloud.network.security.dao.SecurityGroupDao;
 import com.cloud.network.vpc.Vpc;
 import com.cloud.network.vpc.VpcManager;
 import com.cloud.network.vpn.RemoteAccessVpnService;
+import com.cloud.network.vpn.Site2SiteVpnManager;
 import com.cloud.projects.Project;
 import com.cloud.projects.Project.ListProjectResourcesCriteria;
 import com.cloud.projects.ProjectInvitationVO;
@@ -211,6 +217,8 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
     private VpcManager _vpcMgr;
     @Inject
     private DomainRouterDao _routerDao;
+    @Inject
+    Site2SiteVpnManager _vpnMgr;
 
     private Adapters<UserAuthenticator> _userAuthenticators;
 
@@ -562,7 +570,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
                 s_logger.warn("Failed to cleanup remote access vpn resources as a part of account id=" + accountId + " cleanup due to Exception: ", ex);
                 accountCleanupNeeded = true;
             }
-
+            
             // Cleanup security groups
             int numRemoved = _securityGroupDao.removeByAccountId(accountId);
             s_logger.info("deleteAccount: Deleted " + numRemoved + " network groups for account " + accountId);
@@ -613,6 +621,12 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
                 }
             }
 
+            // Delete Site 2 Site VPN customer gateway
+            s_logger.debug("Deleting site-to-site VPN customer gateways for account " + accountId);
+            if (!_vpnMgr.deleteCustomerGatewayByAccount(accountId)) {
+                s_logger.warn("Fail to delete site-to-site VPN customer gateways for account " + accountId);
+            }
+
             // delete account specific Virtual vlans (belong to system Public Network) - only when networks are cleaned
             // up successfully
             if (networksDeleted) {