use of org.jclouds.compute.ComputeService in project whirr by apache.
the class ByonClusterController method getNodes.
@Override
public Set<? extends NodeMetadata> getNodes(ClusterSpec clusterSpec) throws IOException, InterruptedException {
ComputeServiceContext computeServiceContext = getCompute().apply(clusterSpec);
ComputeService computeService = computeServiceContext.getComputeService();
return computeService.listNodesDetailsMatching(Predicates.in(computeService.listNodes()));
}
use of org.jclouds.compute.ComputeService in project SimianArmy by Netflix.
the class AWSClient method connectSsh.
@Override
public SshClient connectSsh(String instanceId, LoginCredentials credentials) {
ComputeService computeService = getJcloudsComputeService();
String jcloudsId = getJcloudsId(instanceId);
NodeMetadata node = getJcloudsNode(computeService, jcloudsId);
node = NodeMetadataBuilder.fromNodeMetadata(node).credentials(credentials).build();
Utils utils = computeService.getContext().utils();
SshClient ssh = utils.sshForNode().apply(node);
ssh.connect();
return ssh;
}
use of org.jclouds.compute.ComputeService in project legacy-jclouds-examples by jclouds.
the class MainApp method main.
public static void main(String[] args) {
if (args.length < PARAMETERS) {
throw new IllegalArgumentException(INVALID_SYNTAX);
}
String provider = args[0];
String identity = args[1];
String credential = args[2];
String groupName = args[3];
Action action = Action.valueOf(args[4].toUpperCase());
if ((action == Action.CHEF || action == Action.SOLO) && args.length < PARAMETERS + 1) {
throw new IllegalArgumentException("please provide the list of recipes to install, separated by commas");
}
String recipes = action == Action.CHEF || action == Action.SOLO ? args[5] : "apache2";
String minRam = System.getProperty("minRam");
// note that you can check if a provider is present ahead of time
checkArgument(contains(allKeys, provider), "provider %s not in supported list: %s", provider, allKeys);
LoginCredentials login = action != Action.DESTROY ? getLoginForCommandExecution(action) : null;
ComputeService compute = initComputeService(provider, identity, credential);
try {
switch(action) {
case ADD:
System.out.printf(">> adding node to group %s%n", groupName);
// Default template chooses the smallest size on an operating
// system that tested to work with java, which tends to be Ubuntu
// or CentOS
TemplateBuilder templateBuilder = compute.templateBuilder();
// can just tweak minRam
if (minRam != null) {
templateBuilder.minRam(Integer.parseInt(minRam));
}
// note this will create a user with the same name as you on the
// node. ex. you can connect via ssh publicip
Statement bootInstructions = AdminAccess.standard();
// to run commands as root, we use the runScript option in the
// template.
templateBuilder.options(runScript(bootInstructions));
NodeMetadata node = getOnlyElement(compute.createNodesInGroup(groupName, 1, templateBuilder.build()));
System.out.printf("<< node %s: %s%n", node.getId(), concat(node.getPrivateAddresses(), node.getPublicAddresses()));
case SOLO:
System.out.printf(">> installing [%s] on group %s as %s%n", recipes, groupName, login.identity);
Iterable<String> recipeList = Splitter.on(',').split(recipes);
ImmutableList.Builder<Statement> bootstrapBuilder = ImmutableList.builder();
bootstrapBuilder.add(new InstallGit());
// Clone community cookbooks into the node
for (String recipe : recipeList) {
bootstrapBuilder.add(CloneGitRepo.builder().repository("git://github.com/opscode-cookbooks/" + recipe + ".git").directory(//
"/var/chef/cookbooks/" + recipe).build());
}
// Configure Chef Solo to bootstrap the selected recipes
bootstrapBuilder.add(InstallRuby.builder().build());
bootstrapBuilder.add(InstallRubyGems.builder().build());
bootstrapBuilder.add(//
ChefSolo.builder().cookbookPath(//
"/var/chef/cookbooks").runlist(//
RunList.builder().recipes(recipeList).build()).build());
// Build the statement that will perform all the operations above
StatementList bootstrap = new StatementList(bootstrapBuilder.build());
// Run the script in the nodes of the group
runScriptOnGroup(compute, login, groupName, bootstrap);
break;
case CHEF:
// Create the connection to the Chef server
ChefService chef = initChefService(System.getProperty("chef.client"), System.getProperty("chef.validator"));
// Build the runlist for the deployed nodes
System.out.println("Configuring node runlist in the Chef server...");
List<String> runlist = new RunListBuilder().addRecipes(recipes.split(",")).build();
chef.updateRunListForGroup(runlist, groupName);
Statement chefServerBootstrap = chef.createBootstrapScriptForGroup(groupName);
// Run the script in the nodes of the group
System.out.printf(">> installing [%s] on group %s as %s%n", recipes, groupName, login.identity);
runScriptOnGroup(compute, login, groupName, chefServerBootstrap);
break;
case DESTROY:
System.out.printf(">> destroying nodes in group %s%n", groupName);
// you can use predicates to select which nodes you wish to
// destroy.
Set<? extends NodeMetadata> destroyed = //
compute.destroyNodesMatching(Predicates.<NodeMetadata>and(not(TERMINATED), inGroup(groupName)));
System.out.printf("<< destroyed nodes %s%n", destroyed);
break;
}
} catch (RunNodesException e) {
System.err.println("error adding node to group " + groupName + ": " + e.getMessage());
error = 1;
} catch (RunScriptOnNodesException e) {
System.err.println("error installing " + recipes + " on group " + groupName + ": " + e.getMessage());
error = 1;
} catch (Exception e) {
System.err.println("error: " + e.getMessage());
error = 1;
} finally {
compute.getContext().close();
System.exit(error);
}
}
use of org.jclouds.compute.ComputeService in project legacy-jclouds-examples by jclouds.
the class MainApp method main.
public static void main(String[] args) {
if (args.length < PARAMETERS)
throw new IllegalArgumentException(INVALID_SYNTAX);
String provider = args[0];
String identity = args[1];
String credential = args[2];
String groupName = args[3];
Action action = Action.valueOf(args[4].toUpperCase());
if (action == Action.EXEC && args.length < PARAMETERS + 1)
throw new IllegalArgumentException("please quote the command to exec as the last parameter");
String command = (action == Action.EXEC) ? args[5] : "echo hello";
if (action == Action.RUN && args.length < PARAMETERS + 1)
throw new IllegalArgumentException("please pass the local file to run as the last parameter");
File file = null;
if (action == Action.RUN) {
file = new File(args[5]);
if (!file.exists())
throw new IllegalArgumentException("file must exist! " + file);
}
String minRam = System.getProperty("minRam");
String loginUser = System.getProperty("loginUser", "toor");
// note that you can check if a provider is present ahead of time
checkArgument(contains(allKeys, provider), "provider %s not in supported list: %s", provider, allKeys);
LoginCredentials login = (action != Action.DESTROY) ? getLoginForCommandExecution(action) : null;
ComputeService compute = initComputeService(provider, identity, credential);
try {
switch(action) {
case ADD:
System.out.printf(">> adding node to group %s%n", groupName);
// Default template chooses the smallest size on an operating system
// that tested to work with java, which tends to be Ubuntu or CentOS
TemplateBuilder templateBuilder = compute.templateBuilder();
// just tweak minRam
if (minRam != null)
templateBuilder.minRam(Integer.parseInt(minRam));
// note this will create a user with the same name as you on the
// node. ex. you can connect via ssh publicip
Statement bootInstructions = AdminAccess.standard();
// to run commands as root, we use the runScript option in the template.
if (provider.equalsIgnoreCase("virtualbox"))
templateBuilder.options(overrideLoginUser(loginUser).runScript(bootInstructions));
else
templateBuilder.options(runScript(bootInstructions));
NodeMetadata node = getOnlyElement(compute.createNodesInGroup(groupName, 1, templateBuilder.build()));
System.out.printf("<< node %s: %s%n", node.getId(), concat(node.getPrivateAddresses(), node.getPublicAddresses()));
case EXEC:
System.out.printf(">> running [%s] on group %s as %s%n", command, groupName, login.identity);
// when you run commands, you can pass options to decide whether to
// run it as root, supply or own credentials vs from cache, and wrap
// in an init script vs directly invoke
Map<? extends NodeMetadata, ExecResponse> responses = //
compute.runScriptOnNodesMatching(// predicate used to select nodes
inGroup(groupName), // what you actually intend to run
exec(command), // use my local user &
overrideLoginCredentials(login).runAsRoot(// don't attempt to run as root (sudo)
false).wrapInInitScript(// run command directly
false));
for (Entry<? extends NodeMetadata, ExecResponse> response : responses.entrySet()) {
System.out.printf("<< node %s: %s%n", response.getKey().getId(), concat(response.getKey().getPrivateAddresses(), response.getKey().getPublicAddresses()));
System.out.printf("<< %s%n", response.getValue());
}
break;
case RUN:
System.out.printf(">> running [%s] on group %s as %s%n", file, groupName, login.identity);
// when running a sequence of commands, you probably want to have jclouds use the default behavior,
// which is to fork a background process.
responses = //
compute.runScriptOnNodesMatching(inGroup(groupName), // passing in a string with the contents of the file
Files.toString(file, Charsets.UTF_8), overrideLoginCredentials(login).runAsRoot(false).nameTask(// ensuring task name isn't
"_" + file.getName().replaceAll("\\..*", "")));
for (Entry<? extends NodeMetadata, ExecResponse> response : responses.entrySet()) {
System.out.printf("<< node %s: %s%n", response.getKey().getId(), concat(response.getKey().getPrivateAddresses(), response.getKey().getPublicAddresses()));
System.out.printf("<< %s%n", response.getValue());
}
break;
case DESTROY:
System.out.printf(">> destroying nodes in group %s%n", groupName);
// you can use predicates to select which nodes you wish to destroy.
Set<? extends NodeMetadata> destroyed = //
compute.destroyNodesMatching(Predicates.<NodeMetadata>and(not(TERMINATED), inGroup(groupName)));
System.out.printf("<< destroyed nodes %s%n", destroyed);
break;
}
} catch (RunNodesException e) {
System.err.println("error adding node to group " + groupName + ": " + e.getMessage());
error = 1;
} catch (RunScriptOnNodesException e) {
System.err.println("error executing " + command + " on group " + groupName + ": " + e.getMessage());
error = 1;
} catch (Exception e) {
System.err.println("error: " + e.getMessage());
error = 1;
} finally {
compute.getContext().close();
System.exit(error);
}
}
use of org.jclouds.compute.ComputeService in project iobserve-analysis by research-iobserve.
the class MigrateActionScript method execute.
@Override
public void execute() throws RunScriptOnNodesException {
final ResourceContainer sourceContainer = this.action.getSourceAllocationContext().getResourceContainer_AllocationContext();
final ResourceContainer targetContainer = this.action.getTargetAllocationContext().getResourceContainer_AllocationContext();
final ResourceContainerCloud sourceCloudContainer = this.getResourceContainerCloud(sourceContainer);
final ResourceContainerCloud targetCloudContainer = this.getResourceContainerCloud(targetContainer);
final ComputeService client = this.getComputeServiceForContainer(sourceCloudContainer);
final String assemblyContextName = this.action.getTargetAllocationContext().getAssemblyContext_AllocationContext().getEntityName();
// If the assembly context has already been migrated, do nothing
if (!this.data.getMigratedContexts().contains(assemblyContextName)) {
client.runScriptOnNodesMatching(node -> node.getGroup().equals(sourceCloudContainer.getGroupName()), this.getScript(AdaptationData.PRE_MIGRATE_SCRIPT_NAME, this.action.getTargetAllocationContext().getAssemblyContext_AllocationContext()));
client.runScriptOnNodesMatching(node -> node.getGroup().equals(targetCloudContainer.getGroupName()), this.getScript(AdaptationData.POST_MIGRATE_SCRIPT_NAME, this.action.getTargetAllocationContext().getAssemblyContext_AllocationContext()));
// TODO add possibility to open up ports defined in a config file
this.data.getMigratedContexts().add(assemblyContextName);
}
}
Aggregations