Skip to content

Commit e3ec12e

Browse files
committed
-add check to ensure 'Connectivity' service provider specified in
createVpcOffering actually supports 'DistributedRouter' capability - enable OVS to support 'DistributedRouter' capability
1 parent 7c4443e commit e3ec12e

2 files changed

Lines changed: 56 additions & 1 deletion

File tree

plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,10 @@ private static Map<Service, Map<Capability, String>> setCapabilities() {
246246
Map<Service, Map<Capability, String>> capabilities = new HashMap<Service, Map<Capability, String>>();
247247

248248
// L2 Support : SDN provisioning
249-
capabilities.put(Service.Connectivity, null);
249+
Map<Capability, String> connectivityCapabilities = new HashMap<Capability, String>();
250+
connectivityCapabilities.put(Capability.DistributedRouter, null);
251+
capabilities.put(Service.Connectivity, connectivityCapabilities);
252+
250253

251254
// L3 Support : Port Forwarding
252255
capabilities.put(Service.PortForwarding, null);

server/src/com/cloud/network/vpc/VpcManagerImpl.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import com.cloud.exception.ResourceAllocationException;
6666
import com.cloud.exception.ResourceUnavailableException;
6767
import com.cloud.hypervisor.Hypervisor.HypervisorType;
68+
import com.cloud.network.element.NetworkElement;
6869
import com.cloud.network.IpAddress;
6970
import com.cloud.network.IpAddressManager;
7071
import com.cloud.network.Network;
@@ -376,6 +377,7 @@ public VpcOffering createVpcOffering(String name, String displayText, List<Strin
376377
}
377378
}
378379

380+
validateConnectivtyServiceCapablitlies(svcProviderMap.get(Service.Connectivity), serviceCapabilitystList);
379381
boolean supportsDistributedRouter = isVpcOfferingSupportsDistributedRouter(serviceCapabilitystList);
380382

381383
VpcOffering offering = createVpcOffering(name, displayText, svcProviderMap, false, null,
@@ -460,6 +462,56 @@ private boolean isVpcOfferingSupportsDistributedRouter(Map serviceCapabilitystLi
460462
return supportsDistributedRouter;
461463
}
462464

465+
private void validateConnectivtyServiceCapablitlies(Set<Provider> providers, Map serviceCapabilitystList) {
466+
467+
if (serviceCapabilitystList != null && !serviceCapabilitystList.isEmpty()) {
468+
Collection serviceCapabilityCollection = serviceCapabilitystList.values();
469+
Iterator iter = serviceCapabilityCollection.iterator();
470+
Map<Network.Capability, String> capabilityMap = null;
471+
472+
while (iter.hasNext()) {
473+
HashMap<String, String> svcCapabilityMap = (HashMap<String, String>)iter.next();
474+
Network.Capability capability = null;
475+
String svc = svcCapabilityMap.get("service");
476+
String capabilityName = svcCapabilityMap.get("capabilitytype");
477+
String capabilityValue = svcCapabilityMap.get("capabilityvalue");
478+
if (capabilityName != null) {
479+
capability = Network.Capability.getCapability(capabilityName);
480+
}
481+
482+
if ((capability == null) || (capabilityName == null) || (capabilityValue == null)) {
483+
throw new InvalidParameterValueException("Invalid capability:" + capabilityName + " capability value:" + capabilityValue);
484+
}
485+
486+
if (!svc.equalsIgnoreCase(Service.Connectivity.getName())) {
487+
throw new InvalidParameterValueException("Invalid Service:" + svc + " specified. Only for 'Connectivity' service capabilities can be specified");
488+
}
489+
490+
if (!capabilityName.equalsIgnoreCase("DistributedRouter")) {
491+
throw new InvalidParameterValueException("Invalid Capability:" + capabilityName + " specified. Only 'DistributedRouter' capability can be specified.");
492+
}
493+
494+
if (!capabilityValue.equalsIgnoreCase("true") && capabilityValue.equalsIgnoreCase("false")) {
495+
throw new InvalidParameterValueException("Invalid Capability value:" + capabilityValue + " specified.");
496+
}
497+
}
498+
499+
if (providers != null && !providers.isEmpty()) {
500+
for (Provider provider: providers) {
501+
NetworkElement element = _ntwkModel.getElementImplementingProvider(provider.getName());
502+
Map<Service, Map<Network.Capability, String>> capabilities = element.getCapabilities();
503+
if (capabilities != null && !capabilities.isEmpty()) {
504+
Map<Network.Capability, String> connectivityCapabilities = capabilities.get(Service.Connectivity);
505+
if (connectivityCapabilities == null || (connectivityCapabilities != null && !connectivityCapabilities.keySet().contains(Network.Capability.DistributedRouter))) {
506+
throw new InvalidParameterValueException("Provider: " + provider.getName() + " does not support "
507+
+ Network.Capability.DistributedRouter.getName() + " capability.");
508+
}
509+
}
510+
}
511+
}
512+
}
513+
}
514+
463515
@Override
464516
public Vpc getActiveVpc(long vpcId) {
465517
return _vpcDao.getActiveVpcById(vpcId);

0 commit comments

Comments
 (0)