From e89c8725edee69a43b96be4b9188de4cab56955f Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Tue, 6 Dec 2011 15:36:02 -0800 Subject: [PATCH] Return redundantRouter/sourceNatSupported capabilities as a part of listSupportedNetworkServices --- .../commands/CreateNetworkOfferingCmd.java | 2 ++ api/src/com/cloud/network/Network.java | 5 ++--- .../com/cloud/network/NetworkManagerImpl.java | 12 ++++++++++- .../network/dao/NetworkServiceMapDaoImpl.java | 2 +- .../dao/NetworkOfferingServiceMapDao.java | 2 +- .../dao/NetworkOfferingServiceMapDaoImpl.java | 21 ++++++++++++------- 6 files changed, 31 insertions(+), 13 deletions(-) diff --git a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java index c44d100cadd..20df3a6a5a2 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java @@ -194,6 +194,8 @@ public class CreateNetworkOfferingCmd extends BaseCmd { if (svc.equalsIgnoreCase(service.getName())) { capabilityMap.put(capability, capabilityValue); + } else { + //throw new InvalidParameterValueException("Service is not equal ") } } } diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index e213ca58dfe..65e9a5209aa 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -51,10 +51,10 @@ public interface Network extends ControlledEntity { public static final Service Dhcp = new Service("Dhcp"); public static final Service Dns = new Service("Dns", Capability.AllowDnsSuffixModification); public static final Service Gateway = new Service("Gateway"); - public static final Service Firewall = new Service("Firewall", Capability.SupportedProtocols, Capability.MultipleIps, Capability.SupportedSourceNatTypes, Capability.TrafficStatistics); + public static final Service Firewall = new Service("Firewall", Capability.SupportedProtocols, Capability.MultipleIps, Capability.TrafficStatistics); public static final Service Lb = new Service("Lb", Capability.SupportedLBAlgorithms, Capability.SupportedLBIsolation, Capability.SupportedProtocols, Capability.TrafficStatistics, Capability.LoadBalancingSupportedIps, Capability.SupportedStickinessMethods); public static final Service UserData = new Service("UserData"); - public static final Service SourceNat = new Service("SourceNat"); + public static final Service SourceNat = new Service("SourceNat", Capability.SupportedSourceNatTypes, Capability.RedundantRouter); public static final Service StaticNat = new Service("StaticNat"); public static final Service PortForwarding = new Service("PortForwarding"); public static final Service SecurityGroup = new Service("SecurityGroup"); @@ -118,7 +118,6 @@ public interface Network extends ControlledEntity { public static final Provider ExternalDhcpServer = new Provider("ExternalDhcpServer", true); public static final Provider ExternalGateWay = new Provider("ExternalGateWay", true); public static final Provider ElasticLoadBalancerVm = new Provider("ElasticLoadBalancerVm", false); - public static final Provider RedundantVirtualRouter = new Provider("RedundantVirtualRouter", false); public static final Provider SecurityGroupProvider = new Provider("SecurityGroupProvider", false); public static final Provider None = new Provider("None", false); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 04d3495834b..5e1f27e1a77 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2849,7 +2849,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Map serviceCapabilities = new HashMap(); //get the Provider for this Service for this offering - String provider = _ntwkOfferingSrvcDao.getProviderForServiceForNetworkOffering(offering.getId(), service); + List providers = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); + if (providers.isEmpty()) { + throw new InvalidParameterValueException("Service " + service.getName() + " is not supported by the network offering " + offering); + } + + //FIXME - in post 3.0 we are going to support multiple providers for the same service per network offering, so we have to calculate capabilities for all of them + String provider = providers.get(0); //FIXME we return the capabilities of the first provider of the service - what if we have multiple providers for same Service? NetworkElement element = getElementImplementingProvider(provider); @@ -5104,6 +5110,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if(enabledServices.size() != element.getCapabilities().keySet().size()){ StringBuilder servicesSet = new StringBuilder(); for (Service requiredService: element.getCapabilities().keySet()) { + //skip gateway service as we don't allow setting it via API + if (requiredService == Service.Gateway) { + continue; + } servicesSet.append(requiredService.getName() + ", "); } servicesSet.delete(servicesSet.toString().length() -2, servicesSet.toString().length()); diff --git a/server/src/com/cloud/network/dao/NetworkServiceMapDaoImpl.java b/server/src/com/cloud/network/dao/NetworkServiceMapDaoImpl.java index e8d7d5664e4..c7d1634c1ef 100644 --- a/server/src/com/cloud/network/dao/NetworkServiceMapDaoImpl.java +++ b/server/src/com/cloud/network/dao/NetworkServiceMapDaoImpl.java @@ -57,7 +57,7 @@ public class NetworkServiceMapDaoImpl extends GenericDaoBase listByNetworkOfferingId(long networkOfferingId); void deleteByOfferingId(long networkOfferingId); - String getProviderForServiceForNetworkOffering(long networkOfferingId, Service service); + List listProvidersForServiceForNetworkOffering(long networkOfferingId, Service service); } diff --git a/server/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDaoImpl.java b/server/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDaoImpl.java index 9dc89a5efca..1ecf0b1be49 100644 --- a/server/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDaoImpl.java +++ b/server/src/com/cloud/offerings/dao/NetworkOfferingServiceMapDaoImpl.java @@ -23,17 +23,21 @@ import java.util.List; import javax.ejb.Local; import com.cloud.exception.UnsupportedServiceException; +import com.cloud.network.NetworkServiceMapVO; import com.cloud.network.Network.Service; import com.cloud.offerings.NetworkOfferingServiceMapVO; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.GenericSearchBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Func; @Local(value=NetworkOfferingServiceMapDao.class) @DB(txn=false) public class NetworkOfferingServiceMapDaoImpl extends GenericDaoBase implements NetworkOfferingServiceMapDao { final SearchBuilder AllFieldsSearch; final SearchBuilder MultipleServicesSearch; + final GenericSearchBuilder ProvidersSearch; protected NetworkOfferingServiceMapDaoImpl() { super(); @@ -48,6 +52,12 @@ public class NetworkOfferingServiceMapDaoImpl extends GenericDaoBase sc = AllFieldsSearch.create(); + public List listProvidersForServiceForNetworkOffering(long networkOfferingId, Service service) { + SearchCriteria sc = ProvidersSearch.create();; + sc.setParameters("networkOfferingId", networkOfferingId); sc.setParameters("service", service.getName()); - NetworkOfferingServiceMapVO ntwkSvc = findOneBy(sc); - if (ntwkSvc == null) { - throw new UnsupportedServiceException("Service " + service + " is not supported by network offering id=" + networkOfferingId); - } - return ntwkSvc.getProvider(); + return customSearch(sc, null); } }