package com.cattles.cloudplatforms.amazonec2;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.model.*;
import com.cattles.cloudplatforms.interfaces.IVirtualMachineOperation;
import com.cattles.util.Constant;
import com.cattles.virtualMachineManagement.VirtualMachineInformation;
import org.apache.log4j.Logger;
import java.util.ArrayList;
public class EC2VMOperationImpl implements IVirtualMachineOperation {
private static Logger logger = Logger.getLogger(EC2VMOperationImpl.class);
EC2ConfigOperation ec2Config = new EC2ConfigOperation();
// Initialize variables.
// Create the AmazonEC2Client object so we can call various APIs.
AmazonEC2 ec2 = ec2Config.initAmazonEC2();
/**
* Used to create certain number of VMs.
*
* @param vmNumber
* @return
* @throws Exception
*/
@Override
public ArrayList<VirtualMachineInformation> createInstances(int vmNumber) throws Exception {
ArrayList<VirtualMachineInformation> instanceList = new ArrayList<VirtualMachineInformation>();
try {
logger.info("creating virtual machines***************************");
RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
.withInstanceType("m1.large")
.withImageId("emi-1C8C3ADF")
.withMinCount(1)
.withMaxCount(vmNumber)
.withKeyName("nicholas-key");
RunInstancesResult runInstances = ec2.runInstances(runInstancesRequest);
Reservation reservation = runInstances.getReservation();
java.util.List<Instance> instances = reservation.getInstances();
logger.info("we have created " + instances.size() + " instances.");
for (Instance instance : instances) {
VirtualMachineInformation vmInstance = new VirtualMachineInformation();
vmInstance.setVmID(instance.getInstanceId());
vmInstance.setVmState(Constant.VIRTUAL_MACHINES_STATE_AVAILABLE);
vmInstance.setVmType(instance.getInstanceType());
vmInstance.setVmPrivateIpAddress(instance.getPrivateIpAddress());
vmInstance.setVmPublicIpAddress(instance.getPublicIpAddress());
vmInstance.setVmKeyName(instance.getKeyName());
instanceList.add(vmInstance);
//System.out.println(" " + instance.getInstanceId() + " " + instance.getInstanceType() + " " + instance.getPrivateIpAddress() + " " + instance.getPublicIpAddress() + " key: " + instance.getKeyName() + " " + instance.getState().getName());
}
} catch (AmazonServiceException ase) {
System.out.println("Caught Exception: " + ase.getMessage());
}
return instanceList; //To change body of implemented methods use File | Settings | File Templates.
}
/**
* used to launch one instance
*
* @param _VMInfo
* @return
* @throws Exception
*/
@Override
public VirtualMachineInformation launchInstance(VirtualMachineInformation _VMInfo) throws Exception {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
/**
* used to launch a list of instances
*
* @param vmList
* @return
* @throws Exception
*/
@Override
public ArrayList<VirtualMachineInformation> launchInstances(ArrayList<VirtualMachineInformation> vmList) throws Exception {
ArrayList<VirtualMachineInformation> instanceList = new ArrayList<VirtualMachineInformation>();
VirtualMachineInformation vmInstance = new VirtualMachineInformation();
// TODO Auto-generated method stub
//============================================================================================//
//=================================== Terminating any Instances ==============================//
//============================================================================================//
try {
// Terminate instances.
ArrayList<String> instanceIds = new ArrayList<String>();
for (VirtualMachineInformation vmInfo : vmList) {
instanceIds.add(vmInfo.getVmID());
}
StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds(instanceIds);
StartInstancesResult startInstancesResult = ec2.startInstances(startRequest);
} catch (AmazonServiceException e) {
// Write out any exceptions that may have occurred.
System.out.println("Error starting instances");
System.out.println("Caught Exception: " + e.getMessage());
System.out.println("Response Status Code: " + e.getStatusCode());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Request ID: " + e.getRequestId());
}
return null; //To change body of implemented methods use File | Settings | File Templates.
}
/**
* used to shutdown one instance
*
* @param _VMInfo
* @return
* @throws Exception
*/
@Override
public boolean shutdownInstance(VirtualMachineInformation _VMInfo) throws Exception {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
/**
* used to shutdown a list of instances
*
* @param vmList
* @return
* @throws Exception
*/
@Override
public boolean shutdownInstances(ArrayList<VirtualMachineInformation> vmList) throws Exception {
//============================================================================================//
//=================================== Shutting down any Instances ==============================//
//============================================================================================//
try {
// Terminate instances.
ArrayList<String> instanceIds = new ArrayList<String>();
for (VirtualMachineInformation vmInfo : vmList) {
instanceIds.add(vmInfo.getVmID());
}
StopInstancesRequest stopRequest = new StopInstancesRequest().withInstanceIds(instanceIds);
logger.info("shutting down " + instanceIds.size() + " instances");
StopInstancesResult stopResult = ec2.stopInstances(stopRequest);
} catch (AmazonServiceException e) {
// Write out any exceptions that may have occurred.
logger.info("Error stopping instances");
logger.info("Caught Exception: " + e.getMessage());
logger.info("Response Status Code: " + e.getStatusCode());
logger.info("Error Code: " + e.getErrorCode());
logger.info("Request ID: " + e.getRequestId());
}
return false;
}
/**
* used to reboot one instance
*
* @param _VMInfo
* @throws Exception
*/
@Override
public VirtualMachineInformation rebootInstance(VirtualMachineInformation _VMInfo) throws Exception {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
/**
* used to reboot a list of instances
*
* @param vmList
* @throws Exception
*/
@Override
public ArrayList<VirtualMachineInformation> rebootInstances(ArrayList<VirtualMachineInformation> vmList) throws Exception {
//============================================================================================//
//=================================== reboot any Instances ==============================//
//============================================================================================//
try {
// Terminate instances.
ArrayList<String> instanceIds = new ArrayList<String>();
for (VirtualMachineInformation vmInfo : vmList) {
instanceIds.add(vmInfo.getVmID());
}
RebootInstancesRequest rebootRequest = new RebootInstancesRequest();
rebootRequest.setInstanceIds(instanceIds);
ec2.rebootInstances(rebootRequest);
} catch (AmazonServiceException e) {
// Write out any exceptions that may have occurred.
logger.info("Error rebooting instances");
logger.info("Caught Exception: " + e.getMessage());
logger.info("Response Status Code: " + e.getStatusCode());
logger.info("Error Code: " + e.getErrorCode());
logger.info("Request ID: " + e.getRequestId());
}
return null; //To change body of implemented methods use File | Settings | File Templates.
}
/**
* Used to destroy vms according to the vmList
*
* @param vmList
* @return
* @throws Exception
*/
@Override
public boolean destroyInstances(ArrayList<VirtualMachineInformation> vmList) throws Exception {
//============================================================================================//
//=================================== Destroy any Instances ==============================//
//============================================================================================//
try {
// Terminate instances.
ArrayList<String> instanceIds = new ArrayList<String>();
for (VirtualMachineInformation vmInfo : vmList) {
instanceIds.add(vmInfo.getVmID());
}
TerminateInstancesRequest terminateRequest = new TerminateInstancesRequest(instanceIds);
ec2.terminateInstances(terminateRequest);
} catch (AmazonServiceException e) {
// Write out any exceptions that may have occurred.
logger.info("Error terminating instances");
logger.info("Caught Exception: " + e.getMessage());
logger.info("Response Status Code: " + e.getStatusCode());
logger.info("Error Code: " + e.getErrorCode());
logger.info("Request ID: " + e.getRequestId());
}
return false;
}
public static void main(String[] args) throws Exception {
EC2VMOperationImpl ec2VMOperation = new EC2VMOperationImpl();
/*ArrayList<VirtualMachineInformation> vmList=new ArrayList<VirtualMachineInformation>();
VirtualMachineInformation vmInfo1=new VirtualMachineInformation();
vmInfo1.setVmID("i-52994123");
VirtualMachineInformation vmInfo2=new VirtualMachineInformation();
vmInfo2.setVmID("i-4C944459");
vmList.add(vmInfo1);
vmList.add(vmInfo2);
try {
//ec2VMOperation.createInstances(1);
//ec2VMOperation.getInstanceList();
//ec2VMOperation.launchInstances(vmList);
//ec2VMOperation.rebootInstances(vmList);
ec2VMOperation.shutdownInstances(vmList);
}catch (Exception e){
System.out.println("error");
}*/
}
}