Skip to content

Commit 5b8c32c

Browse files
Pearl1594Pearl Dsilva
andauthored
Fix IP conflict (#40)
Co-authored-by: Pearl Dsilva <pearl.dsilva@shapeblue.com>
1 parent 76c2127 commit 5b8c32c

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

server/src/com/cloud/network/IpAddressManagerImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import javax.inject.Inject;
3131

3232
import com.cloud.dc.DomainVlanMapVO;
33+
34+
import org.apache.cloudstack.api.ApiConstants;
3335
import org.apache.log4j.Logger;
3436

3537
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
@@ -102,6 +104,8 @@
102104
import com.cloud.network.dao.LoadBalancerDao;
103105
import com.cloud.network.dao.NetworkAccountDao;
104106
import com.cloud.network.dao.NetworkDao;
107+
import com.cloud.network.dao.NetworkDetailVO;
108+
import com.cloud.network.dao.NetworkDetailsDao;
105109
import com.cloud.network.dao.NetworkDomainDao;
106110
import com.cloud.network.dao.NetworkServiceMapDao;
107111
import com.cloud.network.dao.PhysicalNetworkDao;
@@ -289,6 +293,8 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
289293
DataCenterIpAddressDao _privateIPAddressDao;
290294
@Inject
291295
HostPodDao _hpDao;
296+
@Inject
297+
NetworkDetailsDao _networkDetailsDao;
292298

293299
SearchBuilder<IPAddressVO> AssignIpAddressSearch;
294300
SearchBuilder<IPAddressVO> AssignIpAddressFromPodVlanSearch;
@@ -766,9 +772,17 @@ public IPAddressVO doInTransaction(TransactionStatus status) throws Insufficient
766772
}
767773
sc.setJoinParameters("vlan", "type", vlanUse);
768774

775+
String routerIpAddress = null;
776+
if (network != null) {
777+
NetworkDetailVO routerIpDetail = _networkDetailsDao.findDetail(network.getId(), ApiConstants.ROUTER_IP);
778+
routerIpAddress = routerIpDetail != null ? routerIpDetail.getValue() : null;
779+
}
780+
769781
if (requestedIp != null) {
770782
sc.addAnd("address", SearchCriteria.Op.EQ, requestedIp);
771783
errorMessage.append(": requested ip " + requestedIp + " is not available");
784+
} else if (routerIpAddress != null) {
785+
sc.addAnd("address", Op.NEQ, routerIpAddress);
772786
}
773787

774788
boolean ascOrder = ! forSystemVms;

0 commit comments

Comments
 (0)