mirror of https://github.com/apache/cloudstack.git
bug 12065: verify that provider supports service capability
status 12065: resolved fixed
This commit is contained in:
parent
d766b11ca1
commit
c87c3bc665
|
|
@ -63,7 +63,6 @@ import com.cloud.api.commands.UpdateNetworkOfferingCmd;
|
|||
import com.cloud.api.commands.UpdatePodCmd;
|
||||
import com.cloud.api.commands.UpdateServiceOfferingCmd;
|
||||
import com.cloud.api.commands.UpdateZoneCmd;
|
||||
import com.cloud.capacity.Capacity;
|
||||
import com.cloud.capacity.dao.CapacityDao;
|
||||
import com.cloud.configuration.Resource.ResourceType;
|
||||
import com.cloud.configuration.dao.ConfigurationDao;
|
||||
|
|
@ -113,7 +112,6 @@ import com.cloud.network.NetworkManager;
|
|||
import com.cloud.network.NetworkVO;
|
||||
import com.cloud.network.Networks.BroadcastDomainType;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.PhysicalNetwork;
|
||||
import com.cloud.network.PhysicalNetworkVO;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
|
|
@ -3114,7 +3112,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
|
|||
if ((lbServiceCapabilityMap != null) && (!lbServiceCapabilityMap.isEmpty())) {
|
||||
String isolationCapability = lbServiceCapabilityMap.get(Capability.SupportedLBIsolation);
|
||||
|
||||
if (isolationCapability != null) {
|
||||
if (isolationCapability != null) {
|
||||
_networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.SupportedLBIsolation, isolationCapability);
|
||||
dedicatedLb = isolationCapability.contains("dedicated");
|
||||
} else {
|
||||
dedicatedLb = true;
|
||||
|
|
@ -3127,6 +3126,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
|
|||
if ((sourceNatServiceCapabilityMap != null) && (!sourceNatServiceCapabilityMap.isEmpty())) {
|
||||
String sourceNatType = sourceNatServiceCapabilityMap.get(Capability.SupportedSourceNatTypes.getName());
|
||||
if (sourceNatType != null) {
|
||||
_networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, Capability.SupportedSourceNatTypes, sourceNatType);
|
||||
sharedSourceNat = sourceNatType.contains("perzone");
|
||||
} else {
|
||||
sharedSourceNat = false;
|
||||
|
|
@ -3134,6 +3134,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
|
|||
|
||||
String param = sourceNatServiceCapabilityMap.get(Capability.RedundantRouter);
|
||||
if (param != null) {
|
||||
_networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, Capability.RedundantRouter, param);
|
||||
redundantRouter = param.contains("true");
|
||||
} else {
|
||||
redundantRouter = false;
|
||||
|
|
|
|||
|
|
@ -273,4 +273,7 @@ public interface NetworkManager extends NetworkService {
|
|||
public boolean checkIpForService(IPAddressVO ip, Service service);
|
||||
|
||||
void checkVirtualNetworkCidrOverlap(Long zoneId, String cidr);
|
||||
|
||||
void checkCapabilityForProvider(Set<Provider> providers, Service service,
|
||||
Capability cap, String capValue);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5754,4 +5754,34 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
|
||||
return results;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCapabilityForProvider(Set<Provider> providers, Service service, Capability cap, String capValue) {
|
||||
for (Provider provider : providers) {
|
||||
NetworkElement element = getElementImplementingProvider(provider.getName());
|
||||
if(element != null){
|
||||
Map<Service, Map<Capability, String>> elementCapabilities = element.getCapabilities();
|
||||
if (elementCapabilities == null || !elementCapabilities.containsKey(service)) {
|
||||
throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider.getName());
|
||||
}
|
||||
Map<Capability, String> serviceCapabilities = elementCapabilities.get(service);
|
||||
if (serviceCapabilities == null || serviceCapabilities.isEmpty()) {
|
||||
throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capabilites for element=" + element.getName() + " implementing Provider=" + provider.getName());
|
||||
}
|
||||
|
||||
String value = serviceCapabilities.get(cap);
|
||||
if (value == null || value.isEmpty()) {
|
||||
throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capability " + cap.getName() + " for element=" + element.getName() + " implementing Provider=" + provider.getName());
|
||||
}
|
||||
|
||||
capValue = capValue.toLowerCase();
|
||||
|
||||
if (!value.contains(capValue)) {
|
||||
throw new UnsupportedServiceException("Service " + service.getName() + " doesn't support value " + capValue + " for capability " + cap.getName() + " for element=" + element.getName() + " implementing Provider=" + provider.getName());
|
||||
}
|
||||
} else {
|
||||
throw new UnsupportedServiceException("Unable to find network element for provider " + provider.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue