Updated Branches: refs/heads/master 8d995e243 -> cc4f6946e
initial service deployment implementation Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/cc4f6946 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/cc4f6946 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/cc4f6946 Branch: refs/heads/master Commit: cc4f6946e9dfc4054bd07f8205098281e50634fe Parents: 8d995e2 Author: Isuru <[email protected]> Authored: Sun Dec 15 13:07:42 2013 +0530 Committer: Isuru <[email protected]> Committed: Sun Dec 15 13:07:42 2013 +0530 ---------------------------------------------------------------------- .../stratos/adc/mgt/deploy/service/Service.java | 137 +++++++++++++++++++ .../service/ServiceDeploymentManager.java | 107 +++++++++++++++ .../service/multitenant/MultiTenantService.java | 52 +++++++ .../manager/CartridgeSubscriptionManager.java | 15 +- .../stratos/adc/mgt/payload/PayloadFactory.java | 7 +- .../subscription/DataCartridgeSubscription.java | 2 +- .../utils/CartridgeSubscriptionUtils.java | 31 ++++- 7 files changed, 336 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/cc4f6946/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/Service.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/Service.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/Service.java new file mode 100644 index 0000000..4b1cad3 --- /dev/null +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/Service.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.stratos.adc.mgt.deploy.service; + +import org.apache.stratos.adc.mgt.exception.ADCException; +import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException; +import org.apache.stratos.adc.mgt.payload.PayloadData; +import org.apache.stratos.adc.mgt.subscription.utils.CartridgeSubscriptionUtils; +import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; + +import java.io.Serializable; + +public abstract class Service implements Serializable { + + private String type; + private String autoscalingPolicyName; + private String deploymentPolicyName; + private String tenantRange; + private String clusterId; + private String hostName; + private int tenantId; + private String subscriptionKey; + private CartridgeInfo cartridgeInfo; + private PayloadData payloadData; + + public Service (String type, String autoscalingPolicyName, String deploymentPolicyName, int tenantId, CartridgeInfo cartridgeInfo) { + + this.type = type; + this.autoscalingPolicyName = autoscalingPolicyName; + this.deploymentPolicyName = deploymentPolicyName; + this.tenantId = tenantId; + this.cartridgeInfo = cartridgeInfo; + this.tenantRange = "*"; + this.subscriptionKey = CartridgeSubscriptionUtils.generateSubscriptionKey(); + } + + public abstract void deploy () throws ADCException, UnregisteredCartridgeException; + + public abstract void undeploy (String clusterId) throws ADCException; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getAutoscalingPolicyName() { + return autoscalingPolicyName; + } + + public void setAutoscalingPolicyName(String autoscalingPolicyName) { + this.autoscalingPolicyName = autoscalingPolicyName; + } + + public String getDeploymentPolicyName() { + return deploymentPolicyName; + } + + public void setDeploymentPolicyName(String deploymentPolicyName) { + this.deploymentPolicyName = deploymentPolicyName; + } + + public String getTenantRange() { + return tenantRange; + } + + public void setTenantRange(String tenantRange) { + this.tenantRange = tenantRange; + } + + public String getClusterId() { + return clusterId; + } + + public void setClusterId(String clusterId) { + this.clusterId = clusterId; + } + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public int getTenantId() { + return tenantId; + } + + public void setTenantId(int tenantId) { + this.tenantId = tenantId; + } + + public CartridgeInfo getCartridgeInfo() { + return cartridgeInfo; + } + + public void setCartridgeInfo(CartridgeInfo cartridgeInfo) { + this.cartridgeInfo = cartridgeInfo; + } + + public String getSubscriptionKey() { + return subscriptionKey; + } + + public void setSubscriptionKey(String subscriptionKey) { + this.subscriptionKey = subscriptionKey; + } + + public PayloadData getPayloadData() { + return payloadData; + } + + public void setPayloadData(PayloadData payloadData) { + this.payloadData = payloadData; + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/cc4f6946/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/ServiceDeploymentManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/ServiceDeploymentManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/ServiceDeploymentManager.java new file mode 100644 index 0000000..5a0297f --- /dev/null +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/ServiceDeploymentManager.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.stratos.adc.mgt.deploy.service; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient; +import org.apache.stratos.adc.mgt.deploy.service.multitenant.MultiTenantService; +import org.apache.stratos.adc.mgt.exception.ADCException; +import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException; +import org.apache.stratos.adc.mgt.payload.BasicPayloadData; +import org.apache.stratos.adc.mgt.payload.PayloadData; +import org.apache.stratos.adc.mgt.payload.PayloadFactory; +import org.apache.stratos.adc.mgt.subscription.utils.CartridgeSubscriptionUtils; +import org.apache.stratos.adc.mgt.utils.CartridgeConstants; +import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; +import org.apache.stratos.cloud.controller.pojo.Property; + +public class ServiceDeploymentManager { + + private static Log log = LogFactory.getLog(ServiceDeploymentManager.class); + + public Service deployService (String type, String autoscalingPolicyName, String deploymentPolicyName, int tenantId) + throws ADCException, UnregisteredCartridgeException { + + //get deployed Cartridge Definition information + CartridgeInfo cartridgeInfo; + try { + cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(type); + + } catch (UnregisteredCartridgeException e) { + String message = type + " is not a valid cartridgeSubscription type. Please try again with a valid cartridgeSubscription type."; + log.error(message); + throw e; + + } catch (Exception e) { + String message = "Error getting info for " + type; + log.error(message, e); + throw new ADCException(message, e); + } + + if (!cartridgeInfo.getMultiTenant()) { + String errorMsg = "Cartridge definition with type " + type + " is not multitenant"; + log.error(errorMsg); + throw new ADCException(errorMsg); + } + + Service service = new MultiTenantService(type, autoscalingPolicyName, deploymentPolicyName, tenantId, cartridgeInfo); + + //generate the cluster ID (domain)for the service + service.setClusterId(type + "." + cartridgeInfo.getHostName() + ".domain"); + //host name is the hostname defined in cartridge definition + service.setHostName(cartridgeInfo.getHostName()); + + //Create payload + BasicPayloadData basicPayloadData = CartridgeSubscriptionUtils.createBasicPayload(service); + PayloadData payloadData = PayloadFactory.getPayloadDataInstance(cartridgeInfo.getProvider(), + cartridgeInfo.getType(), basicPayloadData); + + // get the payload parameters defined in the cartridge definition file for this cartridge type + if (cartridgeInfo.getProperties() != null && cartridgeInfo.getProperties().length != 0) { + + for (Property property : cartridgeInfo.getProperties()) { + // check if a property is related to the payload. Currently this is done by checking if the + // property name starts with 'payload_parameter.' suffix. If so the payload param name will + // be taken as the substring from the index of '.' to the end of the property name. + if (property.getName() + .startsWith(CartridgeConstants.CUSTOM_PAYLOAD_PARAM_NAME_PREFIX)) { + String payloadParamName = property.getName(); + payloadData.add(payloadParamName.substring(payloadParamName.indexOf(".") + 1), property.getValue()); + } + } + } + + //set PayloadData instance + service.setPayloadData(payloadData); + + //deploy the service + service.deploy(); + + //TODO: persist Service + + return service; + } + + public void undeployService (String clusterId) { + + //TODO: + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/cc4f6946/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/multitenant/MultiTenantService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/multitenant/MultiTenantService.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/multitenant/MultiTenantService.java new file mode 100644 index 0000000..2a3b07d --- /dev/null +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/deploy/service/multitenant/MultiTenantService.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.stratos.adc.mgt.deploy.service.multitenant; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.stratos.adc.mgt.deploy.service.Service; +import org.apache.stratos.adc.mgt.exception.ADCException; +import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException; +import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil; +import org.apache.stratos.adc.mgt.utils.CartridgeConstants; +import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; + +public class MultiTenantService extends Service { + + private static Log log = LogFactory.getLog(MultiTenantService.class); + + public MultiTenantService (String type, String autoscalingPolicyName, String deploymentPolicyName, int tenantId, CartridgeInfo cartridgeInfo) { + super(type, autoscalingPolicyName, deploymentPolicyName, tenantId, cartridgeInfo); + } + + @Override + public void deploy() throws ADCException, UnregisteredCartridgeException { + + //register the service + ApplicationManagementUtil.registerService(getType(), getClusterId(), CartridgeConstants.DEFAULT_SUBDOMAIN, + getPayloadData().getCompletePayloadData(), getTenantRange(), getHostName(), getAutoscalingPolicyName(), + getDeploymentPolicyName(), null); + } + + @Override + public void undeploy(String clusterId) throws ADCException { + + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/cc4f6946/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java index c124af8..8e1d454 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/manager/CartridgeSubscriptionManager.java @@ -20,7 +20,6 @@ package org.apache.stratos.adc.mgt.manager; import org.apache.axis2.AxisFault; -import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient; @@ -157,8 +156,7 @@ public class CartridgeSubscriptionManager { getCartridgeSubscriptionInstance(cartridgeInfo, tenancyBehaviour); //Create repository - Repository repository = - cartridgeSubscription.manageRepository(repositoryURL, + Repository repository = cartridgeSubscription.manageRepository(repositoryURL, repositoryUsername, repositoryPassword, isPrivateRepository, @@ -171,7 +169,7 @@ public class CartridgeSubscriptionManager { //create subscription cartridgeSubscription.createSubscription(subscriber, cartridgeAlias, autoscalingPolicyName, deploymentPolicyName, repository); - cartridgeSubscription.setSubscriptionKey(generateSubscriptionKey()); // TODO ---- fix + cartridgeSubscription.setSubscriptionKey(CartridgeSubscriptionUtils.generateSubscriptionKey()); // TODO ---- fix // properly log.info("Tenant [" + tenantId + "] with username [" + tenantAdminUsername + @@ -180,7 +178,7 @@ public class CartridgeSubscriptionManager { autoscalingPolicyName); //Create the payload - BasicPayloadData basicPayloadData = CartridgeSubscriptionUtils.getBasicPayloadData(cartridgeSubscription); + BasicPayloadData basicPayloadData = CartridgeSubscriptionUtils.createBasicPayload(cartridgeSubscription); PayloadData payloadData = PayloadFactory.getPayloadDataInstance(cartridgeInfo.getProvider(), cartridgeInfo.getType(), basicPayloadData); @@ -535,11 +533,4 @@ public class CartridgeSubscriptionManager { return cartridgeSubscription; } - - - private String generateSubscriptionKey() { - String key = RandomStringUtils.randomAlphanumeric(16); - log.info("Generated key : " + key); // TODO -- remove the log - return key; - } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/cc4f6946/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadFactory.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadFactory.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadFactory.java index 9370fe8..e15b6bc 100755 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadFactory.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/PayloadFactory.java @@ -22,6 +22,7 @@ package org.apache.stratos.adc.mgt.payload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.adc.mgt.exception.ADCException; +import org.apache.stratos.adc.mgt.utils.CartridgeConstants; public class PayloadFactory { @@ -43,7 +44,11 @@ public class PayloadFactory { PayloadData payloadData = null; //TODO: fix after adding the property Category to Cartridge Definition - payloadData = new FramewrokCartridgePayloadData(basicPayloadData); + if (cartridgeProvider.equals(CartridgeConstants.DATA_CARTRIDGE_PROVIDER)) { + payloadData = new DataCartridgePayloadData(basicPayloadData); + } else { + payloadData = new FramewrokCartridgePayloadData(basicPayloadData); + } if(payloadData == null) { throw new ADCException("Unable to find matching payload for cartridge type " + cartridgeType + http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/cc4f6946/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java index 53b7ae6..a38e609 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java @@ -50,7 +50,7 @@ public class DataCartridgeSubscription extends CartridgeSubscription { super(cartridgeInfo, subscriptionTenancyBehaviour); setHost("localhost"); setUsername("root"); - setPassword("root"); + setPassword(ApplicationManagementUtil.generatePassword()); } @Override http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/cc4f6946/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java index dbd7b43..5983ece 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java @@ -19,13 +19,19 @@ package org.apache.stratos.adc.mgt.subscription.utils; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.stratos.adc.mgt.deploy.service.Service; import org.apache.stratos.adc.mgt.payload.BasicPayloadData; import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription; import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; public class CartridgeSubscriptionUtils { - public static BasicPayloadData getBasicPayloadData (CartridgeSubscription cartridgeSubscription) { + private static Log log = LogFactory.getLog(CartridgeSubscriptionUtils.class); + + public static BasicPayloadData createBasicPayload (CartridgeSubscription cartridgeSubscription) { BasicPayloadData basicPayloadData = new BasicPayloadData(); basicPayloadData.setApplicationPath(cartridgeSubscription.getCartridgeInfo().getBaseDir()); @@ -51,6 +57,23 @@ public class CartridgeSubscriptionUtils { return basicPayloadData; } + public static BasicPayloadData createBasicPayload (Service service) { + + BasicPayloadData basicPayloadData = new BasicPayloadData(); + basicPayloadData.setApplicationPath(service.getCartridgeInfo().getBaseDir()); + basicPayloadData.setSubscriptionKey(service.getSubscriptionKey()); + basicPayloadData.setClusterId(service.getClusterId()); + basicPayloadData.setDeployment("default");//currently hard coded to default + basicPayloadData.setHostName(service.getHostName()); + basicPayloadData.setMultitenant("true"); + basicPayloadData.setPortMappings(createPortMappingPayloadString(service.getCartridgeInfo())); + basicPayloadData.setServiceName(service.getType()); + basicPayloadData.setTenantId(service.getTenantId()); + basicPayloadData.setTenantRange("*"); + + return basicPayloadData; + } + private static String createPortMappingPayloadString (CartridgeInfo cartridgeInfo) { // port mappings @@ -66,4 +89,10 @@ public class CartridgeSubscriptionUtils { return portMappingString; } + + public static String generateSubscriptionKey() { + String key = RandomStringUtils.randomAlphanumeric(16); + log.info("Generated key : " + key); // TODO -- remove the log + return key; + } }
