mirror of https://github.com/apache/cloudstack.git
CS-15456: Prohibit creating more than one VPN gateway of VPC
This commit is contained in:
parent
21cdd08948
commit
a0a5e25e32
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue