handle lb cluster creation at cartridge deployment
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/7808ff37 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/7808ff37 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/7808ff37 Branch: refs/heads/master Commit: 7808ff37e843181abd789b9859ded28ebf830751 Parents: 2849f91 Author: Nirmal Fernando <[email protected]> Authored: Tue Dec 10 19:07:31 2013 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Tue Dec 10 19:16:13 2013 +0530 ---------------------------------------------------------------------- .../apache/stratos/rest/endpoint/Constants.java | 4 ++ .../definition/CartridgeDefinitionBean.java | 3 ++ .../cartridge/definition/LoadBalancerBean.java | 4 ++ .../bean/util/converter/PojoConverter.java | 2 + .../rest/endpoint/services/ServiceUtils.java | 54 +++++++++++++++++--- .../rest/endpoint/services/StratosAdmin.java | 3 +- 6 files changed, 61 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java index c3ea68f..033560e 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/Constants.java @@ -25,4 +25,8 @@ public class Constants { public static final String SUPER_TENANT_SERVICE = "super.tenant.service"; public static final String IS_LOAD_BALANCER = "load.balancer"; + public static final String SERVICE_AWARE_LOAD_BALANCER = "service.aware.load.balancer"; + public static final String DEFAULT_LOAD_BALANCER = "default.load.balancer"; + public static final String NO_LOAD_BALANCER = "no.load.balancer"; + public static final String EXISTING_LOAD_BALANCERS = "existing.load.balancers"; } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java index 318e347..7984b5f 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/CartridgeDefinitionBean.java @@ -20,6 +20,7 @@ package org.apache.stratos.rest.endpoint.bean.cartridge.definition; import javax.xml.bind.annotation.XmlRootElement; + import java.util.List; @XmlRootElement(name = "cartridgeDefinitionBean") @@ -48,6 +49,8 @@ public class CartridgeDefinitionBean { public LoadBalancerBean loadBalancer; public List<PropertyBean> property; + + public String defaultAutoscalingPolicy; public String toString () { http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java index c21c867..8fbddcc 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/cartridge/definition/LoadBalancerBean.java @@ -26,6 +26,10 @@ import java.util.List; public class LoadBalancerBean { public String type; + + public String deploymentPolicy; + + public String autoscalingPolicy; public List<PropertyBean> property; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java index 21e5247..3290981 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java @@ -46,6 +46,8 @@ public class PojoConverter { cartridgeConfig.setMultiTenant(cartridgeDefinitionBean.multiTenant); cartridgeConfig.setDisplayName(cartridgeDefinitionBean.displayName); cartridgeConfig.setDescription(cartridgeDefinitionBean.description); + cartridgeConfig.setDefaultAutoscalingPolicy(cartridgeDefinitionBean.defaultAutoscalingPolicy); + //deployment information if(cartridgeDefinitionBean.deployment != null) { cartridgeConfig.setBaseDir(cartridgeDefinitionBean.deployment.baseDir); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java index 68469ac..85da05e 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java @@ -40,6 +40,7 @@ import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; import org.apache.stratos.cloud.controller.pojo.LoadbalancerConfig; import org.apache.stratos.cloud.controller.pojo.Properties; import org.apache.stratos.rest.endpoint.Constants; +import org.apache.stratos.rest.endpoint.bean.CartridgeInfoBean; import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition; import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.PartitionGroup; import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.AutoscalePolicy; @@ -54,6 +55,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Random; import java.util.Set; import java.util.regex.Pattern; @@ -61,11 +63,14 @@ public class ServiceUtils { private static Log log = LogFactory.getLog(StratosAdmin.class); private static CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager(); - static void deployCartridge (CartridgeDefinitionBean cartridgeDefinitionBean) throws RestAPIException { + static void deployCartridge (CartridgeDefinitionBean cartridgeDefinitionBean, ConfigurationContext ctxt, + String userName, String tenantDomain) throws RestAPIException { log.info("***** " + cartridgeDefinitionBean.toString() + " *****"); + AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + if (cloudControllerServiceClient != null) { CartridgeConfig cartridgeConfig = PojoConverter.populateCartridgeConfigPojo(cartridgeDefinitionBean); @@ -111,6 +116,9 @@ public class ServiceUtils { return; } + // retrieve lb Cartridge info + CartridgeInfo cartridgeInfo = cloudControllerServiceClient.getCartridgeInfo(lbConfig.getType()); + properties = lbConfig.getProperties(); for (org.apache.stratos.cloud.controller.pojo.Property prop : @@ -136,8 +144,6 @@ public class ServiceUtils { String[] clusterIds = clusterIdsVal.split(","); for (String clusterId : clusterIds) { - AutoscalerServiceClient autoscalerServiceClient = - getAutoscalerServiceClient(); if (autoscalerServiceClient != null) { try { autoscalerServiceClient.checkLBExistence(clusterId); @@ -147,6 +153,7 @@ public class ServiceUtils { } } } + return; } else if (Constants.DEFAULT_LOAD_BALANCER.equals(prop.getName())) { if ("true".equals(prop.getValue())) { @@ -154,8 +161,6 @@ public class ServiceUtils { log.debug("This cartridge uses default load balancer. " + "[Type] " + cartridgeType); } - AutoscalerServiceClient autoscalerServiceClient = - getAutoscalerServiceClient(); if (autoscalerServiceClient != null) { try { // get the valid policies of this cartridge @@ -168,7 +173,10 @@ public class ServiceUtils { intersection(cartridgeDepPolicies, lbCartridgeDepPolicies); for (DeploymentPolicy deploymentPolicy : validDepPolicies) { - subscribe(cartridgeType, alias, policy, repoURL, privateRepo, repoUsername, repoPassword, dataCartridgeType, dataCartridgeAlias, configurationContext, userName, tenantDomain) + String alias = "lb"+new Random().nextInt(); + subscribe(cartridgeType, alias, cartridgeInfo.getDefaultAutoscalingPolicy(), + deploymentPolicy.getId(), null, false, null, null, null, null, + ctxt, userName, tenantDomain); } } catch (Exception ex) { @@ -177,7 +185,37 @@ public class ServiceUtils { } } return; - } + } else if (Constants.SERVICE_AWARE_LOAD_BALANCER.equals(prop.getName())) { + if ("true".equals(prop.getValue())) { + if (log.isDebugEnabled()) { + log.debug("This cartridge uses a service aware load balancer. " + + "[Type] " + cartridgeType); + } + if (autoscalerServiceClient != null) { + try { + // get the valid policies of this cartridge + DeploymentPolicy[] cartridgeDepPolicies = + autoscalerServiceClient.getDeploymentPolicies(cartridgeType); + DeploymentPolicy[] lbCartridgeDepPolicies = + autoscalerServiceClient.getDeploymentPolicies(lbConfig.getType()); + // valid deployment policies for this cartridge + DeploymentPolicy[] validDepPolicies = + intersection(cartridgeDepPolicies, lbCartridgeDepPolicies); + + for (DeploymentPolicy deploymentPolicy : validDepPolicies) { + String alias = "lb"+new Random().nextInt(); + subscribe(cartridgeType, alias, cartridgeInfo.getDefaultAutoscalingPolicy(), + deploymentPolicy.getId(), null, false, null, null, null, null, + ctxt, userName, tenantDomain); + } + + } catch (Exception ex) { + // we don't need to throw the error here. + log.error(ex.getMessage(), ex); + } + } + return; + } } } @@ -205,7 +243,7 @@ public class ServiceUtils { } return commonPolicies.toArray(new DeploymentPolicy[0]); } - + static void undeployCartridge (String cartridgeType) throws RestAPIException { CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/7808ff37/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java index 54e4845..4c87cc7 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java @@ -77,7 +77,8 @@ public class StratosAdmin extends AbstractAdmin { public void deployCartridgeDefinition (CartridgeDefinitionBean cartridgeDefinitionBean) throws RestAPIException { - ServiceUtils.deployCartridge(cartridgeDefinitionBean); + ServiceUtils.deployCartridge(cartridgeDefinitionBean, getConfigContext(), getUsername(), + getTenantDomain()); } @DELETE
