diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 2fa6a47156a..4ae421d3933 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1618,9 +1618,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return configs; } } - } else if (predefined != null && predefined.getCidr() != null && predefined.getBroadcastUri() == null) { + } else if (predefined != null && predefined.getCidr() != null && predefined.getBroadcastUri() == null && vpcId == null) { // don't allow to have 2 networks with the same cidr in the same zone for the account - List configs = _networksDao.listBy(owner.getId(), plan.getDataCenterId(), predefined.getCidr()); + List configs = _networksDao.listBy(owner.getId(), plan.getDataCenterId(), predefined.getCidr(), true); if (configs.size() > 0) { if (s_logger.isDebugEnabled()) { s_logger.debug("Found existing network configuration for offering " + offering + ": " + configs.get(0)); diff --git a/server/src/com/cloud/network/dao/NetworkDao.java b/server/src/com/cloud/network/dao/NetworkDao.java index c5e98812429..2fc2d9de43a 100644 --- a/server/src/com/cloud/network/dao/NetworkDao.java +++ b/server/src/com/cloud/network/dao/NetworkDao.java @@ -29,7 +29,7 @@ public interface NetworkDao extends GenericDao { List listBy(long accountId, long offeringId, long dataCenterId); - List listBy(long accountId, long dataCenterId, String cidr); + List listBy(long accountId, long dataCenterId, String cidr, boolean skipVpc); List listByZoneAndGuestType(long accountId, long dataCenterId, Network.GuestType type, Boolean isSystem); diff --git a/server/src/com/cloud/network/dao/NetworkDaoImpl.java b/server/src/com/cloud/network/dao/NetworkDaoImpl.java index 62e3d381d23..0bb42f2d103 100644 --- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java +++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java @@ -109,6 +109,7 @@ public class NetworkDaoImpl extends GenericDaoBase implements N AccountSearch.join("accounts", join, AccountSearch.entity().getId(), join.entity().getNetworkId(), JoinBuilder.JoinType.INNER); AccountSearch.and("datacenter", AccountSearch.entity().getDataCenterId(), Op.EQ); AccountSearch.and("cidr", AccountSearch.entity().getCidr(), Op.EQ); + AccountSearch.and("vpcId", AccountSearch.entity().getVpcId(), Op.EQ); AccountSearch.done(); RelatedConfigSearch = createSearchBuilder(); @@ -236,11 +237,14 @@ public class NetworkDaoImpl extends GenericDaoBase implements N } @Override - public List listBy(long accountId, long dataCenterId, String cidr) { + public List listBy(long accountId, long dataCenterId, String cidr, boolean skipVpc) { SearchCriteria sc = AccountSearch.create(); sc.setJoinParameters("accounts", "account", accountId); sc.setParameters("datacenter", dataCenterId); sc.setParameters("cidr", cidr); + if (skipVpc) { + sc.setParameters("vpcId", (Object)null); + } return listBy(sc); } diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index fe7c5304f0d..8d61fe9076b 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -589,14 +589,14 @@ public class VpcManagerImpl implements VpcManager, Manager{ } - //don't allow overlapping CIDRS for the VPCs of the same account - List vpcs = getVpcsForAccount(vpcOwner.getId()); - for (Vpc vpc : vpcs) { - if (NetUtils.isNetworksOverlap(cidr, vpc.getCidr())) { - throw new InvalidParameterValueException("Account already has vpc with cidr " + vpc.getCidr() + - " that overlaps the cidr specified: " + cidr, null); - } - } +// //don't allow overlapping CIDRS for the VPCs of the same account +// List vpcs = getVpcsForAccount(vpcOwner.getId()); +// for (Vpc vpc : vpcs) { +// if (NetUtils.isNetworksOverlap(cidr, vpc.getCidr())) { +// throw new InvalidParameterValueException("Account already has vpc with cidr " + vpc.getCidr() + +// " that overlaps the cidr specified: " + cidr, null); +// } +// } Transaction txn = Transaction.currentTxn(); txn.start();