CLOUDSTACK-1242: Fix inline mode

Network refactor dropped many inline mode codes. I've added at least part of
them back. Now I can create LB rule for inline mode.


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/2776ad14
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/2776ad14
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/2776ad14

Branch: refs/heads/qemu-img
Commit: 2776ad14c8d5c090956867a68473ce28316e0286
Parents: 06a733a
Author: Sheng Yang <[email protected]>
Authored: Tue Feb 12 20:09:44 2013 -0800
Committer: Sheng Yang <[email protected]>
Committed: Tue Feb 12 20:27:26 2013 -0800

----------------------------------------------------------------------
 .../src/com/cloud/network/NetworkManagerImpl.java  |    9 +++++--
 server/src/com/cloud/network/NetworkModelImpl.java |   17 ++++++++++++--
 .../src/com/cloud/network/NetworkServiceImpl.java  |   12 ++++++++++
 3 files changed, 32 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/2776ad14/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java 
b/server/src/com/cloud/network/NetworkManagerImpl.java
index 7a6ac27..f586865 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -98,6 +98,7 @@ import com.cloud.network.dao.PhysicalNetworkVO;
 import com.cloud.network.dao.UserIpv6AddressDao;
 import com.cloud.network.element.DhcpServiceProvider;
 import com.cloud.network.element.IpDeployer;
+import com.cloud.network.element.IpDeployingRequester;
 import com.cloud.network.element.LoadBalancingServiceProvider;
 import com.cloud.network.element.NetworkElement;
 import com.cloud.network.element.StaticNatServiceProvider;
@@ -536,9 +537,11 @@ public class NetworkManagerImpl extends ManagerBase 
implements NetworkManager, L
                 }
                 IpDeployer deployer = null;
                 NetworkElement element = 
_networkModel.getElementImplementingProvider(provider.getName());
-                if (element instanceof IpDeployer) {
-                    deployer = (IpDeployer) element;
-                } else {
+                if (!(element instanceof IpDeployingRequester)) {
+                    throw new CloudRuntimeException("Element " + element + " 
is not a IpDeployingRequester!");
+                }
+                deployer = 
((IpDeployingRequester)element).getIpDeployer(network);
+                if (deployer == null) {
                     throw new CloudRuntimeException("Fail to get ip deployer 
for element: " + element);
                 }
                 Set<Service> services = new HashSet<Service>();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/2776ad14/server/src/com/cloud/network/NetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java 
b/server/src/com/cloud/network/NetworkModelImpl.java
index ce48e84..ca7a900 100644
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -75,6 +75,8 @@ import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao;
 import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO;
 import com.cloud.network.dao.PhysicalNetworkVO;
 import com.cloud.network.dao.UserIpv6AddressDao;
+import com.cloud.network.element.IpDeployer;
+import com.cloud.network.element.IpDeployingRequester;
 import com.cloud.network.element.NetworkElement;
 import com.cloud.network.element.UserDataServiceProvider;
 import com.cloud.network.rules.FirewallRule.Purpose;
@@ -390,9 +392,18 @@ public class NetworkModelImpl extends ManagerBase 
implements NetworkModel {
             throw new InvalidParameterException("There is no new provider for 
IP " + publicIp.getAddress() + " of service " + service.getName() + "!");
         }
         Provider newProvider = (Provider) newProviders.toArray()[0];
-        if (!oldProvider.equals(newProvider)) {
-            throw new InvalidParameterException("There would be multiple 
providers for IP " + publicIp.getAddress() + "!");
-        }
+        Network network = _networksDao.findById(networkId);
+        NetworkElement oldElement = 
getElementImplementingProvider(oldProvider.getName());
+        NetworkElement newElement = 
getElementImplementingProvider(newProvider.getName());
+        if (oldElement instanceof IpDeployingRequester && newElement 
instanceof IpDeployingRequester) {
+               IpDeployer oldIpDeployer = 
((IpDeployingRequester)oldElement).getIpDeployer(network);
+               IpDeployer newIpDeployer = 
((IpDeployingRequester)newElement).getIpDeployer(network);
+               if 
(!oldIpDeployer.getProvider().getName().equals(newIpDeployer.getProvider().getName()))
 {
+                       throw new InvalidParameterException("There would be 
multiple providers for IP " + publicIp.getAddress() + "!");
+               }
+        } else {
+               throw new InvalidParameterException("Ip cannot be applied for 
new provider!");
+         }
         return true;
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/2776ad14/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java 
b/server/src/com/cloud/network/NetworkServiceImpl.java
index 050a1fe..70f0fa8 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -333,6 +333,18 @@ public class NetworkServiceImpl extends ManagerBase 
implements  NetworkService {
     private boolean canIpsUseOffering(List<PublicIp> publicIps, long 
offeringId) {
         Map<PublicIp, Set<Service>> ipToServices = getIpToServices(publicIps, 
false, true);
         Map<Service, Set<Provider>> serviceToProviders = 
_networkModel.getNetworkOfferingServiceProvidersMap(offeringId);
+        NetworkOfferingVO offering = _networkOfferingDao.findById(offeringId);
+        //For inline mode checking, using firewall provider for LB instead, 
because public ip would apply on firewall provider
+        if (offering.isInline()) {
+            Provider firewallProvider = null;
+            if (serviceToProviders.containsKey(Service.Firewall)) {
+                firewallProvider = 
(Provider)serviceToProviders.get(Service.Firewall).toArray()[0];
+            }
+            Set<Provider> p = new HashSet<Provider>();
+            p.add(firewallProvider);
+            serviceToProviders.remove(Service.Lb);
+            serviceToProviders.put(Service.Lb, p);
+        }
         for (PublicIp ip : ipToServices.keySet()) {
             Set<Service> services = ipToServices.get(ip);
             Provider provider = null;

Reply via email to