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;