From df6ce24f43572418ea8dccdc924ea22e232c0906 Mon Sep 17 00:00:00 2001 From: Anthony Xu Date: Wed, 21 May 2014 14:33:52 -0700 Subject: [PATCH] if networkID is not specified, get one network with free ips. --- api/src/com/cloud/network/NetworkModel.java | 4 ++- .../com/cloud/network/NetworkModelImpl.java | 25 +++++++++++++++++++ .../src/com/cloud/vm/UserVmManagerImpl.java | 2 +- .../cloud/network/MockNetworkModelImpl.java | 9 +++++++ .../com/cloud/vpc/MockNetworkModelImpl.java | 9 +++++++ 5 files changed, 47 insertions(+), 2 deletions(-) diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index f48bc9a7e5a..468feb384c2 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -92,6 +92,8 @@ public interface NetworkModel { boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services); + Network getNetworkWithSGWithFreeIPs(Long zoneId); + Network getNetworkWithSecurityGroupEnabled(Long zoneId); String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId); @@ -277,4 +279,4 @@ public interface NetworkModel { boolean getNetworkEgressDefaultPolicy(Long networkId); void checkNetworkPermissions(Account owner, Network network, AccessType accessType); -} \ No newline at end of file +} diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index 918ebf808d5..3aa797b0fcb 100755 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -740,6 +740,31 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { return networks.get(0); } + @Override + public NetworkVO getNetworkWithSGWithFreeIPs(Long zoneId) { + List networks = _networksDao.listByZoneSecurityGroup(zoneId); + if (networks == null || networks.isEmpty()) { + return null; + } + NetworkVO ret_network = null; + for (NetworkVO nw : networks) { + List vlans = _vlanDao.listVlansByNetworkId(nw.getId()); + for (VlanVO vlan : vlans) { + if (_ipAddressDao.countFreeIpsInVlan(vlan.getId()) > 0) { + ret_network = nw; + break; + } + } + if (ret_network != null) { + break; + } + } + if (ret_network == null) { + s_logger.debug("Can not find network with security group enabled with free IPs"); + } + return ret_network; + } + @Override public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { List networks = _networksDao.listByZoneSecurityGroup(zoneId); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index a563fad02eb..11cea13a4bc 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2350,7 +2350,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir // If no network is specified, find system security group enabled network if (networkIdList == null || networkIdList.isEmpty()) { - Network networkWithSecurityGroup = _networkModel.getNetworkWithSecurityGroupEnabled(zone.getId()); + Network networkWithSecurityGroup = _networkModel.getNetworkWithSGWithFreeIPs(zone.getId()); if (networkWithSecurityGroup == null) { throw new InvalidParameterValueException("No network with security enabled is found in zone id=" + zone.getId()); } diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index 17400400c89..f4f04da327a 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -229,6 +229,15 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { return false; } + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkWithSGWithFreeIPs(java.lang.Long) + */ + @Override + public NetworkVO getNetworkWithSGWithFreeIPs(Long zoneId) { + // TODO Auto-generated method stub + return null; + } + /* (non-Javadoc) * @see com.cloud.network.NetworkModel#getNetworkWithSecurityGroupEnabled(java.lang.Long) */ diff --git a/server/test/com/cloud/vpc/MockNetworkModelImpl.java b/server/test/com/cloud/vpc/MockNetworkModelImpl.java index c9e975a3d11..49030907b94 100644 --- a/server/test/com/cloud/vpc/MockNetworkModelImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkModelImpl.java @@ -240,6 +240,15 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); } + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkWithSGWithFreeIPs(java.lang.Long) + */ + @Override + public NetworkVO getNetworkWithSGWithFreeIPs(Long zoneId) { + // TODO Auto-generated method stub + return null; + } + /* (non-Javadoc) * @see com.cloud.network.NetworkModel#getNetworkWithSecurityGroupEnabled(java.lang.Long) */