Deployment Policy validation in groups
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/5120d584 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/5120d584 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/5120d584 Branch: refs/heads/master Commit: 5120d58400d2d76d652727bf2e0e77e10e8d621c Parents: 4e97b3e Author: Pubudu Gunatilaka <[email protected]> Authored: Wed Jun 17 19:05:55 2015 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Thu Jun 18 16:50:44 2015 +0530 ---------------------------------------------------------------------- .../rest/endpoint/api/StratosApiV41Utils.java | 72 +++++++++++++++++++- .../single-group-app/artifacts/application.json | 2 - 2 files changed, 69 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/5120d584/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 7964e1c..2d79bb1 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 @@ -1540,6 +1540,7 @@ public class StratosApiV41Utils { private static void validateGroupAliasesInApplicationDefinition(ApplicationBean applicationDefinition) throws RestAPIException { ConcurrentHashMap<String, CartridgeGroupReferenceBean> groupsInApplicationDefinition = new ConcurrentHashMap<String, CartridgeGroupReferenceBean>(); + boolean groupParentHasDP = false; if ((applicationDefinition.getComponents().getGroups() != null) && (!applicationDefinition.getComponents().getGroups().isEmpty())) { @@ -1551,14 +1552,62 @@ public class StratosApiV41Utils { group.getAlias(); throw new RestAPIException(message); } + + // Validate top level group deployment policy with cartridges + if (group.getCartridges() != null) { + if (group.getDeploymentPolicy() != null) { + groupParentHasDP = true; + } + validateCartridgesForDeploymentPolicy(group.getCartridges(), groupParentHasDP); + } + groupsInApplicationDefinition.put(group.getAlias(), group); if (group.getGroups() != null) { //This is to validate the groups aliases recursively - validateGroupsRecursively(groupsInApplicationDefinition, group.getGroups()); + validateGroupsRecursively(groupsInApplicationDefinition, group.getGroups(), groupParentHasDP); + } + } + } + + if ((applicationDefinition.getComponents().getCartridges() != null) && + (!applicationDefinition.getComponents().getCartridges().isEmpty())) { + validateCartridgesForDeploymentPolicy(applicationDefinition.getComponents().getCartridges(), false); + } + + } + + /** + * This method validates cartridges in groups + * Deployment policy should not defined in cartridge if group has a deployment policy + * + * @param cartridgeReferenceBeans - Cartridges in a group + * @throws RestAPIException + */ + private static void validateCartridgesForDeploymentPolicy(List<CartridgeReferenceBean> cartridgeReferenceBeans, + boolean hasDP) throws RestAPIException { + + if (hasDP) { + for (CartridgeReferenceBean cartridge : cartridgeReferenceBeans) { + if (cartridge.getSubscribableInfo().getDeploymentPolicy() != null) { + String message = "Group deployment policy already exists. Remove deployment policy from " + + "cartridge subscription : [cartridge] " + cartridge.getSubscribableInfo().getAlias(); + throw new RestAPIException(message); + } + } + } else { + for (CartridgeReferenceBean cartridge : cartridgeReferenceBeans) { + if (cartridge.getSubscribableInfo().getDeploymentPolicy() == null) { + String message = String.format("Deployment policy is not defined for cartridge [cartridge] %s." + + "It has not inherited any deployment policies.", + cartridge.getSubscribableInfo().getAlias()); + throw new RestAPIException(message); } } + } + + } /** @@ -1570,17 +1619,34 @@ public class StratosApiV41Utils { */ private static void validateGroupsRecursively(ConcurrentHashMap<String, CartridgeGroupReferenceBean> groupsSet, - Collection<CartridgeGroupReferenceBean> groups) throws RestAPIException { + Collection<CartridgeGroupReferenceBean> groups, boolean hasDP) + throws RestAPIException { + for (CartridgeGroupReferenceBean group : groups) { if (groupsSet.get(group.getAlias()) != null) { String message = "Cartridge group alias exists more than once: [group-alias] " + group.getAlias(); throw new RestAPIException(message); } + + if (group.getDeploymentPolicy() != null) { + if (hasDP) { + String message = "Parent Group has a deployment policy. Remove deployment policy from the" + + " group: [group-alias] " + group.getAlias(); + throw new RestAPIException(message); + } else { + hasDP = true; + } + } + + if (group.getCartridges() != null) { + validateCartridgesForDeploymentPolicy(group.getCartridges(), hasDP); + } + groupsSet.put(group.getAlias(), group); if (group.getGroups() != null) { - validateGroupsRecursively(groupsSet, group.getGroups()); + validateGroupsRecursively(groupsSet, group.getGroups(), hasDP); } } } http://git-wip-us.apache.org/repos/asf/stratos/blob/5120d584/samples/applications/simple/single-group-app/artifacts/application.json ---------------------------------------------------------------------- diff --git a/samples/applications/simple/single-group-app/artifacts/application.json b/samples/applications/simple/single-group-app/artifacts/application.json index 59c1398..c16a3f3 100644 --- a/samples/applications/simple/single-group-app/artifacts/application.json +++ b/samples/applications/simple/single-group-app/artifacts/application.json @@ -17,7 +17,6 @@ "subscribableInfo": { "alias": "my-esb", "autoscalingPolicy": "autoscaling-policy-1", - "deploymentPolicy": "deployment-policy-1", "artifactRepository": { "privateRepo": false, "repoUrl": "https://github.com/imesh/stratos-esb-applications.git", @@ -33,7 +32,6 @@ "subscribableInfo": { "alias": "my-php", "autoscalingPolicy": "autoscaling-policy-1", - "deploymentPolicy": "deployment-policy-1", "artifactRepository": { "privateRepo": false, "repoUrl": "https://github.com/imesh/stratos-php-applications.git",
