NAAS: changing sharedsourcenat capability to sourceNat service and changin serviceCapablityList parameter to one level map

This commit is contained in:
Murali Reddy 2011-11-09 18:44:18 -08:00
parent 47114af94b
commit 53a636518f
6 changed files with 83 additions and 30 deletions

View File

@ -96,6 +96,7 @@ public class ApiConstants {
public static final String IS_READY = "isready";
public static final String IS_RECURSIVE = "isrecursive";
public static final String IS_SHARED = "isshared";
public static final String IS_LB_SHARED = "islbshared";
public static final String ISO_FILTER = "isofilter";
public static final String ISO_GUEST_OS_NONE = "None";
public static final String JOB_ID = "jobid";

View File

@ -33,6 +33,7 @@ import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.NetworkOfferingResponse;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.Service;
import com.cloud.offering.NetworkOffering;
@ -238,14 +239,33 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
}
public Map<Capability, String> getServiceCapabilities(Service service) {
Map<Capability, String> capabilityMap = null;
Map<Capability, String> serviceCapabilityMap = null;
if (serviceCapabilistList != null && !serviceCapabilistList.isEmpty()) {
if (serviceCapabilistList.containsKey(service.getName())) {
serviceCapabilityMap = (HashMap<Capability, String>) serviceCapabilistList.get(service.getName());
capabilityMap = new HashMap <Capability, String>();
Collection serviceCapabilityCollection = serviceCapabilistList.values();
Iterator iter = serviceCapabilityCollection.iterator();
while (iter.hasNext()) {
HashMap<String, String> svcCapabilityMap = (HashMap<String, String>) iter.next();
Capability capability = null;
String svc = (String) svcCapabilityMap.get("service");
String capabilityName = (String) svcCapabilityMap.get("capabilityType");
String capabilityValue = (String) svcCapabilityMap.get("capabilityValue");
if (capabilityName != null) {
capability = Capability.getCapability(capabilityName);
}
if ((capability == null) || (capabilityName == null) || (capabilityValue == null) ) {
throw new InvalidParameterValueException("Invalid capability:" + capabilityName + " capability value:" + capabilityValue);
}
if (svc.equalsIgnoreCase(service.getName())) {
capabilityMap.put(capability, capabilityValue);
}
}
}
return serviceCapabilityMap;
return capabilityMap;
}
/////////////////////////////////////////////////////

View File

@ -33,6 +33,7 @@ import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.NetworkOfferingResponse;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.Service;
import com.cloud.offering.NetworkOffering;
@ -190,14 +191,33 @@ public class UpdateNetworkOfferingCmd extends BaseCmd {
}
public Map<Capability, String> getServiceCapabilities(Service service) {
Map<Capability, String> capabilityMap = null;
Map<Capability, String> serviceCapabilityMap = null;
if (serviceCapabilistList != null && !serviceCapabilistList.isEmpty()) {
if (serviceCapabilistList.containsKey(service.getName())) {
serviceCapabilityMap = (HashMap<Capability, String>) serviceCapabilistList.get(service.getName());
capabilityMap = new HashMap <Capability, String>();
Collection serviceCapabilityCollection = serviceCapabilistList.values();
Iterator iter = serviceCapabilityCollection.iterator();
while (iter.hasNext()) {
HashMap<String, String> svcCapabilityMap = (HashMap<String, String>) iter.next();
Capability capability = null;
String svc = (String) svcCapabilityMap.get("service");
String capabilityName = (String) svcCapabilityMap.get("capabilityType");
String capabilityValue = (String) svcCapabilityMap.get("capabilityValue");
if (capabilityName != null) {
capability = Capability.getCapability(capabilityName);
}
if ((capability == null) || (capabilityName == null) || (capabilityValue == null) ) {
throw new InvalidParameterValueException("Invalid capability:" + capabilityName + " capability value:" + capabilityValue);
}
if (svc.equalsIgnoreCase(service.getName())) {
capabilityMap.put(capability, capabilityValue);
}
}
}
return serviceCapabilityMap;
return capabilityMap;
}

View File

@ -69,7 +69,7 @@ public class NetworkOfferingResponse extends BaseResponse{
@SerializedName("service") @Param(description="the list of supported services", responseObject = ServiceResponse.class)
private List<ServiceResponse> services;
@SerializedName(ApiConstants.IS_SHARED) @Param(description="true if load balncer service offered is shared by multiple networks", responseObject = ServiceResponse.class)
@SerializedName(ApiConstants.IS_LB_SHARED) @Param(description="true if load balncer service offered is shared by multiple networks", responseObject = ServiceResponse.class)
private Boolean isLbShared;
@SerializedName(ApiConstants.IS_SHARED) @Param(description="true if soruce NAT service offered is shared by multiple networks", responseObject = ServiceResponse.class)

View File

@ -154,6 +154,8 @@ public interface Network extends ControlledEntity {
public static class Capability {
private static List<Capability> supportedCapabilities = new ArrayList<Capability>();
public static final Capability SupportedProtocols = new Capability("SupportedProtocols");
public static final Capability SupportedLBAlgorithms = new Capability("SupportedLbAlgorithms");
public static final Capability SupportedLBIsolation = new Capability("SupportedLBIsolation");
@ -169,11 +171,21 @@ public interface Network extends ControlledEntity {
public Capability(String name) {
this.name = name;
supportedCapabilities.add(this);
}
public String getName() {
return name;
}
public static Capability getCapability(String capabilityName) {
for (Capability capability : supportedCapabilities) {
if (capability.getName().equalsIgnoreCase(capabilityName)) {
return capability;
}
}
return null;
}
}
enum Event {

View File

@ -2976,12 +2976,12 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
}
validateLoadBalancerServiceCapabilities(lbServiceCapabilityMap);
// verify the Firewall service capabilities specified in the network offering
Map<Capability, String> fwServiceCapabilityMap = cmd.getServiceCapabilities(Service.Firewall);
if (!cmd.getFirewallService() && fwServiceCapabilityMap != null && !fwServiceCapabilityMap.isEmpty()) {
throw new InvalidParameterValueException("Capabilities for Firewall service can be specifed only when Firewall service is enabled for network offering.");
// verify the Source NAT service capabilities specified in the network offering
Map<Capability, String> sourceNatServiceCapabilityMap = cmd.getServiceCapabilities(Service.SourceNat);
if (!cmd.getSourceNatService() && sourceNatServiceCapabilityMap != null && !sourceNatServiceCapabilityMap.isEmpty()) {
throw new InvalidParameterValueException("Capabilities for source NAT service can be specifed only when source NAT service is enabled for network offering.");
}
validateFirewallServiceCapablities(fwServiceCapabilityMap);
validateSourceNatServiceCapablities(sourceNatServiceCapabilityMap);
// verify the Gateway service capabilities specified in the network offering
Map<Capability, String> gwServiceCapabilityMap = cmd.getServiceCapabilities(Service.Gateway);
@ -2992,7 +2992,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
Map<Service, Map<Capability, String>> serviceCapabilityMap = new HashMap<Service, Map<Capability, String>>();
serviceCapabilityMap.put(Service.Lb, lbServiceCapabilityMap);
serviceCapabilityMap.put(Service.Firewall, fwServiceCapabilityMap);
serviceCapabilityMap.put(Service.SourceNat, sourceNatServiceCapabilityMap);
serviceCapabilityMap.put(Service.Gateway, gwServiceCapabilityMap);
return createNetworkOffering(userId, name, displayText, trafficType, tags, maxConnections, specifyVlan, availability, networkRate, serviceProviderMap, false,
@ -3000,11 +3000,11 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
}
void validateLoadBalancerServiceCapabilities(Map<Capability, String> lbServiceCapabilityMap) {
if (lbServiceCapabilityMap != null) {
if (lbServiceCapabilityMap.keySet().size() > 1 || !lbServiceCapabilityMap.containsKey(Capability.SupportedLBIsolation.getName())) {
if (lbServiceCapabilityMap != null && !lbServiceCapabilityMap.isEmpty()) {
if (lbServiceCapabilityMap.keySet().size() > 1 || !lbServiceCapabilityMap.containsKey(Capability.SupportedLBIsolation)) {
throw new InvalidParameterValueException("Only Load balancer isolation capability can be sepcified for LB service");
}
String isolationCapability = lbServiceCapabilityMap.get(Capability.SupportedLBIsolation.getName());
String isolationCapability = lbServiceCapabilityMap.get(Capability.SupportedLBIsolation);
boolean dedicatedLb = isolationCapability.contains("dedicated");
boolean sharedLB = isolationCapability.contains("shared");
if ((dedicatedLb && sharedLB) || (!dedicatedLb && !sharedLB)){
@ -3013,12 +3013,12 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
}
}
void validateFirewallServiceCapablities(Map<Capability, String> fwServiceCapabilityMap) {
if (fwServiceCapabilityMap != null) {
if (fwServiceCapabilityMap.keySet().size() > 1 || !fwServiceCapabilityMap.containsKey(Capability.SupportedSourceNatTypes.getName())) {
void validateSourceNatServiceCapablities(Map<Capability, String> sourceNatServiceCapabilityMap) {
if (sourceNatServiceCapabilityMap != null && !sourceNatServiceCapabilityMap.isEmpty()) {
if (sourceNatServiceCapabilityMap.keySet().size() > 1 || !sourceNatServiceCapabilityMap.containsKey(Capability.SupportedSourceNatTypes)) {
throw new InvalidParameterValueException("Only Supported Source NAT type capability can be sepcified for firewall service");
}
String sourceNatType = fwServiceCapabilityMap.get(Capability.SupportedSourceNatTypes.getName());
String sourceNatType = sourceNatServiceCapabilityMap.get(Capability.SupportedSourceNatTypes);
boolean perAccount = sourceNatType.contains("peraccount");
boolean perZone = sourceNatType.contains("perzone");
if ((perAccount && perZone) || (!perAccount && !perZone)) {
@ -3028,8 +3028,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
}
void validateGatewayServiceCapablities(Map<Capability, String> gwServiceCapabilityMap) {
if (gwServiceCapabilityMap != null) {
if (gwServiceCapabilityMap.keySet().size() > 1 || !gwServiceCapabilityMap.containsKey(Capability.RedundantRouter.getName())) {
if (gwServiceCapabilityMap != null && !gwServiceCapabilityMap.isEmpty()) {
if (gwServiceCapabilityMap.keySet().size() > 1 || !gwServiceCapabilityMap.containsKey(Capability.RedundantRouter)) {
throw new InvalidParameterValueException("Only redundant router capability can be sepcified for gateway service");
}
String param = gwServiceCapabilityMap.get(Capability.RedundantRouter.getName());
@ -3424,17 +3424,17 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
}
offering.setDedicatedLb(dedicatedLb);
// verify the Firewall service capabilities specified in the network offering
Map<Capability, String> fwServiceCapabilityMap = cmd.getServiceCapabilities(Service.Firewall);
// verify the source NAT service capabilities specified in the network offering
Map<Capability, String> sourceNatServiceCapabilityMap = cmd.getServiceCapabilities(Service.SourceNat);
boolean sharedSourceNat = false;
if (!cmd.getFirewallService() && fwServiceCapabilityMap != null && !fwServiceCapabilityMap.isEmpty()) {
if (!cmd.getSourceNatService() && sourceNatServiceCapabilityMap != null && !sourceNatServiceCapabilityMap.isEmpty()) {
throw new InvalidParameterValueException("Capabilities for Firewall service can be specifed only when Firewall service is enabled for network offering.");
}
validateFirewallServiceCapablities(fwServiceCapabilityMap);
validateSourceNatServiceCapablities(sourceNatServiceCapabilityMap);
if ((fwServiceCapabilityMap != null) && (!fwServiceCapabilityMap.isEmpty())) {
String sourceNatType = fwServiceCapabilityMap.get(Capability.SupportedSourceNatTypes.getName());
if ((sourceNatServiceCapabilityMap != null) && (!sourceNatServiceCapabilityMap.isEmpty())) {
String sourceNatType = sourceNatServiceCapabilityMap.get(Capability.SupportedSourceNatTypes.getName());
sharedSourceNat = sourceNatType.contains("perzone");
}
offering.setSharedSourceNat(sharedSourceNat);