@Override public JsonElement serialize(Constraints constraints, Type type, JsonSerializationContext context) { JsonObject jsonObj = new JsonObject(); jsonObj.add("layout", context.serialize(constraints.getLayoutConstraint())); jsonObj.add("services", context.serialize(constraints.getServiceConstraints())); jsonObj.add("size", context.serialize(constraints.getSizeConstraint())); return jsonObj; }
LayoutConstraint layoutConstraint = clusterTemplate.getConstraints().getLayoutConstraint(); int[] maxCounts = new int[services.size()]; for (int i = 0; i < maxCounts.length; i++) {
/** * Determine if this is a valid node layout some constraints and the set of all services that are also on the cluster. * * @param constraints Constraints to use for checking validity. * @param clusterServices Services on the cluster with this node layout. * @return True if it satisfies all constraints, false if not. */ public boolean satisfiesConstraints(Constraints constraints, Set<String> clusterServices) { return NodeLayoutGenerator.isValidServiceSet(services, constraints.getLayoutConstraint(), clusterServices) && satisfiesServiceConstraints(constraints.getServiceConstraints()); }
Set<String> findUnconstrainedServices() { Set<String> unconstrained = Sets.newHashSet(); Map<String, ServiceConstraint> serviceConstraints = clusterTemplate.getConstraints().getServiceConstraints(); LayoutConstraint layoutConstraint = clusterTemplate.getConstraints().getLayoutConstraint(); Set<Set<String>> mustCoexistServices = layoutConstraint.getServicesThatMustCoexist(); Set<Set<String>> mustNotCoexistServices = layoutConstraint.getServicesThatMustNotCoexist(); for (String service : clusterServices) { if (!serviceConstraints.containsKey(service) && !inSetOfSets(service, mustCoexistServices) && !inSetOfSets(service, mustNotCoexistServices)) { unconstrained.add(service); } } return unconstrained; }
@Test public void testIsValidServiceSet() { LayoutConstraint layoutConstraint = reactorTemplate.getConstraints().getLayoutConstraint(); Set<String> services = ImmutableSet.of("namenode", "datanode", "regionserver", "nodemanager", "hbasemaster", "reactor", "zookeeper"); Assert.assertTrue(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("datanode", "regionserver", "nodemanager"), layoutConstraint, services)); Assert.assertTrue(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("namenode", "resourcemanager", "hbasemaster"), layoutConstraint, services)); Assert.assertTrue(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("reactor", "zookeeper"), layoutConstraint, services)); Assert.assertTrue(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("reactor"), layoutConstraint, services)); Assert.assertTrue(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("zookeeper"), layoutConstraint, services)); Assert.assertFalse(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("datanode"), layoutConstraint, services)); Assert.assertFalse(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("datanode", "nodemanager"), layoutConstraint, services)); Assert.assertFalse(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("namenode"), layoutConstraint, services)); Assert.assertFalse(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("namenode", "resourcemanager"), layoutConstraint, services)); Assert.assertFalse(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("namenode", "datanode"), layoutConstraint, services)); Assert.assertFalse(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("reactor", "datanode"), layoutConstraint, services)); Assert.assertFalse(NodeLayoutGenerator.isValidServiceSet( ImmutableSet.of("zookeeper", "datanode"), layoutConstraint, services)); }
@Test public void test_06_resolveTemplateTest() throws Exception { ClusterTemplate rt = clusterService.resolveTemplate(account, secureTemplate); Assert.assertEquals(secureTemplate.getIncludes(), rt.getIncludes()); Assert.assertEquals(secureTemplate.getParent(), rt.getParent()); Assert.assertEquals(secureTemplate.getName(), rt.getName()); Assert.assertEquals(secureTemplate.getDescription(), rt.getDescription()); Assert.assertEquals(defaultsServices, rt.getClusterDefaults().getServices()); Assert.assertEquals(16, rt.getClusterDefaults().getConfig().entrySet().size()); Assert.assertEquals("rackspace", rt.getClusterDefaults().getProvider()); Assert.assertEquals("standard-large", rt.getClusterDefaults().getHardwaretype()); Assert.assertEquals("centos6", rt.getClusterDefaults().getImagetype()); Assert.assertEquals("example.com", rt.getClusterDefaults().getDnsSuffix()); Assert.assertEquals(2, rt.getConstraints().getLayoutConstraint().getServicesThatMustCoexist().size()); Assert.assertEquals(2, rt.getConstraints().getLayoutConstraint().getServicesThatMustNotCoexist().size()); Assert.assertEquals(serviceConstraints, rt.getConstraints().getServiceConstraints()); Assert.assertEquals(43200000, rt.getAdministration().getLeaseDuration().getInitial()); Assert.assertEquals(43200000, rt.getAdministration().getLeaseDuration().getStep()); Assert.assertEquals(compatibilitiesHardwaretypes, rt.getCompatibilities().getHardwaretypes()); Assert.assertEquals(compatibilitiesImagetypes, rt.getCompatibilities().getImagetypes()); Assert.assertEquals(compatibilitiesServices, rt.getCompatibilities().getServices()); //overrides in child Assert.assertEquals("ldap.correct.com", rt.getClusterDefaults().getConfig().get("ldap") .getAsJsonObject().get("endpoint").getAsString()); Assert.assertNull(rt.getLabel()); Assert.assertNull(rt.getIcon()); Assert.assertEquals("cdap-distributed-secure-hadoop", rt.getName()); Assert.assertEquals("Cask DAP (CDAP) with Security and Secure Hadoop cluster with single master", rt.getDescription()); }