diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index f54154b926f..c77644de057 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -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; diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index fbb09528c93..e1104224985 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -2608,9 +2608,11 @@ public class ApiResponseHelper implements ResponseGenerator { svcRsp.setName(service.getName()); List providers = new ArrayList(); 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); diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index b1071c1887f..ed55d59d753 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -2950,7 +2950,6 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura // configure service provider map Map> serviceProviderMap = new HashMap>(); Set defaultProviders = new HashSet(); - 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 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"); + } } } diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 013f81d3f9b..ded421d67f0 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -276,4 +276,6 @@ public interface NetworkManager extends NetworkService { void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue); + + Provider getDefaultUniqueProviderForService(String serviceName); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 376484a2a58..fb625fa7e75 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -4640,6 +4640,19 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return new ArrayList(supportedProviders); } + + @Override + public Provider getDefaultUniqueProviderForService(String serviceName) { + List 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) { diff --git a/server/src/com/cloud/offerings/NetworkOfferingServiceMapVO.java b/server/src/com/cloud/offerings/NetworkOfferingServiceMapVO.java index f53656cd90f..223b7202af4 100644 --- a/server/src/com/cloud/offerings/NetworkOfferingServiceMapVO.java +++ b/server/src/com/cloud/offerings/NetworkOfferingServiceMapVO.java @@ -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() {