mirror of https://github.com/apache/cloudstack.git
-add check to ensure 'Connectivity' service provider specified in
createVpcOffering actually supports 'DistributedRouter' capability - enable OVS to support 'DistributedRouter' capability
This commit is contained in:
parent
7c4443e233
commit
e3ec12e5d0
|
|
@ -246,7 +246,10 @@ StaticNatServiceProvider, IpDeployer {
|
|||
Map<Service, Map<Capability, String>> capabilities = new HashMap<Service, Map<Capability, String>>();
|
||||
|
||||
// L2 Support : SDN provisioning
|
||||
capabilities.put(Service.Connectivity, null);
|
||||
Map<Capability, String> connectivityCapabilities = new HashMap<Capability, String>();
|
||||
connectivityCapabilities.put(Capability.DistributedRouter, null);
|
||||
capabilities.put(Service.Connectivity, connectivityCapabilities);
|
||||
|
||||
|
||||
// L3 Support : Port Forwarding
|
||||
capabilities.put(Service.PortForwarding, null);
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ import com.cloud.exception.PermissionDeniedException;
|
|||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.network.element.NetworkElement;
|
||||
import com.cloud.network.IpAddress;
|
||||
import com.cloud.network.IpAddressManager;
|
||||
import com.cloud.network.Network;
|
||||
|
|
@ -376,6 +377,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||
}
|
||||
}
|
||||
|
||||
validateConnectivtyServiceCapablitlies(svcProviderMap.get(Service.Connectivity), serviceCapabilitystList);
|
||||
boolean supportsDistributedRouter = isVpcOfferingSupportsDistributedRouter(serviceCapabilitystList);
|
||||
|
||||
VpcOffering offering = createVpcOffering(name, displayText, svcProviderMap, false, null,
|
||||
|
|
@ -460,6 +462,56 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||
return supportsDistributedRouter;
|
||||
}
|
||||
|
||||
private void validateConnectivtyServiceCapablitlies(Set<Provider> providers, Map serviceCapabilitystList) {
|
||||
|
||||
if (serviceCapabilitystList != null && !serviceCapabilitystList.isEmpty()) {
|
||||
Collection serviceCapabilityCollection = serviceCapabilitystList.values();
|
||||
Iterator iter = serviceCapabilityCollection.iterator();
|
||||
Map<Network.Capability, String> capabilityMap = null;
|
||||
|
||||
while (iter.hasNext()) {
|
||||
HashMap<String, String> svcCapabilityMap = (HashMap<String, String>)iter.next();
|
||||
Network.Capability capability = null;
|
||||
String svc = svcCapabilityMap.get("service");
|
||||
String capabilityName = svcCapabilityMap.get("capabilitytype");
|
||||
String capabilityValue = svcCapabilityMap.get("capabilityvalue");
|
||||
if (capabilityName != null) {
|
||||
capability = Network.Capability.getCapability(capabilityName);
|
||||
}
|
||||
|
||||
if ((capability == null) || (capabilityName == null) || (capabilityValue == null)) {
|
||||
throw new InvalidParameterValueException("Invalid capability:" + capabilityName + " capability value:" + capabilityValue);
|
||||
}
|
||||
|
||||
if (!svc.equalsIgnoreCase(Service.Connectivity.getName())) {
|
||||
throw new InvalidParameterValueException("Invalid Service:" + svc + " specified. Only for 'Connectivity' service capabilities can be specified");
|
||||
}
|
||||
|
||||
if (!capabilityName.equalsIgnoreCase("DistributedRouter")) {
|
||||
throw new InvalidParameterValueException("Invalid Capability:" + capabilityName + " specified. Only 'DistributedRouter' capability can be specified.");
|
||||
}
|
||||
|
||||
if (!capabilityValue.equalsIgnoreCase("true") && capabilityValue.equalsIgnoreCase("false")) {
|
||||
throw new InvalidParameterValueException("Invalid Capability value:" + capabilityValue + " specified.");
|
||||
}
|
||||
}
|
||||
|
||||
if (providers != null && !providers.isEmpty()) {
|
||||
for (Provider provider: providers) {
|
||||
NetworkElement element = _ntwkModel.getElementImplementingProvider(provider.getName());
|
||||
Map<Service, Map<Network.Capability, String>> capabilities = element.getCapabilities();
|
||||
if (capabilities != null && !capabilities.isEmpty()) {
|
||||
Map<Network.Capability, String> connectivityCapabilities = capabilities.get(Service.Connectivity);
|
||||
if (connectivityCapabilities == null || (connectivityCapabilities != null && !connectivityCapabilities.keySet().contains(Network.Capability.DistributedRouter))) {
|
||||
throw new InvalidParameterValueException("Provider: " + provider.getName() + " does not support "
|
||||
+ Network.Capability.DistributedRouter.getName() + " capability.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vpc getActiveVpc(long vpcId) {
|
||||
return _vpcDao.getActiveVpcById(vpcId);
|
||||
|
|
|
|||
Loading…
Reference in New Issue