package com.cattles.cloudplatforms.amazonec2;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.model.DescribeInstancesResult;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.Reservation;
import com.cattles.cloudplatforms.interfaces.IVMInformationMaintain;
import com.cattles.util.Constant;
import com.cattles.virtualMachineManagement.VirtualMachineInformation;
import org.apache.log4j.Logger;
import java.util.ArrayList;
/**
* Created with IntelliJ IDEA.
* User: youfuli
* To change this template use File | Settings | File Templates.
*/
public class IVMInformationMaintainImpl implements IVMInformationMaintain {
private static Logger logger = Logger.getLogger(IVMInformationMaintainImpl.class);
EC2ConfigOperation ec2Config = new EC2ConfigOperation();
// Initialize variables.
// Create the AmazonEC2Client object so we can call various APIs.
AmazonEC2 ec2 = ec2Config.initAmazonEC2();
public ArrayList<VirtualMachineInformation> getInstanceList() {
ArrayList<VirtualMachineInformation> vmInfoArrayList = new ArrayList<VirtualMachineInformation>();
try {
DescribeInstancesResult describeInstancesResult = ec2.describeInstances();
java.util.List<Reservation> reservations = describeInstancesResult.getReservations();
logger.info("You have " + reservations.size() + " reservations.");
for (Reservation reservation : reservations) {
logger.info(" " + reservation.getReservationId());
java.util.List<Instance> instances = reservation.getInstances();
logger.info("You have " + instances.size() + " instances.");
for (Instance instance : instances) {
VirtualMachineInformation vmInfo = new VirtualMachineInformation();
vmInfo.setVmID(instance.getInstanceId());
//TODO:the virtual machine state should not be set here,update in the next version.
vmInfo.setVmState(Constant.VIRTUAL_MACHINES_STATE_AVAILABLE);
vmInfo.setVmType(instance.getInstanceType());
vmInfo.setVmPrivateIpAddress(instance.getPrivateIpAddress());
vmInfo.setVmPublicIpAddress(instance.getPublicIpAddress());
vmInfo.setVmKeyName(instance.getKeyName());
vmInfoArrayList.add(vmInfo);
/*System.out.println(instance.getInstanceId());
System.out.println(instance.getInstanceType());
System.out.println(instance.getPrivateIpAddress());
System.out.println(instance.getPublicIpAddress());
System.out.println(instance.getKeyName());
//System.out.println(instance.getState());
//System.out.println(" " + instance.getInstanceId() + " " + instance.getInstanceType() + " " + instance.getPrivateIpAddress() + " " + instance.getPublicIpAddress() + " key: " + instance.getKeyName() + " " + instance.getState().getName());
*/
}
}
} catch (AmazonServiceException ase) {
logger.info("Caught Exception: " + ase.getMessage());
}
return vmInfoArrayList;
}
/**
* use cloud platform API to get the last VM information.
*
* @param vmID
* @return
*/
@Override
public VirtualMachineInformation queryVMInformation(String vmID) {
VirtualMachineInformation vmInfo = new VirtualMachineInformation();
try {
DescribeInstancesResult describeInstancesResult = ec2.describeInstances();
java.util.List<Reservation> reservations = describeInstancesResult.getReservations();
for (Reservation reservation : reservations) {
java.util.List<Instance> instances = reservation.getInstances();
for (Instance instance : instances) {
if (instance.getInstanceId().equalsIgnoreCase(vmID)) {
vmInfo.setVmID(instance.getInstanceId());
vmInfo.setVmType(instance.getInstanceType());
vmInfo.setVmPrivateIpAddress(instance.getPrivateIpAddress());
vmInfo.setVmPublicIpAddress(instance.getPublicIpAddress());
vmInfo.setVmKeyName(instance.getKeyName());
}
}
}
} catch (AmazonServiceException ase) {
logger.info("Caught Exception: " + ase.getMessage());
}
return vmInfo;
}
}