diff --git a/api/src/com/cloud/network/element/NetworkElement.java b/api/src/com/cloud/network/element/NetworkElement.java index c838fd3d919..97c0dc8ef98 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 services); + boolean verifyServicesCombination(Set services); } 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 368ef06fa90..80c8ecfe9bb 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } 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 1f9356f7ea8..8490534f613 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } 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 1b1cbf7aec7..d685ad973c1 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } 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 0473291d15d..ad2516b3b44 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } 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 7fcb6d07682..7d6b75313d2 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 services) { - List netscalerServices = new ArrayList(); - netscalerServices.add(Service.Lb.getName()); - netscalerServices.add(Service.StaticNat.getName()); + public boolean verifyServicesCombination(Set services) { + Set netscalerServices = new HashSet(); + 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 +} 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 6cc670c7f78..bff69aa235b 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } @@ -514,5 +515,5 @@ public class NiciraNvpElement extends AdapterBase implements ConnectivityProvide } return new DeleteHostAnswer(true); } - + } 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 9d571ae92bf..bf785e6710c 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index f9c2717da38..110073424e3 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 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 serviceList = new ArrayList(); 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); } } } diff --git a/server/src/com/cloud/network/element/BareMetalElement.java b/server/src/com/cloud/network/element/BareMetalElement.java index ab50ed65de5..74c30ecbc9c 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } } diff --git a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java index fb12140b235..26595005978 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } diff --git a/server/src/com/cloud/network/element/ExternalDhcpElement.java b/server/src/com/cloud/network/element/ExternalDhcpElement.java index fd95bbf346c..896cd85cd01 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } } diff --git a/server/src/com/cloud/network/element/SecurityGroupElement.java b/server/src/com/cloud/network/element/SecurityGroupElement.java index 74bc54c1dd5..26b33c949e6 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 services) { + public boolean verifyServicesCombination(Set services) { return true; } } diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 25dfc1a9d1c..78ba0adce03 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 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 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; } }