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);
// Args
String accesskeyid = args[0];
String secretkey = args[1];
String group = args[2];
String command = args[3];
// Init
ComputeService compute = new ComputeServiceContextFactory().createContext("aws-ec2", accesskeyid, secretkey).getComputeService();
// wait up to 60 seconds for ssh to be accessible
RetryablePredicate<IPSocket> socketTester = new RetryablePredicate<IPSocket>(new InetSocketAddressConnect(), 60, 1, 1, TimeUnit.SECONDS);
try {
if (command.equals("create")) {
Template template = compute.templateBuilder().build();
template.getOptions().as(AWSEC2TemplateOptions.class).spotPrice(0.03f).authorizePublicKey(Files.toString(new File(System.getProperty("user.home") + "/.ssh/id_rsa.pub"), Charsets.UTF_8));
System.out.printf(">> running one spot node type(%s) with ami(%s) in group(%s)%n", template.getHardware().getProviderId(), template.getImage().getId(), group);
// run only a single node
NodeMetadata node = Iterables.getOnlyElement(compute.createNodesInGroup(group, 1, template));
System.out.printf("<< running node(%s)%n", node.getId());
IPSocket socket = new IPSocket(Iterables.get(node.getPublicAddresses(), 0), node.getLoginPort());
if (socketTester.apply(socket)) {
System.out.printf("<< socket ready [%s] node(%s)%n", socket, node.getId());
System.out.printf("ssh to node with the following command:%n ssh %s@%s%n", node.getCredentials().identity, socket.getAddress());
System.exit(0);
} else {
System.out.printf("<< socket not ready [%s] node(%s)%n", socket, node.getId());
}
} else if (command.equals("destroy")) {
System.out.printf(">> destroying nodes in group(%s)%n", group);
Set<? extends NodeMetadata> destroyed = compute.destroyNodesMatching(NodePredicates.inGroup(group));
System.out.printf("<< destroyed(%d)%n", destroyed.size());
System.exit(0);
} else {
System.err.println(INVALID_SYNTAX);
System.exit(1);
}
} catch (RunNodesException e) {
System.err.println(e.getMessage());
for (NodeMetadata node : e.getNodeErrors().keySet()) compute.destroyNode(node.getId());
System.exit(1);
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
} finally {
compute.getContext().close();
}
}
use of org.jclouds.compute.ComputeService in project iobserve-analysis by research-iobserve.
the class AllocateActionScript method execute.
@Override
public void execute() throws RunNodesException {
final ResourceContainer container = this.action.getTargetResourceContainer();
final ResourceContainerCloud cloudContainer = this.getResourceContainerCloud(container);
final ComputeService client = this.getComputeServiceForContainer(cloudContainer);
final TemplateBuilder templateBuilder = client.templateBuilder();
final VMType instanceType = cloudContainer.getInstanceType();
templateBuilder.hardwareId(instanceType.getName());
templateBuilder.locationId(instanceType.getLocation());
// TODO maybe make this configurable
templateBuilder.osFamily(OsFamily.UBUNTU);
final Statement setupAdminInstructions = AdminAccess.standard();
// Necessary to set hostname to allow mapping for later events
final TemplateOptions options = Builder.runScript(setupAdminInstructions).runScript(AllocateActionScript.getChangeHostnameScript(cloudContainer)).runScript(this.getStartupScript());
templateBuilder.options(options);
final Template template = templateBuilder.build();
final String groupName = ModelHelper.getGroupName(cloudContainer);
final NodeMetadata node = Iterables.getOnlyElement(client.createNodesInGroup(groupName, 1, template));
AllocateActionScript.LOGGER.info(String.format("Allocated node for resource container '%s'. NodeID: %s, Hostname: %s, Adresses: %s", cloudContainer.getEntityName(), node.getId(), node.getHostname(), Iterables.concat(node.getPrivateAddresses(), node.getPublicAddresses())));
// TODO write resource container to original model to enable mapping
}
use of org.jclouds.compute.ComputeService in project iobserve-analysis by research-iobserve.
the class DeallocateActionScript method execute.
@Override
public void execute() throws RunScriptOnNodesException {
final ResourceContainer container = this.action.getTargetResourceContainer();
final ResourceContainerCloud cloudContainer = this.getResourceContainerCloud(container);
final ComputeService client = this.getComputeServiceForContainer(cloudContainer);
// If the container group has already been terminated, do nothing
if (!this.data.getTerminatedGroups().contains(ModelHelper.getGroupName(cloudContainer))) {
client.runScriptOnNodesMatching(node -> node.getGroup().equals(cloudContainer.getGroupName()), this.getScript(AdaptationData.NODE_PRE_TERMINATE_SCRIPT_NAME));
client.destroyNodesMatching(node -> node.getGroup().equals(cloudContainer.getGroupName()));
this.data.getTerminatedGroups().add(cloudContainer.getGroupName());
}
}
use of org.jclouds.compute.ComputeService in project iobserve-analysis by research-iobserve.
the class ReplicateActionScript method execute.
@Override
public void execute() throws RunScriptOnNodesException, IOException {
final ResourceContainer container = this.action.getTargetAllocationContext().getResourceContainer_AllocationContext();
final ResourceContainerCloud cloudContainer = this.getResourceContainerCloud(container);
final ComputeService client = this.getComputeServiceForContainer(cloudContainer);
final String assemblyContextName = this.action.getTargetAllocationContext().getAssemblyContext_AllocationContext().getEntityName();
// nothing
if (!this.data.getAllocatedContexts().contains(assemblyContextName)) {
client.runScriptOnNodesMatching(node -> node.getGroup().equals(cloudContainer.getGroupName()), this.getAllocateScript(this.action.getTargetAllocationContext().getAssemblyContext_AllocationContext()));
this.data.getAllocatedContexts().add(assemblyContextName);
// TODO add possibility to open up ports defined in a config file
}
}
Aggregations