diff --git a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java index 2b523a09c73..b4487f374cf 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java @@ -18,6 +18,9 @@ package com.cloud.api.commands; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import org.apache.log4j.Logger; @@ -28,6 +31,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.offering.NetworkOffering; import com.cloud.offering.NetworkOffering.Availability; import com.cloud.user.Account; @@ -127,7 +131,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { } public String getAvailability() { - return availability == null ? Availability.Required.toString() : availability; + return availability == null ? Availability.Optional.toString() : availability; } public Integer getNetworkRate() { @@ -147,43 +151,56 @@ public class CreateNetworkOfferingCmd extends BaseCmd { } public Boolean getDhcpService() { - return dhcpService; + return dhcpService == null ? false : dhcpService; } public Boolean getDnsService() { - return dnsService; + return dnsService == null ? false : dnsService; } public Boolean getGatewayService() { - return gatewayService; + return gatewayService == null ? false : gatewayService; } public Boolean getFirewallService() { - return firewallService; + return firewallService == null ? false : firewallService; } public Boolean getLbService() { - return lbService; + return lbService == null ? false : lbService; } public Boolean getUserdataService() { - return userdataService; + return userdataService == null ? false : userdataService; } public Boolean getSourceNatService() { - return sourceNatService; + return sourceNatService == null ? false : sourceNatService; } public Boolean getVpnService() { - return vpnService; + return vpnService == null ? false : vpnService; } - public Map getServiceProviderList() { - return serviceProviderList; + public Map getServiceProviderList() { + Map serviceProviderMap = null; + if (serviceProviderList != null && !serviceProviderList.isEmpty()) { + serviceProviderMap = new HashMap(); + Collection servicesCollection = serviceProviderList.values(); + Iterator iter = servicesCollection.iterator(); + while (iter.hasNext()) { + HashMap services = (HashMap) iter.next(); + String service = (String)services.get("service"); + String provider = (String) services.get("provider"); + serviceProviderMap.put(service, provider); + } + } + + return serviceProviderMap; } public Boolean getSecurityGroupEnabled() { - return securityGroupEnabled; + return securityGroupEnabled == null ? false : securityGroupEnabled; } ///////////////////////////////////////////////////// diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index d1603f88bb8..653229728c8 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -109,6 +109,7 @@ public interface Network extends ControlledEntity { public static final Provider ExternalDhcpServer = new Provider("ExternalDhcpServer"); public static final Provider ExternalGateWay = new Provider("ExternalGateWay"); public static final Provider ElasticLoadBalancerVm = new Provider("ElasticLoadBalancerVm"); + public static final Provider defaultProvider = VirtualRouter; public static final Provider None = new Provider("None"); diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 26634a9a9f8..f24e4c61b04 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -2893,40 +2893,57 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura Map serviceProviderMap = new HashMap(); //populate all services first if (cmd.getDhcpService()) { - serviceProviderMap.put(Network.Service.Dhcp, null); - } else if (cmd.getDnsService()) { - serviceProviderMap.put(Network.Service.Dns, null); - } else if (cmd.getFirewallService()) { - serviceProviderMap.put(Network.Service.Firewall, null); - } else if (cmd.getGatewayService()) { - serviceProviderMap.put(Network.Service.Gateway, null); - } else if (cmd.getLbService()) { - serviceProviderMap.put(Network.Service.Lb, null); - } else if (cmd.getSourceNatService()) { - serviceProviderMap.put(Network.Service.SourceNat, null); - } else if (cmd.getUserdataService()) { - serviceProviderMap.put(Network.Service.UserData, null); - } else if (cmd.getVpnService()) { - serviceProviderMap.put(Network.Service.Vpn, null); + serviceProviderMap.put(Network.Service.Dhcp, Network.Provider.defaultProvider); + } + + if (cmd.getDnsService()) { + serviceProviderMap.put(Network.Service.Dns, Network.Provider.defaultProvider); + } + + if (cmd.getFirewallService()) { + serviceProviderMap.put(Network.Service.Firewall, Network.Provider.defaultProvider); + } + + if (cmd.getGatewayService()) { + serviceProviderMap.put(Network.Service.Gateway, Network.Provider.defaultProvider); + } + + if (cmd.getLbService()) { + serviceProviderMap.put(Network.Service.Lb, Network.Provider.defaultProvider); + } + + if (cmd.getSourceNatService()) { + serviceProviderMap.put(Network.Service.SourceNat, Network.Provider.defaultProvider); + } + + if (cmd.getUserdataService()) { + serviceProviderMap.put(Network.Service.UserData, Network.Provider.defaultProvider); + } + + if (cmd.getVpnService()) { + serviceProviderMap.put(Network.Service.Vpn, Network.Provider.defaultProvider); } //populate providers Map svcPrv = (Map)cmd.getServiceProviderList(); - for (String serviceStr : svcPrv.keySet()) { - if (serviceProviderMap.containsKey(serviceStr)) { + if (svcPrv != null) { + for (String serviceStr : svcPrv.keySet()) { Network.Service service = Network.Service.getService(serviceStr); - //check if provider is supported - Network.Provider provider; - String prvNameStr = svcPrv.get(serviceStr); - provider = Network.Provider.getProvider(prvNameStr); - if (provider == null) { - throw new InvalidParameterValueException("Invalid service provider: " + prvNameStr); - } - serviceProviderMap.put(service, provider); - } else { - throw new InvalidParameterValueException("Service " + serviceStr + " is not enabled for the network offering, can't add a provider to it"); + if (serviceProviderMap.containsKey(service)) { + //check if provider is supported + Network.Provider provider; + String prvNameStr = svcPrv.get(serviceStr); + provider = Network.Provider.getProvider(prvNameStr); + if (provider == null) { + throw new InvalidParameterValueException("Invalid service provider: " + prvNameStr); + } + serviceProviderMap.put(service, provider); + } else { + throw new InvalidParameterValueException("Service " + serviceStr + " is not enabled for the network offering, can't add a provider to it"); + } } } + return createNetworkOffering(userId, name, displayText, trafficType, tags, maxConnections, specifyVlan, availability, guestIpType, networkRate, serviceProviderMap, false, isSecurityGroupEnabled); } diff --git a/server/src/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java b/server/src/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java index 33d24135058..fe190f70ab5 100644 --- a/server/src/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java +++ b/server/src/com/cloud/offerings/dao/NetworkOfferingDaoImpl.java @@ -124,4 +124,11 @@ public class NetworkOfferingDaoImpl extends GenericDaoBase