You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2013/12/15 08:38:44 UTC
git commit: initial service deployment implementation
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 <is...@wso2.com>
Authored: Sun Dec 15 13:07:42 2013 +0530
Committer: Isuru <is...@wso2.com>
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;
+ }
}