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/23 23:57:40 UTC

[10/13] git commit: CS-15456: Prohibit creating more than one VPN gateway of VPC

CS-15456: Prohibit creating more than one VPN gateway of VPC


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

Branch: refs/heads/vpc
Commit: 0dec6ea804e7a4d81512c8518d8da9b35d0f444e
Parents: d855dff
Author: Sheng Yang <sh...@citrix.com>
Authored: Thu Jul 5 15:43:46 2012 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Mon Jul 23 14:35:52 2012 -0700

----------------------------------------------------------------------
 .../cloud/network/dao/Site2SiteVpnGatewayDao.java  |    1 +
 .../network/dao/Site2SiteVpnGatewayDaoImpl.java    |   21 +++++++++++++++
 .../cloud/network/vpn/Site2SiteVpnManagerImpl.java |    5 +++
 3 files changed, 27 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0dec6ea8/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDao.java b/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDao.java
index e9dcbbf..c1d075e 100644
--- a/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDao.java
+++ b/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDao.java
@@ -7,4 +7,5 @@ import com.cloud.utils.db.GenericDao;
 
 public interface Site2SiteVpnGatewayDao extends GenericDao<Site2SiteVpnGatewayVO, Long> {
     Site2SiteVpnGatewayVO findByIpAddrId(long id);
+    List<Site2SiteVpnGatewayVO> listByVpcId(long vpcId);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0dec6ea8/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java b/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
index feab33a..4963d82 100644
--- a/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
+++ b/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
@@ -6,21 +6,35 @@ import javax.ejb.Local;
 
 import org.apache.log4j.Logger;
 
+import com.cloud.network.IPAddressVO;
 import com.cloud.network.Site2SiteVpnGatewayVO;
+import com.cloud.utils.component.ComponentLocator;
+import com.cloud.utils.component.Inject;
 import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.JoinBuilder.JoinType;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
 
 @Local(value={Site2SiteVpnGatewayDao.class})
 public class Site2SiteVpnGatewayDaoImpl extends GenericDaoBase<Site2SiteVpnGatewayVO, Long> implements Site2SiteVpnGatewayDao {
+    protected final IPAddressDaoImpl _addrDao = ComponentLocator.inject(IPAddressDaoImpl.class);
+    
     private static final Logger s_logger = Logger.getLogger(Site2SiteVpnGatewayDaoImpl.class);
     
     private final SearchBuilder<Site2SiteVpnGatewayVO> AllFieldsSearch;
+    private final SearchBuilder<Site2SiteVpnGatewayVO> VpcSearch;
+    private final SearchBuilder<IPAddressVO> AddrSearch;
 
     protected Site2SiteVpnGatewayDaoImpl() {
         AllFieldsSearch = createSearchBuilder();
         AllFieldsSearch.and("addrId", AllFieldsSearch.entity().getAddrId(), SearchCriteria.Op.EQ);
         AllFieldsSearch.done();
+        
+        VpcSearch = createSearchBuilder();
+        AddrSearch = _addrDao.createSearchBuilder();
+        AddrSearch.and("vpcId", AddrSearch.entity().getVpcId(), SearchCriteria.Op.EQ);
+        VpcSearch.join("addrSearch", AddrSearch, AddrSearch.entity().getId(), VpcSearch.entity().getAddrId(), JoinType.INNER);
+        VpcSearch.done();
     }
     
     @Override
@@ -29,4 +43,11 @@ public class Site2SiteVpnGatewayDaoImpl extends GenericDaoBase<Site2SiteVpnGatew
         sc.setParameters("addrId", id);
         return findOneBy(sc);
     }
+
+    @Override
+    public List<Site2SiteVpnGatewayVO> listByVpcId(long vpcId) {
+        SearchCriteria<Site2SiteVpnGatewayVO> sc = VpcSearch.create();
+        sc.setJoinParameters("addrSearch", "vpcId", vpcId);
+        return listBy(sc);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0dec6ea8/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 cbae645..ac017d3 100644
--- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java
@@ -80,12 +80,17 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnService, Manager {
     public Site2SiteVpnGateway createVpnGateway(CreateVpnGatewayCmd cmd) {
         Long ipId = cmd.getPublicIpId();
 	    IpAddress ip = _networkMgr.getIp(ipId);
+	    Long vpcId = ip.getVpcId();
 	    if (ip.getVpcId() == null) {
             throw new InvalidParameterValueException("The VPN gateway cannot create with ip not belong to VPC");
 	    }
         if (_vpnGatewayDao.findByIpAddrId(ipId) != null) {
             throw new InvalidParameterValueException("The VPN gateway with ip ID " + ipId + " already existed!");
         }
+        List<Site2SiteVpnGatewayVO> gws = _vpnGatewayDao.listByVpcId(vpcId);
+        if (gws != null && gws.size() != 0) {
+            throw new InvalidParameterValueException("The VPN gateway of VPC " + vpcId + " already existed!");
+        }
         Site2SiteVpnGatewayVO gw = new Site2SiteVpnGatewayVO(ipId);
         _vpnGatewayDao.persist(gw);
         return gw;