Update the add cartridge method with tenant isolation

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

Branch: refs/heads/tenant-isolation
Commit: ae7d1582c019707238fa9eda131f70806cd8d2ad
Parents: 0293c84
Author: Gayan Gunarathne <[email protected]>
Authored: Mon Jul 6 17:01:00 2015 +0530
Committer: Gayan Gunarathne <[email protected]>
Committed: Mon Jul 6 17:01:00 2015 +0530

----------------------------------------------------------------------
 .../context/CloudControllerContext.java         |   2 +-
 .../cloud/controller/domain/Cartridge.java      |  18 +
 .../impl/CloudControllerServiceImpl.java        |  92 +-
 .../common/beans/cartridge/CartridgeBean.java   |  18 +
 .../rest/endpoint/api/StratosApiV41.java        |   8 +-
 .../rest/endpoint/api/StratosApiV41Utils.java   |   9 +-
 .../main/resources/CloudControllerService.wsdl  | 896 ++++++++++---------
 7 files changed, 551 insertions(+), 492 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/ae7d1582/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
index b223167..58cfb03 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
@@ -283,7 +283,7 @@ public class CloudControllerContext implements Serializable 
{
     }
 
     public void addCartridge(Cartridge cartridge) {
-        cartridgeTypeToCartridgeMap.put(cartridge.getType(), cartridge);
+        cartridgeTypeToCartridgeMap.put(cartridge.getUuid(), cartridge);
     }
 
     public void addNetworkPartition(NetworkPartition networkPartition) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/ae7d1582/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
index 27b84be..a9fcc11 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
@@ -37,6 +37,7 @@ public class Cartridge implements Serializable {
     private transient static final Log log = 
LogFactory.getLog(Cartridge.class);
     private static final long serialVersionUID = 6637409027085059072L;
 
+       private String uuid;
     private String type;
     private String hostName;
     private String provider;
@@ -52,6 +53,7 @@ public class Cartridge implements Serializable {
     private AppType[] appTypeMappings;
     private String loadBalancingIPType;
     private String[] metadataKeys;
+       private int tenantId;
 
     private boolean isPublic;
 
@@ -305,4 +307,20 @@ public class Cartridge implements Serializable {
                 + ", properties=" + properties
                 + "]";
     }
+
+       public String getUuid() {
+               return uuid;
+       }
+
+       public void setUuid(String uuid) {
+               this.uuid = uuid;
+       }
+
+       public int getTenantId() {
+               return tenantId;
+       }
+
+       public void setTenantId(int tenantId) {
+               this.tenantId = tenantId;
+       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/ae7d1582/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 0e754c8..13aa76f 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
@@ -69,47 +69,57 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
 
     }
 
-    public boolean addCartridge(Cartridge cartridgeConfig) throws 
InvalidCartridgeDefinitionException,
-            InvalidIaasProviderException, CartridgeAlreadyExistsException {
-
-        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());
-        }
-
-        try {
-            
CloudControllerUtil.extractIaaSProvidersFromCartridge(cartridgeConfig);
-        } catch (Exception e) {
-            String message = "Invalid cartridge definition: [cartridge-type] " 
+ cartridgeConfig.getType();
-            log.error(message, e);
-            throw new InvalidCartridgeDefinitionException(message, e);
-        }
-
-        String cartridgeType = cartridgeConfig.getType();
-        if (cloudControllerContext.getCartridge(cartridgeType) != null) {
-            String message = "Cartridge already exists: [cartridge-type] " + 
cartridgeType;
-            log.error(message);
-            throw new CartridgeAlreadyExistsException(message);
-        }
-
-        // Add cartridge to the cloud controller context and persist
-        CloudControllerContext.getInstance().addCartridge(cartridgeConfig);
-        CloudControllerContext.getInstance().persist();
-
-        List<Cartridge> cartridgeList = new ArrayList<Cartridge>();
-        cartridgeList.add(cartridgeConfig);
-
-        TopologyBuilder.handleServiceCreated(cartridgeList);
-
-        if (log.isInfoEnabled()) {
-            log.info("Successfully added cartridge: [cartridge-type] " + 
cartridgeType);
-        }
-        return true;
-    }
+       public boolean addCartridge(Cartridge cartridgeConfig) throws 
InvalidCartridgeDefinitionException,
+                                                                     
InvalidIaasProviderException,
+                                                                     
CartridgeAlreadyExistsException {
+
+               handleNullObject(cartridgeConfig, "Cartridge definition is 
null");
+               handleNullObject(cartridgeConfig.getUuid(), "Cartridge 
definition UUID is null");
+
+               if (log.isInfoEnabled()) {
+                       log.info(String.format("Adding cartridge: 
[cartridge-uuid] %s [cartridge-type] %s [tenant id] %d ",
+                                              cartridgeConfig.getUuid(), 
cartridgeConfig.getType(),
+                                              cartridgeConfig.getTenantId()));
+               }
+               if (log.isDebugEnabled()) {
+                       log.debug("Cartridge definition: " + 
cartridgeConfig.toString());
+               }
+
+               try {
+                       
CloudControllerUtil.extractIaaSProvidersFromCartridge(cartridgeConfig);
+               } catch (Exception e) {
+                       String message = String.format("Invalid cartridge 
definition: [cartridge-uuid] %s [cartridge-type] %s",
+                                                      " [tenant-id] ", 
cartridgeConfig.getUuid(), cartridgeConfig.getType(),
+                                                      
cartridgeConfig.getTenantId());
+                       log.error(message, e);
+                       throw new InvalidCartridgeDefinitionException(message, 
e);
+               }
+
+               String cartridgeUuid = cartridgeConfig.getUuid();
+               Cartridge existingCartridge = 
cloudControllerContext.getCartridge(cartridgeUuid);
+               if (existingCartridge != null) {
+                       String message = String.format(
+                                       "Cartridge already exists: 
[cartridge-uuid] %s [cartridge-type] %s [tenant id] %d ", cartridgeUuid,
+                                       existingCartridge.getType(), 
existingCartridge.getTenantId());
+                       log.error(message);
+                       throw new CartridgeAlreadyExistsException(message);
+               }
+
+               // Add cartridge to the cloud controller context and persist
+               
CloudControllerContext.getInstance().addCartridge(cartridgeConfig);
+               CloudControllerContext.getInstance().persist();
+
+               List<Cartridge> cartridgeList = new ArrayList<Cartridge>();
+               cartridgeList.add(cartridgeConfig);
+
+               TopologyBuilder.handleServiceCreated(cartridgeList);
+
+               if (log.isInfoEnabled()) {
+                       log.info(String.format("Successfully added cartridge: 
[cartridge-type] %s [tenant-id] %d ",
+                                              cartridgeConfig.getType(), 
cartridgeConfig.getTenantId()));
+               }
+               return true;
+       }
 
     @Override
     public boolean updateCartridge(Cartridge cartridge) throws 
InvalidCartridgeDefinitionException,

http://git-wip-us.apache.org/repos/asf/stratos/blob/ae7d1582/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/CartridgeBean.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/CartridgeBean.java
 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/CartridgeBean.java
index 482c566..b8afa84 100644
--- 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/CartridgeBean.java
+++ 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/CartridgeBean.java
@@ -27,6 +27,7 @@ import java.util.List;
 @XmlRootElement(name = "cartridgeBean")
 public class CartridgeBean {
 
+       private String uuid;
     private String type;
     private String provider;
     /**
@@ -48,6 +49,7 @@ public class CartridgeBean {
      */
     private String loadBalancingIPType;
     private List<PropertyBean> property;
+       private int tenantId;
 
     private String getDeploymentDetails() {
         if (getDeployment() != null) {
@@ -226,4 +228,20 @@ public class CartridgeBean {
     public void setMetadataKeys(List<String> metadataKeys) {
         this.metadataKeys = metadataKeys;
     }
+
+       public String getUuid() {
+               return uuid;
+       }
+
+       public void setUuid(String uuid) {
+               this.uuid = uuid;
+       }
+
+       public int getTenantId() {
+               return tenantId;
+       }
+
+       public void setTenantId(int tenantId) {
+               this.tenantId = tenantId;
+       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/ae7d1582/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 e07abaa..e9976be 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
@@ -283,6 +283,11 @@ public class StratosApiV41 extends AbstractApi {
             CartridgeBean cartridgeDefinitionBean) throws RestAPIException {
 
         String cartridgeType = cartridgeDefinitionBean.getType();
+           cartridgeDefinitionBean.setUuid(UUID.randomUUID().toString());
+
+           PrivilegedCarbonContext carbonContext = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
+           cartridgeDefinitionBean.setTenantId(carbonContext.getTenantId());
+
         CartridgeBean cartridgeBean = null;
         try {
             cartridgeBean = 
StratosApiV41Utils.getCartridgeForValidate(cartridgeType);
@@ -363,8 +368,9 @@ public class StratosApiV41 extends AbstractApi {
     public Response getCartridge(
             @PathParam("cartridgeType") String cartridgeType) throws 
RestAPIException {
         CartridgeBean cartridge;
+           PrivilegedCarbonContext carbonContext = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
         try {
-            cartridge = StratosApiV41Utils.getCartridge(cartridgeType);
+            cartridge = 
StratosApiV41Utils.getCartridge(cartridgeType,carbonContext.getTenantId());
             return Response.ok().entity(cartridge).build();
         } catch (RestAPIException e) {
             return Response.status(Response.Status.NOT_FOUND).entity(new 
ResponseMessageBean(

http://git-wip-us.apache.org/repos/asf/stratos/blob/ae7d1582/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 fbcad1c..1e14632 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
@@ -491,13 +491,18 @@ public class StratosApiV41Utils {
      * @return Cartridge details
      * @throws RestAPIException
      */
-    public static CartridgeBean getCartridge(String cartridgeType) throws 
RestAPIException {
+    public static CartridgeBean getCartridge(String cartridgeType,int 
tenantId) throws RestAPIException {
         try {
             Cartridge cartridgeInfo = 
CloudControllerServiceClient.getInstance().getCartridge(cartridgeType);
             if (cartridgeInfo == null) {
                 return null;
             }
-            return 
ObjectConverter.convertCartridgeToCartridgeDefinitionBean(cartridgeInfo);
+               if(cartridgeInfo.getTenantId()==tenantId) {
+                       return 
ObjectConverter.convertCartridgeToCartridgeDefinitionBean(cartridgeInfo);
+               }
+               else{
+                       return null;
+               }
         } catch (RemoteException e) {
             String message = e.getMessage();
             log.error(message);

Reply via email to