You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ga...@apache.org on 2015/01/25 18:59:26 UTC

[2/2] stratos git commit: Add put http method to update cartridges

Add put http method to update cartridges


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/aa6e3e10
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/aa6e3e10
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/aa6e3e10

Branch: refs/heads/master
Commit: aa6e3e1053ea82409c71dcb89fdd766f9beca602
Parents: e4c0dc7
Author: Gayan Gunarathne <ga...@wso2.com>
Authored: Sun Jan 25 23:14:12 2015 +0530
Committer: Gayan Gunarathne <ga...@wso2.com>
Committed: Sun Jan 25 23:27:55 2015 +0530

----------------------------------------------------------------------
 .../CartridgeDefinitionNotExistsException.java  |  44 ++
 .../services/CloudControllerService.java        |  11 +
 .../impl/CloudControllerServiceImpl.java        |  54 ++
 .../client/CloudControllerServiceClient.java    |   7 +
 .../rest/endpoint/api/StratosApiV41.java        |  19 +
 .../rest/endpoint/api/StratosApiV41Utils.java   |  31 +
 .../main/resources/CloudControllerService.wsdl  | 785 ++++++++++---------
 7 files changed, 592 insertions(+), 359 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/aa6e3e10/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/CartridgeDefinitionNotExistsException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/CartridgeDefinitionNotExistsException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/CartridgeDefinitionNotExistsException.java
new file mode 100644
index 0000000..c16e15a
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/CartridgeDefinitionNotExistsException.java
@@ -0,0 +1,44 @@
+/*
+ * 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.cloud.controller.exception;
+
+public class CartridgeDefinitionNotExistsException extends Exception {
+
+    private static final long serialVersionUID = -6326227079367867222L;
+    private String message;
+
+    public CartridgeDefinitionNotExistsException(String msg) {
+        super(msg);
+        this.setMessage(msg);
+    }
+
+    public CartridgeDefinitionNotExistsException(String msg, Exception ex) {
+        super(msg, ex);
+        this.setMessage(msg);
+    }
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/aa6e3e10/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
index 1bbcdf7..a0650b8 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
@@ -41,6 +41,17 @@ public interface CloudControllerService {
 	 */
     void addCartridge(CartridgeConfig cartridgeConfig)
             throws InvalidCartridgeDefinitionException, InvalidIaasProviderException, CartridgeAlreadyExistsException;
+
+	/**
+	 * Update a cartridge
+	 * @param cartridgeConfig
+	 * @throws InvalidCartridgeDefinitionException
+	 * @throws InvalidIaasProviderException
+	 * @throws org.apache.stratos.cloud.controller.exception.CartridgeDefinitionNotExistsException
+	 */
+	public void updateCartridge(CartridgeConfig cartridgeConfig) throws InvalidCartridgeDefinitionException,
+	                                                             InvalidIaasProviderException,
+	                                                             CartridgeDefinitionNotExistsException;
     
     /**
      * Remove a cartridge

http://git-wip-us.apache.org/repos/asf/stratos/blob/aa6e3e10/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
index b537039..c0259a9 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
@@ -108,6 +108,60 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         }
     }
 
+	@Override
+	public void updateCartridge(CartridgeConfig cartridgeConfig) throws InvalidCartridgeDefinitionException,
+	                                                                    InvalidIaasProviderException,
+	                                                                    CartridgeDefinitionNotExistsException {
+
+		handleNullObject(cartridgeConfig, "Cartridge definition is null");
+
+		if (log.isInfoEnabled()) {
+			log.info("Adding cartridge: [cartridge-type] " + cartridgeConfig.getType());
+		}
+		if (log.isDebugEnabled()) {
+			log.debug("Cartridge definition: " + cartridgeConfig.toString());
+		}
+
+		Cartridge cartridge = null;
+		try {
+			cartridge = CloudControllerUtil.toCartridge(cartridgeConfig);
+		} catch (Exception e) {
+			String msg = "Invalid cartridge definition: [cartridge-type] " + cartridgeConfig.getType();
+			log.error(msg, e);
+			throw new InvalidCartridgeDefinitionException(msg, e);
+		}
+
+		// TODO transaction begins
+		String cartridgeType = cartridge.getType();
+		// Undeploy if already deployed
+		if (cloudControllerContext.getCartridge(cartridgeType) != null) {
+			Cartridge cartridgeToBeRemoved = cloudControllerContext.getCartridge(cartridgeType);
+			// undeploy
+			try {
+				removeCartridge(cartridgeToBeRemoved.getType());
+			} catch (InvalidCartridgeTypeException ignore) {
+			}
+			copyIaasProviders(cartridge, cartridgeToBeRemoved);
+		}
+		else{
+			throw new CartridgeDefinitionNotExistsException("This cartridge definition not exists");
+		}
+
+		// Add cartridge to the cloud controller context and persist
+		CloudControllerContext.getInstance().addCartridge(cartridge);
+		CloudControllerContext.getInstance().persist();
+
+		List<Cartridge> cartridgeList = new ArrayList<Cartridge>();
+		cartridgeList.add(cartridge);
+
+		TopologyBuilder.handleServiceCreated(cartridgeList);
+		// transaction ends
+
+		if (log.isInfoEnabled()) {
+			log.info("Successfully added cartridge: [cartridge-type] " + cartridgeType);
+		}
+	}
+
     private void copyIaasProviders(Cartridge destCartridge,
                                    Cartridge sourceCartridge) {
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/aa6e3e10/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java
index ee63797..9c387dd 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/CloudControllerServiceClient.java
@@ -85,6 +85,13 @@ public class CloudControllerServiceClient {
 		stub.addCartridge(cartridgeConfig);
 	}
 
+	public void updateCartridge(CartridgeConfig cartridgeConfig)
+			throws RemoteException, CloudControllerServiceInvalidCartridgeDefinitionExceptionException,
+			       CloudControllerServiceInvalidIaasProviderExceptionException,
+			       CloudControllerServiceCartridgeDefinitionNotExistsExceptionException {
+		stub.updateCartridge(cartridgeConfig);
+	}
+
     public void removeCartridge(String cartridgeType) throws RemoteException, CloudControllerServiceInvalidCartridgeTypeExceptionException {
 		stub.removeCartridge(cartridgeType);
 	}

http://git-wip-us.apache.org/repos/asf/stratos/blob/aa6e3e10/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 35145f4..aeef4c2 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -153,6 +153,25 @@ public class StratosApiV41 extends AbstractApi {
         return Response.created(url).build();
     }
 
+	/**
+	 * Updates the cartridge definition.
+	 *
+	 * @param cartridgeDefinitionBean the cartridge definition bean
+	 * @return the response
+	 * @throws RestAPIException the rest api exception
+	 */
+	@PUT
+	@Path("/cartridges")
+	@Produces("application/json")
+	@Consumes("application/json")
+	@AuthorizationAction("/permission/admin/manage/add/cartridgeDefinition")
+	public Response updateCartridge(CartridgeBean cartridgeDefinitionBean)
+			throws RestAPIException {
+		StratosApiV41Utils.updateCartridge(cartridgeDefinitionBean);
+		URI url = uriInfo.getAbsolutePathBuilder().path(cartridgeDefinitionBean.getType()).build();
+		return Response.created(url).build();
+
+	}
     /**
      * Gets all available cartridges.
      *

http://git-wip-us.apache.org/repos/asf/stratos/blob/aa6e3e10/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index 5330036..ccbd306 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -116,6 +116,36 @@ public class StratosApiV41Utils {
         }
     }
 
+	public static void updateCartridge(CartridgeBean cartridgeDefinition) throws RestAPIException {
+
+		try {
+			if (log.isDebugEnabled()) {
+				log.debug(String.format("Adding cartridge: [cartridge-type] %s ", cartridgeDefinition.getType()));
+			}
+
+			CartridgeConfig cartridgeConfig =
+					ObjectConverter.convertCartridgeBeanToStubCartridgeConfig(cartridgeDefinition);
+			if (cartridgeConfig == null) {
+				throw new RestAPIException("Could not read cartridge definition, cartridge deployment failed");
+			}
+			if (StringUtils.isEmpty(cartridgeConfig.getCategory())) {
+				throw new RestAPIException(String.format("Category is not specified in cartridge: [cartridge-type] %s",
+				                                         cartridgeConfig.getType()));
+			}
+			CloudControllerServiceClient cloudControllerServiceClient = CloudControllerServiceClient.getInstance();
+			cloudControllerServiceClient.updateCartridge(cartridgeConfig);
+
+			if (log.isDebugEnabled()) {
+				log.debug(String.format("Successfully added cartridge: [cartridge-type] %s ",
+				                        cartridgeDefinition.getType()));
+			}
+		} catch (Exception e) {
+			String msg = "Could not add cartridge";
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		}
+	}
+
     public static void removeCartridge(String cartridgeType) throws RestAPIException {
 
         try {
@@ -1604,4 +1634,5 @@ public class StratosApiV41Utils {
             throw new RuntimeException(message, e);
         }
     }
+
 }