bug 12856: network offerings with services w/o providers support

status 12856: resolved fixed
This commit is contained in:
Alena Prokharchyk 2012-01-17 16:10:16 -08:00
parent 3612fc12c8
commit 56b3561033
6 changed files with 39 additions and 14 deletions

View File

@ -120,9 +120,6 @@ public interface Network extends ControlledEntity {
public static final Provider ElasticLoadBalancerVm = new Provider("ElasticLoadBalancerVm", false);
public static final Provider SecurityGroupProvider = new Provider("SecurityGroupProvider", false);
public static final Provider None = new Provider("None", false);
//the default provider
public static final Provider defaultProvider = VirtualRouter;
private String name;
private boolean isExternal;

View File

@ -2608,9 +2608,11 @@ public class ApiResponseHelper implements ResponseGenerator {
svcRsp.setName(service.getName());
List<ProviderResponse> providers = new ArrayList<ProviderResponse>();
for (Provider provider : serviceProviderMap.get(service)) {
ProviderResponse providerRsp = new ProviderResponse();
providerRsp.setName(provider.getName());
providers.add(providerRsp);
if (provider != null) {
ProviderResponse providerRsp = new ProviderResponse();
providerRsp.setName(provider.getName());
providers.add(providerRsp);
}
}
svcRsp.setProviders(providers);

View File

@ -2950,7 +2950,6 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
// configure service provider map
Map<Network.Service, Set<Network.Provider>> serviceProviderMap = new HashMap<Network.Service, Set<Network.Provider>>();
Set<Network.Provider> defaultProviders = new HashSet<Network.Provider>();
defaultProviders.add(Network.Provider.defaultProvider);
//populate the services first
for (String serviceName : cmd.getSupportedServices()) {
@ -2993,8 +2992,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
}
for (String prvNameStr : svcPrv.get(serviceStr)) {
// check if provider is supported
Network.Provider provider;
provider = Network.Provider.getProvider(prvNameStr);
Network.Provider provider = Network.Provider.getProvider(prvNameStr);
if (provider == null) {
throw new InvalidParameterValueException("Invalid service provider: " + prvNameStr);
}
@ -3155,11 +3153,18 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
// populate services and providers
if (serviceProviderMap != null) {
for (Network.Service service : serviceProviderMap.keySet()) {
for (Network.Provider provider : serviceProviderMap.get(service)) {
NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service, provider);
Set<Provider> providers = serviceProviderMap.get(service);
if (providers != null && !providers.isEmpty()) {
for (Network.Provider provider : providers) {
NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service, provider);
_ntwkOffServiceMapDao.persist(offService);
s_logger.trace("Added service for the network offering: " + offService + " with provider " + provider.getName());
}
} else {
NetworkOfferingServiceMapVO offService = new NetworkOfferingServiceMapVO(offering.getId(), service, null);
_ntwkOffServiceMapDao.persist(offService);
s_logger.trace("Added service for the network offering: " + offService);
}
s_logger.trace("Added service for the network offering: " + offService + " with null provider");
}
}
}

View File

@ -276,4 +276,6 @@ public interface NetworkManager extends NetworkService {
void checkCapabilityForProvider(Set<Provider> providers, Service service,
Capability cap, String capValue);
Provider getDefaultUniqueProviderForService(String serviceName);
}

View File

@ -4640,6 +4640,19 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
return new ArrayList<Provider>(supportedProviders);
}
@Override
public Provider getDefaultUniqueProviderForService(String serviceName) {
List<? extends Provider> providers = listSupportedNetworkServiceProviders(serviceName);
if (providers.isEmpty()) {
throw new CloudRuntimeException("No providers supporting service " + serviceName + " found in cloudStack");
}
if (providers.size() > 1) {
throw new CloudRuntimeException("More than 1 provider supporting service " + serviceName + " found in cloudStack");
}
return providers.get(0);
}
@Override
@DB
@ -5568,6 +5581,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
String service = serviceMap.getService();
String provider = serviceMap.getProvider();
if (provider == null) {
provider = getDefaultUniqueProviderForService(service).getName();
}
//check that provider is supported
if (checkPhysicalNetwork) {

View File

@ -77,7 +77,9 @@ public class NetworkOfferingServiceMapVO {
public NetworkOfferingServiceMapVO(long networkOfferingId, Service service, Provider provider) {
this.networkOfferingId = networkOfferingId;
this.service = service.getName();
this.provider = provider.getName();
if (provider != null) {
this.provider = provider.getName();
}
}
public String toString() {