use of org.apache.whirr.ClusterSpec in project whirr by apache.
the class ZooKeeperClusterActionHandler method afterConfigure.
@Override
protected void afterConfigure(ClusterActionEvent event) {
ClusterSpec clusterSpec = event.getClusterSpec();
Cluster cluster = event.getCluster();
LOG.info("Completed configuration of {}", clusterSpec.getClusterName());
String hosts = Joiner.on(',').join(getHosts(cluster.getInstancesMatching(role(ZOOKEEPER_ROLE))));
LOG.info("Hosts: {}", hosts);
}
use of org.apache.whirr.ClusterSpec in project whirr by apache.
the class BootstrapClusterActionTest method testSubroleInvoked.
@Test
@SuppressWarnings("unchecked")
public void testSubroleInvoked() throws Exception {
CompositeConfiguration config = new CompositeConfiguration();
if (System.getProperty("config") != null) {
config.addConfiguration(new PropertiesConfiguration(System.getProperty("config")));
}
Configuration conf = new PropertiesConfiguration();
conf.addProperty("whirr.service-name", "test-service");
conf.addProperty("whirr.cluster-name", "test-cluster");
conf.addProperty("whirr.instance-templates", "1 puppet:module::manifest+something-else");
conf.addProperty("whirr.provider", "ec2");
config.addConfiguration(conf);
ClusterSpec clusterSpec = ClusterSpec.withTemporaryKeys(conf);
Set<String> nn = new HashSet<String>();
nn.add("puppet:module::manifest");
nn.add("something-else");
TestNodeStarterFactory nodeStarterFactory = null;
ClusterActionHandlerFactory puppetHandlerFactory = mock(ClusterActionHandlerFactory.class);
ClusterActionHandler handler = mock(ClusterActionHandler.class);
when(puppetHandlerFactory.getRolePrefix()).thenReturn("puppet:");
when(puppetHandlerFactory.create("module::manifest")).thenReturn(handler);
when(handler.getRole()).thenReturn("something-else");
LoadingCache<String, ClusterActionHandler> handlerMap = new HandlerMapFactory().create(ImmutableSet.of(puppetHandlerFactory), ImmutableSet.of(handler));
Function<ClusterSpec, ComputeServiceContext> getCompute = mock(Function.class);
ComputeServiceContext serviceContext = mock(ComputeServiceContext.class);
ComputeService computeService = mock(ComputeService.class);
TemplateBuilder templateBuilder = mock(TemplateBuilder.class);
Template template = mock(Template.class);
TemplateOptions templateOptions = mock(TemplateOptions.class);
when(getCompute.apply(clusterSpec)).thenReturn(serviceContext);
when(serviceContext.getComputeService()).thenReturn(computeService);
when(computeService.getContext()).thenReturn(serviceContext);
when(serviceContext.getBackendType()).thenReturn(TypeToken.class.cast(TypeToken.of(Context.class)));
when(computeService.templateBuilder()).thenReturn(templateBuilder);
when(templateBuilder.from((TemplateBuilderSpec) any())).thenReturn(templateBuilder);
when(templateBuilder.options((TemplateOptions) any())).thenReturn(templateBuilder);
when(templateBuilder.build()).thenReturn(template);
when(template.getOptions()).thenReturn(templateOptions);
Map<Set<String>, Stack<Integer>> reaction = Maps.newHashMap();
Stack<Integer> nnStack = new Stack<Integer>();
nnStack.push(new Integer(1));
reaction.put(nn, nnStack);
nodeStarterFactory = new TestNodeStarterFactory(reaction);
BootstrapClusterAction bootstrapper = new BootstrapClusterAction(getCompute, handlerMap, nodeStarterFactory);
bootstrapper.execute(clusterSpec, null);
if (nodeStarterFactory != null) {
nodeStarterFactory.validateCompletion();
}
}
use of org.apache.whirr.ClusterSpec in project whirr by apache.
the class BootstrapClusterActionTest method testSubroleNotSupported.
@SuppressWarnings("unchecked")
@Test(expected = IllegalArgumentException.class)
public /**
* test is the same as previous (SubroleInvoked) except it knows puppet, not puppet:, as the role;
* the colon in the role def'n is the indication it accepts subroles,
* so this should throw IllegalArgument when we refer to puppet:module...
*/
void testSubroleNotSupported() throws Exception {
CompositeConfiguration config = new CompositeConfiguration();
if (System.getProperty("config") != null) {
config.addConfiguration(new PropertiesConfiguration(System.getProperty("config")));
}
Configuration conf = new PropertiesConfiguration();
conf.addProperty("whirr.service-name", "test-service");
conf.addProperty("whirr.cluster-name", "test-cluster");
conf.addProperty("whirr.instance-templates", "1 puppet:module::manifest+something-else");
conf.addProperty("whirr.provider", "ec2");
config.addConfiguration(conf);
ClusterSpec clusterSpec = ClusterSpec.withTemporaryKeys(conf);
Set<String> nn = new HashSet<String>();
nn.add("puppet:module::manifest");
nn.add("something-else");
TestNodeStarterFactory nodeStarterFactory = null;
ClusterActionHandlerFactory puppetHandlerFactory = mock(ClusterActionHandlerFactory.class);
ClusterActionHandler handler = mock(ClusterActionHandler.class);
when(puppetHandlerFactory.getRolePrefix()).thenReturn("puppet");
when(handler.getRole()).thenReturn("something-else");
LoadingCache<String, ClusterActionHandler> handlerMap = new HandlerMapFactory().create(ImmutableSet.of(puppetHandlerFactory), ImmutableSet.of(handler));
Function<ClusterSpec, ComputeServiceContext> getCompute = mock(Function.class);
ComputeServiceContext serviceContext = mock(ComputeServiceContext.class);
ComputeService computeService = mock(ComputeService.class);
TemplateBuilder templateBuilder = mock(TemplateBuilder.class);
Template template = mock(Template.class);
when(getCompute.apply(clusterSpec)).thenReturn(serviceContext);
when(serviceContext.getComputeService()).thenReturn(computeService);
when(computeService.templateBuilder()).thenReturn(templateBuilder);
when(templateBuilder.from((TemplateBuilderSpec) any())).thenReturn(templateBuilder);
when(templateBuilder.options((TemplateOptions) any())).thenReturn(templateBuilder);
when(templateBuilder.build()).thenReturn(template);
Map<Set<String>, Stack<Integer>> reaction = Maps.newHashMap();
Stack<Integer> nnStack = new Stack<Integer>();
nnStack.push(1);
reaction.put(nn, nnStack);
nodeStarterFactory = new TestNodeStarterFactory(reaction);
BootstrapClusterAction bootstrapper = new BootstrapClusterAction(getCompute, handlerMap, nodeStarterFactory);
bootstrapper.execute(clusterSpec, null);
if (nodeStarterFactory != null) {
nodeStarterFactory.validateCompletion();
}
}
use of org.apache.whirr.ClusterSpec in project whirr by apache.
the class DryRunModuleTest method testExecuteOnlyBootstrapForNoop.
@Test
public void testExecuteOnlyBootstrapForNoop() throws Exception {
CompositeConfiguration config = new CompositeConfiguration();
config.setProperty("whirr.provider", "stub");
config.setProperty("whirr.cluster-name", "stub-test");
config.setProperty("whirr.instance-templates", "1 noop");
config.setProperty("whirr.state-store", "memory");
ClusterSpec clusterSpec = ClusterSpec.withTemporaryKeys(config);
ClusterController controller = new ClusterController();
DryRun dryRun = getDryRunInControllerForCluster(controller, clusterSpec);
dryRun.reset();
controller.launchCluster(clusterSpec);
controller.destroyCluster(clusterSpec);
ListMultimap<NodeMetadata, Statement> perNodeExecutions = dryRun.getExecutions();
for (Entry<NodeMetadata, Collection<Statement>> entry : perNodeExecutions.asMap().entrySet()) {
assertSame("An incorrect number of scripts was executed in the node " + entry, entry.getValue().size(), 1);
}
}
use of org.apache.whirr.ClusterSpec in project whirr by apache.
the class StatementBuilderTest method testDeduplication.
@Test
public void testDeduplication() throws Exception {
ClusterSpec clusterSpec = ClusterSpec.withTemporaryKeys();
clusterSpec.setClusterName("test-cluster");
clusterSpec.setProvider("test-provider");
StatementBuilder builder = new StatementBuilder();
builder.addStatement(new RunUrlStatement(false, "http://example.org/", "a/b", "c"));
builder.addStatement(new RunUrlStatement(false, "http://example.org/", "d/e", "f"));
builder.addStatement(new RunUrlStatement(false, "http://example.org/", "a/b", "c"));
String script = builder.name("foo").build(clusterSpec).render(OsFamily.UNIX);
int first = script.indexOf("runurl http://example.org/a/b c");
assertThat(first, greaterThan(-1));
int second = script.indexOf("runurl http://example.org/a/b c", first + 1);
assertThat("No second occurrence", second, is(-1));
assertThat(script, containsString("runurl http://example.org/d/e f"));
}
Aggregations