You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2012/08/08 20:55:24 UTC

[38/43] git commit: CS-15243: Add service combination check at create network offering

CS-15243: Add service combination check at create network offering


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

Branch: refs/heads/vpc
Commit: 46a12b378c288d27d86c9c885534f1309fee0f63
Parents: 70d0ff8
Author: Sheng Yang <sh...@citrix.com>
Authored: Tue Aug 7 13:17:06 2012 -0700
Committer: Sheng Yang <sh...@citrix.com>
Committed: Tue Aug 7 13:17:48 2012 -0700

----------------------------------------------------------------------
 .../com/cloud/network/element/NetworkElement.java  |    3 +-
 .../network/element/CiscoNexusVSMElement.java      |    3 +-
 .../element/ElasticLoadBalancerElement.java        |    2 +-
 .../element/F5ExternalLoadBalancerElement.java     |    2 +-
 .../element/JuniperSRXExternalFirewallElement.java |    2 +-
 .../cloud/network/element/NetscalerElement.java    |   17 +++++++++-----
 .../cloud/network/element/NiciraNvpElement.java    |    5 ++-
 .../src/com/cloud/network/element/OvsElement.java  |    3 +-
 .../src/com/cloud/network/NetworkManagerImpl.java  |   13 ++++-------
 .../cloud/network/element/BareMetalElement.java    |    3 +-
 .../network/element/CloudZonesNetworkElement.java  |    3 +-
 .../cloud/network/element/ExternalDhcpElement.java |    3 +-
 .../network/element/SecurityGroupElement.java      |    3 +-
 .../network/element/VirtualRouterElement.java      |   15 ++++++++----
 14 files changed, 46 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/api/src/com/cloud/network/element/NetworkElement.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/element/NetworkElement.java b/api/src/com/cloud/network/element/NetworkElement.java
index c838fd3..97c0dc8 100644
--- a/api/src/com/cloud/network/element/NetworkElement.java
+++ b/api/src/com/cloud/network/element/NetworkElement.java
@@ -18,6 +18,7 @@ package com.cloud.network.element;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import com.cloud.deploy.DeployDestination;
 import com.cloud.exception.ConcurrentOperationException;
@@ -131,5 +132,5 @@ public interface NetworkElement extends Adapter {
      * @param services
      * @return true/false
      */
-    boolean verifyServicesCombination(List<String> services);
+    boolean verifyServicesCombination(Set<Service> services);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java
index 368ef06..80c8ecf 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java
@@ -20,6 +20,7 @@ package com.cloud.network.element;
 import java.util.List;
 import java.util.Map;
 import java.util.ArrayList;
+import java.util.Set;
 
 import javax.ejb.Local;
 
@@ -132,7 +133,7 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme
     }
     
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
     	return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java
index 1f9356f..8490534 100644
--- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java
+++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java
@@ -182,7 +182,7 @@ public class ElasticLoadBalancerElement extends AdapterBase implements LoadBalan
     }
     
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
index 1b1cbf7..d685ad9 100644
--- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
+++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
@@ -453,7 +453,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan
     }
 
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
index 0473291..ad2516b 100644
--- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
+++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
@@ -528,7 +528,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan
     }
 
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
index 7fcb6d0..7d6b753 100644
--- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
+++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java
@@ -15,6 +15,7 @@ package com.cloud.network.element;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -591,15 +592,19 @@ public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl impl
     }
 
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
-        List<String> netscalerServices = new ArrayList<String>();
-        netscalerServices.add(Service.Lb.getName());
-        netscalerServices.add(Service.StaticNat.getName());
+    public boolean verifyServicesCombination(Set<Service> services) {
+        Set<Service> netscalerServices = new HashSet<Service>();
+        netscalerServices.add(Service.Lb);
+        netscalerServices.add(Service.StaticNat);
 
         // NetScaler can only act as Lb and Static Nat service provider
         if (services != null && !services.isEmpty() && !netscalerServices.containsAll(services)) {
+            String servicesList = "";
+            for (Service service : services) {
+                servicesList += service.getName() + " ";
+            }
             s_logger.warn("NetScaler network element can only support LB and Static NAT services and service combination " 
-                + services + " is not supported.");
+                + servicesList + " is not supported.");
             return false;
         }
 
@@ -781,4 +786,4 @@ public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl impl
         }
         return null;
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
index 6cc670c..bff69aa 100644
--- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
@@ -38,6 +38,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 
 import javax.ejb.Local;
@@ -297,7 +298,7 @@ public class NiciraNvpElement extends AdapterBase implements ConnectivityProvide
     }
 
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
         return true;
     }
 
@@ -514,5 +515,5 @@ public class NiciraNvpElement extends AdapterBase implements ConnectivityProvide
         }
         return new DeleteHostAnswer(true);
     }
-    
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
index 9d571ae..bf785e6 100644
--- a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
+++ b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java
@@ -18,6 +18,7 @@ package com.cloud.network.element;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.ejb.Local;
 
@@ -130,7 +131,7 @@ public class OvsElement extends AdapterBase implements NetworkElement {
     }
 
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
         return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/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 f9c2717..1100734 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -6355,14 +6355,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
             l.add(service);
         }
 
-        for (String provider : providerSvcs.keySet()) {
-            NetworkElement element = getElementImplementingProvider(provider);
-            List<String> services = providerSvcs.get(provider);
-            if (!element.verifyServicesCombination(services)) {
-                throw new UnsupportedServiceException("Provider " + provider + " doesn't support services combination: " + services);
-            }
-        }
-
         return svcProviders;
     }
 
@@ -6459,11 +6451,16 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
                                 + provider.getName());
                     }
                 }
+                List<String> serviceList = new ArrayList<String>();
                 for (Service service : enabledServices) {
                     // check if the service is provided by this Provider
                     if (!element.getCapabilities().containsKey(service)) {
                         throw new UnsupportedServiceException(provider.getName() + " Provider cannot provide service " + service.getName());
                     }
+                    serviceList.add(service.getName());
+                }
+                if (!element.verifyServicesCombination(enabledServices)) {
+                    throw new UnsupportedServiceException("Provider " + provider.getName() + " doesn't support services combination: " + serviceList);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/server/src/com/cloud/network/element/BareMetalElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/BareMetalElement.java b/server/src/com/cloud/network/element/BareMetalElement.java
index ab50ed6..74c30ec 100644
--- a/server/src/com/cloud/network/element/BareMetalElement.java
+++ b/server/src/com/cloud/network/element/BareMetalElement.java
@@ -18,6 +18,7 @@ package com.cloud.network.element;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.ejb.Local;
 
@@ -122,7 +123,7 @@ public class BareMetalElement extends AdapterBase implements NetworkElement {
     }
     
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
         return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/server/src/com/cloud/network/element/CloudZonesNetworkElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java
index fb12140..2659500 100644
--- a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java
+++ b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java
@@ -19,6 +19,7 @@ package com.cloud.network.element;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.ejb.Local;
 
@@ -240,7 +241,7 @@ public class CloudZonesNetworkElement extends AdapterBase implements NetworkElem
     }
 
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/server/src/com/cloud/network/element/ExternalDhcpElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/ExternalDhcpElement.java b/server/src/com/cloud/network/element/ExternalDhcpElement.java
index fd95bbf..896cd85 100755
--- a/server/src/com/cloud/network/element/ExternalDhcpElement.java
+++ b/server/src/com/cloud/network/element/ExternalDhcpElement.java
@@ -19,6 +19,7 @@ package com.cloud.network.element;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.ejb.Local;
 
@@ -146,7 +147,7 @@ public class ExternalDhcpElement extends AdapterBase implements NetworkElement,
     }
 
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
         return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/server/src/com/cloud/network/element/SecurityGroupElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/SecurityGroupElement.java b/server/src/com/cloud/network/element/SecurityGroupElement.java
index 74bc54c..26b33c9 100644
--- a/server/src/com/cloud/network/element/SecurityGroupElement.java
+++ b/server/src/com/cloud/network/element/SecurityGroupElement.java
@@ -19,6 +19,7 @@ package com.cloud.network.element;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.ejb.Local;
 
@@ -105,7 +106,7 @@ public class SecurityGroupElement extends AdapterBase implements NetworkElement
     }
     
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
+    public boolean verifyServicesCombination(Set<Service> services) {
         return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/46a12b37/server/src/com/cloud/network/element/VirtualRouterElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index 25dfc1a..78ba0ad 100755
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -812,11 +812,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
     }
 
     @Override
-    public boolean verifyServicesCombination(List<String> services) {
-        if (!services.contains("SourceNat")) {
-            if (services.contains("StaticNat") || services.contains("Firewall") || services.contains("Lb") || services.contains("PortForwarding") ||
-                    services.contains("Vpn")) {
-                s_logger.warn("Virtual router can't enable services " + services + " without source NAT service");
+    public boolean verifyServicesCombination(Set<Service> services) {
+        if (!services.contains(Service.SourceNat)) {
+            if (services.contains(Service.StaticNat) || services.contains(Service.Firewall) || services.contains(Service.Lb) || 
+                    services.contains(Service.PortForwarding) || services.contains(Service.Vpn)) {
+                String servicesList = "[";
+                for (Service service : services) {
+                    servicesList += service.getName() + " ";
+                }
+                servicesList += "]";
+                s_logger.warn("Virtual router can't enable services " + servicesList + " without source NAT service");
                 return false;
             }
         }