@Test public void testNodesMustHaveServices() throws Exception { Set<String> services = ImmutableSet.of("svc1", "svc2", "svc3"); ClusterTemplate template = ClusterTemplate.builder() .setName("simple") .setDescription("all services on all nodes template") .setClusterDefaults(ClusterDefaults.builder().setServices(services).setProvider("joyent").build()) .setCompatibilities(Compatibilities.builder().setServices(services).build()) .setConstraints(new Constraints( ImmutableMap.<String, ServiceConstraint>of("svc1", new ServiceConstraint(null, null, 1, 1)), new LayoutConstraint( ImmutableSet.<Set<String>>of(ImmutableSet.of("svc1", "svc2", "svc3")), ImmutableSet.<Set<String>>of() ), SizeConstraint.EMPTY )).build(); List<NodeLayout> expected = ImmutableList.of( new NodeLayout("small", "centos6", ImmutableSet.of("svc1", "svc2", "svc3")) ); NodeLayoutGenerator nodeLayoutGenerator = new NodeLayoutGenerator(template, services, ImmutableSet.<String>of("small"), ImmutableSet.<String>of("centos6")); List<NodeLayout> actual = nodeLayoutGenerator.generateNodeLayoutPreferences(); Assert.assertEquals(expected, actual); }
@Override public Compatibilities deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { JsonObject jsonObj = json.getAsJsonObject(); Set<String> hardwaretypes = jsonObj.get("hardwaretypes") != null ? context.<Set<String>>deserialize(jsonObj.get("hardwaretypes"), typeToken) : ImmutableSet.<String>of(); Set<String> imagetypes = jsonObj.get("imagetypes") != null ? context.<Set<String>>deserialize(jsonObj.get("imagetypes"), typeToken) : ImmutableSet.<String>of(); Set<String> services = jsonObj.get("services") != null ? context.<Set<String>>deserialize(jsonObj.get("services"), typeToken) : ImmutableSet.<String>of(); return Compatibilities.builder() .setHardwaretypes(hardwaretypes) .setImagetypes(imagetypes) .setServices(services) .build(); } }
.setProvider("joyent") .setConfig(Entities.ClusterTemplateExample.clusterConf).build()) .setCompatibilities(Compatibilities.builder().setServices(services).build()) .setConstraints(new Constraints( ImmutableMap.<String, ServiceConstraint>of(
.setClusterDefaults(ClusterDefaults.builder().setServices(services).setProvider("joyent").build()) .setCompatibilities( Compatibilities.builder().setHardwaretypes("large-mem", "large-cpu", "large", "medium", "small").build()) .setConstraints( new Constraints( .setConfig(defaultClusterConfig) .build()) .setCompatibilities(Compatibilities.builder().setServices("zookeeper").build()) .setAdministration(new Administration(LeaseDuration.of("10s", "30s", "5s"))) .build();
.setClusterDefaults(ClusterDefaults.builder().setServices(services).setProvider("joyent").build()) .setCompatibilities( Compatibilities.builder().setHardwaretypes("large-mem", "large-cpu", "large", "medium", "small").build()) .setConstraints(new Constraints( ImmutableMap.<String, ServiceConstraint>of(
.build()) .setCompatibilities(Compatibilities.builder() .setHardwaretypes("small", "medium", "large-mem") .setImagetypes("centos6", "ubuntu12") .setServices("namenode", "datanode").build()) .build(); entityStoreService.getView(account).writeClusterTemplate(simpleTemplate);
.setCompatibilities( Compatibilities.builder() .setHardwaretypes(hardwareType.getName()) .setImagetypes(imageType.getName()) .setServices(service1.getName(), service2.getName()).build()) .build(); entityStoreView.writeClusterTemplate(basicTemplate);
.setProvider("joyent") .setConfig(Entities.ClusterTemplateExample.clusterConf).build()) .setCompatibilities(Compatibilities.builder().setServices("service1", "service2", "service3").build()) .build(); Service service1 = Service.builder().setName("service1").build();
.setHardwaretypes(template.getCompatibilities().getHardwaretypes()) .setImagetypes(template.getCompatibilities().getImagetypes()) .setServices("namenode", "datanode", "zookeeper") .build(); template = copyWithNewCompatibilities(template, newCompatibilities); Assert.assertFalse(layout.isCompatibleWithTemplate(template)); .setHardwaretypes("large") .setImagetypes(template.getCompatibilities().getImagetypes()) .setServices(template.getCompatibilities().getServices()) .build(); template = copyWithNewCompatibilities(template, newCompatibilities); Assert.assertFalse(layout.isCompatibleWithTemplate(template)); .setHardwaretypes(template.getCompatibilities().getHardwaretypes()) .setImagetypes("ubuntu12") .setServices(template.getCompatibilities().getServices()) .build(); template = copyWithNewCompatibilities(template, newCompatibilities); Assert.assertFalse(layout.isCompatibleWithTemplate(template));
Compatibilities newCompatibilities = Compatibilities.builder() .setHardwaretypes(template.getCompatibilities().getHardwaretypes()) .setImagetypes(template.getCompatibilities().getImagetypes()) .setServices(newCompatibleServices).build(); ClusterTemplate updatedTemplate = ClusterTemplate.builder() .setName(template.getName())
@Test(expected = IllegalArgumentException.class) public void testConflictingServicesThrowsException() throws Exception { Set<String> services = ImmutableSet.of("myapp-1"); ClusterTemplate template = ClusterTemplate.builder() .setName("name") .setClusterDefaults(ClusterDefaults.builder() .setServices(services) .setProvider("joyent") .setConfig(Entities.ClusterTemplateExample.clusterConf).build()) .setCompatibilities(Compatibilities.builder().setServices("myapp-1", "myapp-2").build()) .build(); Service myapp1 = Service.builder() .setName("myapp-1") .setDependencies(ServiceDependencies.builder().setProvides("myapp").setConflicts("myapp-2").build()) .build(); Service myapp2 = Service.builder() .setName("myapp-2") .setDependencies(ServiceDependencies.builder().setProvides("myapp").setConflicts("myapp-1").build()) .build(); entityStoreService.getView(account).writeService(myapp1); entityStoreService.getView(account).writeService(myapp2); Cluster cluster = getBaseBuilder() .setClusterTemplate(template) .setServices(ImmutableSet.of(myapp1.getName())) .build(); solver.validateServicesToAdd(cluster, ImmutableSet.of(myapp2.getName())); }
Compatibilities newCompatibilities = Compatibilities.builder() .setHardwaretypes(template.getCompatibilities().getHardwaretypes()) .setImagetypes(newCompatibleImages) .setServices(template.getCompatibilities().getServices()) .build(); ClusterTemplate updatedTemplate = ClusterTemplate.builder() .setName(template.getName())
@Test public void testNoSolutionReturnsNull() { Set<String> services = ImmutableSet.of("svc1", "svc2", "svc3"); ClusterTemplate template = ClusterTemplate.builder() .setName("simple") .setDescription("all services on all nodes template") .setClusterDefaults(ClusterDefaults.builder().setServices(services).setProvider("joyent").build()) .setCompatibilities(Compatibilities.builder().setServices(services).build()) .setConstraints(new Constraints( ImmutableMap.<String, ServiceConstraint>of("svc1", new ServiceConstraint(null, null, 1, 1)), new LayoutConstraint( ImmutableSet.<Set<String>>of(ImmutableSet.of("svc1", "svc2", "svc3")), ImmutableSet.<Set<String>>of() ), SizeConstraint.EMPTY)) .build(); List<NodeLayout> nodePreferences = ImmutableList.of( new NodeLayout("small", "centos6", ImmutableSet.of("svc1", "svc2", "svc3")) ); ClusterLayoutFinder finder = new ClusterLayoutFinder(nodePreferences, template, services, 2); Assert.assertNull(finder.findValidNodeCounts()); }
private void copyMainProps(AbstractTemplate from, AbstractTemplate to, Set<String> immutables, boolean isImmutable) throws TemplateImmutabilityException { //merge defaults if(!from.clusterDefaults.equals(ClusterDefaults.EMPTY_CLUSTER_DEFAULTS)){ to.clusterDefaults = ClusterDefaults.builder() .setServices(mergeSet(to.clusterDefaults.services, from.clusterDefaults.services)) .setConfig(mergeConfig(to.clusterDefaults.config, from.clusterDefaults.config, immutables, isImmutable)) .setDNSSuffix(mergeString(to.clusterDefaults.dnsSuffix, from.clusterDefaults.dnsSuffix)) .setHardwaretype(mergeString(to.clusterDefaults.hardwaretype, from.clusterDefaults.hardwaretype)) .setImagetype(mergeString(to.clusterDefaults.imagetype, from.clusterDefaults.imagetype)) .setProvider(mergeString(to.clusterDefaults.provider, from.clusterDefaults.provider)) .build(); } //merge compatibilities services if(!from.compatibilities.equals(Compatibilities.EMPTY_COMPATIBILITIES)) { to.compatibilities = Compatibilities.builder() .setServices(mergeSet(to.compatibilities.services, from.compatibilities.services)) .setHardwaretypes(mergeSet(to.compatibilities.hardwaretypes, from.compatibilities.hardwaretypes)) .setImagetypes(mergeSet(to.compatibilities.imagetypes, from.compatibilities.imagetypes)) .build(); } }
@BeforeClass public static void initData() throws Exception { JsonObject defaultClusterConfig = new JsonObject(); defaultClusterConfig.addProperty("defaultconfig", "value1"); smallTemplate = ClusterTemplate.builder() .setName("one-machine") .setClusterDefaults( ClusterDefaults.builder() .setServices("zookeeper") .setProvider("rackspace") .setConfig(defaultClusterConfig) .build()) .setCompatibilities(Compatibilities.builder().setServices("zookeeper").build()) .setAdministration(new Administration(LeaseDuration.of("10s", "30s", "5s"))) .build(); }
/** * Get a builder for creating compatibilities. * * @return Builder for creating compatibilities. */ public static Builder builder() { return new Builder(); }