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);
