diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index 46267cc7a8c..263ca54e85f 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -36,6 +36,7 @@ public interface Network extends ControlledEntity { public Service(String name, Capability... caps) { this.name = name; + this.caps = caps; } public String getName() { @@ -45,6 +46,21 @@ public interface Network extends ControlledEntity { public Capability[] getCapabilities() { return caps; } + + public boolean containsCapability(Capability cap) { + boolean success = false; + if (caps != null) { + int length = caps.length; + for (int i = 0; i< length; i++) { + if (caps[i].getName().equalsIgnoreCase(cap.getName())) { + success = true; + break; + } + } + } + + return success; + } } public static class Provider { diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 1e20422cf49..3f5e3a552d8 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2142,7 +2142,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag public Map> getZoneCapabilities(long zoneId) { DataCenterVO dc = _dcDao.findById(zoneId); if (dc == null) { - throw new InvalidParameterValueException("Zone id=" + dc.getId() + " doesn't exist in the system."); + throw new InvalidParameterValueException("Zone id=" + zoneId + " doesn't exist in the system."); } //Get all service providers from the datacenter @@ -2168,7 +2168,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Service service = it.next(); if (providers.get(service).equalsIgnoreCase(element.getProvider().getName())) { if (elementCapabilities.containsKey(service)) { - networkCapabilities.put(service, elementCapabilities.get(service)); + Map capabilities = elementCapabilities.get(service); + //Verify if Service support capability + if (capabilities != null) { + for (Capability capability : capabilities.keySet()) { + assert(service.containsCapability(capability)) : "Capability " + capability.getName() + " is not supported by the service " + service.getName(); + } + } + networkCapabilities.put(service, capabilities); it.remove(); } }