mirror of https://github.com/apache/cloudstack.git
NAAS: changing sharedsourcenat capability to sourceNat service and changin serviceCapablityList parameter to one level map
This commit is contained in:
parent
47114af94b
commit
53a636518f
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue