package com.sequenceiq.samples.core.service.simple;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.*;
import com.sequenceiq.samples.core.service.InstanceService;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.*;
import java.net.URL;
import java.util.List;
@Component
public class SimpleInstanceService implements InstanceService {
@Autowired
private AmazonEC2ClientFactory amazonEC2ClientFactory;
@Override
public List<Reservation> describeInstances(AWSCredentials crendentials) {
AmazonEC2Client client = amazonEC2ClientFactory.createAmazonEC2Client(crendentials);
DescribeInstancesResult describeInstancesResult = client.describeInstances();
return describeInstancesResult.getReservations();
}
private RunInstancesResult runInstances(AmazonEC2Client client, String amiId, String keyName, String securityGroup, String gist) {
RunInstancesRequest runInstancesRequest = new RunInstancesRequest(amiId, 1, 1);
runInstancesRequest.withInstanceType("t1.micro");
runInstancesRequest.withKeyName(keyName);
runInstancesRequest.withUserData(new String(Base64.encodeBase64(readGist(gist).getBytes())));
runInstancesRequest.withSecurityGroups(securityGroup);
RunInstancesResult runInstancesResult = client.runInstances(runInstancesRequest);
return runInstancesResult;
}
@Override
public RunInstancesResult runInstances(AWSCredentials crendentials, String amiId, String keyName, String securityGroup, String gist) {
return runInstances(amazonEC2ClientFactory.createAmazonEC2Client(crendentials), amiId, keyName, securityGroup, gist);
}
private StopInstancesResult stopInstances(AmazonEC2Client client, String... instanceIds) {
StopInstancesRequest stopInstancesRequest = new StopInstancesRequest().withInstanceIds(instanceIds);
StopInstancesResult stopInstancesResult = client.stopInstances(stopInstancesRequest);
return stopInstancesResult;
}
@Override
public StopInstancesResult stopInstances(AWSCredentials crendentials, String... instanceIds) {
return stopInstances(amazonEC2ClientFactory.createAmazonEC2Client(crendentials), instanceIds);
}
private TerminateInstancesResult terminateInstances(AmazonEC2Client client, String... instanceIds) {
TerminateInstancesRequest terminateInstancesRequest = new TerminateInstancesRequest().withInstanceIds(instanceIds);
TerminateInstancesResult terminateInstancesResult = client.terminateInstances(terminateInstancesRequest);
return terminateInstancesResult;
}
@Override
public TerminateInstancesResult terminateInstances(AWSCredentials credentials, String... instanceIds) {
return terminateInstances(amazonEC2ClientFactory.createAmazonEC2Client(credentials), instanceIds);
}
private StartInstancesResult startInstances(AmazonEC2Client client, String... instanceIds) {
StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds(instanceIds);
StartInstancesResult startResult = client.startInstances(startRequest);
return startResult;
}
@Override
public StartInstancesResult startInstances(AWSCredentials credentials, String... instanceId) {
return startInstances(amazonEC2ClientFactory.createAmazonEC2Client(credentials), instanceId);
}
public String readGist(String gist) {
try {
URL url = new URL(gist);
final InputStream in = new BufferedInputStream(url.openStream());
InputStreamReader is = new InputStreamReader(in);
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(is);
String read = br.readLine();
while (read != null) {
sb.append(read);
sb.append("\n");
read = br.readLine();
}
return sb.toString();
} catch (IOException e) {
System.out.println(e.getMessage());
}
return "";
}
}