mirror of https://github.com/apache/cloudstack.git
createNetworkOffering: verify that individual services can be enabled for each provider specified for the network offering
This commit is contained in:
parent
3d6a87867a
commit
5ea4133d7b
|
|
@ -2941,12 +2941,17 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
|
|||
}
|
||||
|
||||
// populate providers
|
||||
Map<Provider, Set<Service>> providerCombinationToVerify = new HashMap<Provider, Set<Service>>();
|
||||
Map<String, List<String>> svcPrv = cmd.getServiceProviders();
|
||||
if (svcPrv != null) {
|
||||
for (String serviceStr : svcPrv.keySet()) {
|
||||
Network.Service service = Network.Service.getService(serviceStr);
|
||||
if (serviceProviderMap.containsKey(service)) {
|
||||
Set<Provider> providers = new HashSet<Provider>();
|
||||
//in Acton, don't allow to specify more than 1 provider per service
|
||||
if (svcPrv.get(serviceStr) != null && svcPrv.get(serviceStr).size() > 1) {
|
||||
throw new InvalidParameterValueException("In the current release only one provider can be specified for the service");
|
||||
}
|
||||
for (String prvNameStr : svcPrv.get(serviceStr)) {
|
||||
// check if provider is supported
|
||||
Network.Provider provider;
|
||||
|
|
@ -2955,6 +2960,16 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
|
|||
throw new InvalidParameterValueException("Invalid service provider: " + prvNameStr);
|
||||
}
|
||||
providers.add(provider);
|
||||
|
||||
Set<Service> serviceSet = null;
|
||||
if (providerCombinationToVerify.get(provider) == null) {
|
||||
serviceSet = new HashSet<Service>();
|
||||
} else {
|
||||
serviceSet = providerCombinationToVerify.get(provider);
|
||||
}
|
||||
serviceSet.add(service);
|
||||
providerCombinationToVerify.put(provider, serviceSet);
|
||||
|
||||
}
|
||||
serviceProviderMap.put(service, providers);
|
||||
} else {
|
||||
|
|
@ -2963,7 +2978,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
|
|||
}
|
||||
}
|
||||
|
||||
//validate
|
||||
//validate providers combination here
|
||||
_networkMgr.canProviderSupportServices(providerCombinationToVerify);
|
||||
|
||||
// verify the LB service capabilities specified in the network offering
|
||||
Map<Capability, String> lbServiceCapabilityMap = cmd.getServiceCapabilities(Service.Lb);
|
||||
|
|
@ -3509,5 +3525,4 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ package com.cloud.network;
|
|||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.cloud.acl.ControlledEntity.ACLType;
|
||||
import com.cloud.dc.Vlan;
|
||||
|
|
@ -244,7 +245,9 @@ public interface NetworkManager extends NetworkService {
|
|||
|
||||
Long getPhysicalNetworkId(Network network);
|
||||
|
||||
boolean getAllowSubdomainAccessGlobal();
|
||||
boolean getAllowSubdomainAccessGlobal();
|
||||
|
||||
boolean isProviderForNetwork(Provider provider, long networkId);
|
||||
|
||||
boolean isProviderForNetwork(Provider provider, long networkId);
|
||||
void canProviderSupportServices(Map<Provider, Set<Service>> providersMap);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4175,7 +4175,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
if (addGatewayService) {
|
||||
services.add(Service.Gateway);
|
||||
}
|
||||
|
||||
}else{
|
||||
//enable all the default services supported by this element.
|
||||
services = new ArrayList<Service>(element.getCapabilities().keySet());
|
||||
|
|
@ -5032,12 +5031,37 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
|
||||
@Override
|
||||
public boolean isProviderForNetwork(Provider provider, long networkId) {
|
||||
if (_ntwkSrvcDao.isProviderForNetwork(networkId, provider) != null) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
if (_ntwkSrvcDao.isProviderForNetwork(networkId, provider) != null) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void canProviderSupportServices(Map<Provider, Set<Service>> providersMap) {
|
||||
for (Provider provider : providersMap.keySet()) {
|
||||
//check if services can be turned off
|
||||
NetworkElement element = getElementImplementingProvider(provider.getName());
|
||||
if(element == null){
|
||||
throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'");
|
||||
}
|
||||
|
||||
Set<Service> enabledServices = providersMap.get(provider);
|
||||
|
||||
if(enabledServices != null && !enabledServices.isEmpty()){
|
||||
if(!element.canEnableIndividualServices()){
|
||||
if(enabledServices.size() != element.getCapabilities().keySet().size()){
|
||||
throw new InvalidParameterValueException("Cannot enable subset of Services, Please specify the complete list of Services for this Service Provider '" + provider.getName() + "'");
|
||||
}
|
||||
}
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue