From a4fc1d7d65191da6a49bce9fa0a64ce6e46ac85d Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 15 Apr 2013 13:45:25 -0700 Subject: [PATCH] Internal LB: 1) Added network_offering_details DB table and corresponding VO/DAO objects. Change createNetworkOffering web services api to accept the map of key/value pairs as details. 2) Allow to have multiple providers for the same service for the network to support the case when LB service can have separate providers for Internal LB and Public LB --- api/src/com/cloud/network/NetworkModel.java | 2 + .../com/cloud/offering/NetworkOffering.java | 9 ++ .../network/CreateNetworkOfferingCmd.java | 15 ++++ .../command/admin/router/ListRoutersCmd.java | 2 +- .../api/response/NetworkOfferingResponse.java | 9 ++ client/tomcatconf/applicationContext.xml.in | 1 + .../src/com/cloud/api/ApiResponseHelper.java | 6 ++ .../configuration/ConfigurationManager.java | 8 +- .../ConfigurationManagerImpl.java | 41 +++++++-- .../com/cloud/network/NetworkManagerImpl.java | 16 ++-- .../com/cloud/network/NetworkModelImpl.java | 8 ++ .../offerings/NetworkOfferingDetailsVO.java | 84 +++++++++++++++++++ .../cloud/offerings/NetworkOfferingVO.java | 25 +++++- .../offerings/dao/NetworkOfferingDao.java | 3 + .../offerings/dao/NetworkOfferingDaoImpl.java | 22 +++++ .../dao/NetworkOfferingDetailsDao.java | 28 +++++++ .../dao/NetworkOfferingDetailsDaoImpl.java | 54 ++++++++++++ .../cloud/network/MockNetworkModelImpl.java | 6 ++ .../vpc/MockConfigurationManagerImpl.java | 2 +- .../com/cloud/vpc/MockNetworkModelImpl.java | 6 ++ .../CreateNetworkOfferingTest.java | 17 ++-- setup/db/db/schema-410to420.sql | 20 ++++- 22 files changed, 352 insertions(+), 32 deletions(-) create mode 100644 server/src/com/cloud/offerings/NetworkOfferingDetailsVO.java create mode 100644 server/src/com/cloud/offerings/dao/NetworkOfferingDetailsDao.java create mode 100644 server/src/com/cloud/offerings/dao/NetworkOfferingDetailsDaoImpl.java diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index 6260d37265f..3c11bfa309f 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -268,4 +268,6 @@ public interface NetworkModel { List getUsedIpsInNetwork(Network network); + Map getNtwkOffDetails(long offId); + } \ No newline at end of file diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index bd14acd4718..4174359de69 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.offering; +import java.util.Map; + import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; @@ -38,6 +40,11 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity, Disabled, Enabled } + + public enum Details { + internalLbProvider, + publicLbProvider + } public final static String SystemPublicNetwork = "System-Public-Network"; public final static String SystemControlNetwork = "System-Control-Network"; @@ -114,5 +121,7 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity, boolean isInline(); boolean getIsPersistent(); + + Map getDetails(); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java index b48bf9e763e..d2472344e2a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java @@ -29,6 +29,7 @@ import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.BaseCmd.CommandType; import org.apache.cloudstack.api.response.NetworkOfferingResponse; import org.apache.cloudstack.api.response.ServiceOfferingResponse; @@ -95,6 +96,10 @@ public class CreateNetworkOfferingCmd extends BaseCmd { @Parameter(name=ApiConstants.IS_PERSISTENT, type=CommandType.BOOLEAN, description="true if network offering supports persistent networks; defaulted to false if not specified") private Boolean isPersistent; + + @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, since="4.2.0", description="Template details in key/value pairs." + + " Supported keys are internallbprovider/publiclbprovider with service provider as a value") + protected Map details; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -215,6 +220,16 @@ public class CreateNetworkOfferingCmd extends BaseCmd { return capabilityMap; } + + public Map getDetails() { + if (details == null || details.isEmpty()) { + return null; + } + + Collection paramsCollection = details.values(); + Map params = (Map) (paramsCollection.toArray())[0]; + return params; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java index 842061200bb..296d95c1611 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java @@ -75,7 +75,7 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { @Parameter(name=ApiConstants.FOR_VPC, type=CommandType.BOOLEAN, description="if true is passed for this parameter, list only VPC routers") private Boolean forVpc; - @Parameter(name=ApiConstants.ROLE, type=CommandType.STRING, description="list routers by role (Virtual_router or Internal_lb_vm)") + @Parameter(name=ApiConstants.ROLE, type=CommandType.STRING, description="list routers by role (Virtual_router or Internal_lb_vm)", since="4.2.0") private String role; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java index b1dcd423117..7a7e371e180 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java @@ -18,6 +18,7 @@ package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; +import java.util.Map; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; @@ -83,6 +84,10 @@ public class NetworkOfferingResponse extends BaseResponse { @SerializedName(ApiConstants.IS_PERSISTENT) @Param(description="true if network offering supports persistent networks, false otherwise") private Boolean isPersistent; + + @SerializedName(ApiConstants.DETAILS) @Param(description="additional key/value details tied with network offering", since="4.2.0") + private Map details; + public void setId(String id) { this.id = id; @@ -156,5 +161,9 @@ public class NetworkOfferingResponse extends BaseResponse { public void setIsPersistent(Boolean isPersistent) { this.isPersistent = isPersistent; } + + public void setDetails(Map details) { + this.details = details; + } } diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in index 7963071b809..c75e4ddd25f 100644 --- a/client/tomcatconf/applicationContext.xml.in +++ b/client/tomcatconf/applicationContext.xml.in @@ -365,6 +365,7 @@ +