package com.cattles.resourcePoolManagement; import com.cattles.virtualMachineManagement.IVirtualMachineOperationimpl; import com.cattles.virtualMachineManagement.VirtualMachineInformation; import org.apache.log4j.Logger; import java.util.ArrayList; public class VirtualMachineResourcePool { private static Logger logger = Logger.getLogger(VirtualMachineResourcePool.class); private static VirtualMachineResourcePool vmResourcePool = null; XMLOperationVirtualMachine xmlOperationVirtualMachine = XMLOperationVirtualMachine.getXmlOperationVirtualMachine(); IVirtualMachineOperationimpl vmOperation = new IVirtualMachineOperationimpl(); private VirtualMachineResourcePool() { } public static synchronized VirtualMachineResourcePool getResourcePool() { if (vmResourcePool == null) { vmResourcePool = new VirtualMachineResourcePool(); } return vmResourcePool; } public ArrayList<VirtualMachineInformation> initialization(int poolSize) { ArrayList<VirtualMachineInformation> vmInfoArrayList = new ArrayList<VirtualMachineInformation>(); logger.info("Initializing the Resource Pool!"); vmInfoArrayList = applyVMs(poolSize); return vmInfoArrayList; } /** * get all the virtual machines listed in the VirtualMachines.xml * * @return */ public ArrayList<VirtualMachineInformation> getVMResourceList() { ArrayList<VirtualMachineInformation> VMResourceList = xmlOperationVirtualMachine.getAllVMs(); return VMResourceList; } /** * get the virtual machines with specified state. * * @param _state * @return */ public ArrayList<VirtualMachineInformation> getVMWithState(String _state) { ArrayList<VirtualMachineInformation> vmInfoArrayList = xmlOperationVirtualMachine.getVMsWithState(_state); return vmInfoArrayList; } public int checkPoolSize() { int vmCount = xmlOperationVirtualMachine.getVMCount(); return vmCount; } public VirtualMachineInformation getVMWithID(String _vmID) { VirtualMachineInformation vmInfo = new VirtualMachineInformation(); vmInfo = xmlOperationVirtualMachine.getVMByID(_vmID); return vmInfo; } /** * when the VMs number in the resource pool is not enough, use this method to apply VMs from the underlying Cloud Computing platform * * @param _vmNum * @return */ public ArrayList<VirtualMachineInformation> applyVMs(int _vmNum) { ArrayList<VirtualMachineInformation> applyVMList = new ArrayList<VirtualMachineInformation>(); //apply VMs from the underlying Cloud Computing platform try { logger.info("Applying virtual resources from the underlying Cloud Computing platform!"); applyVMList = vmOperation.createInstances(_vmNum); this.addVMs(applyVMList); } catch (Exception e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } return applyVMList; } public void addVMs(ArrayList<VirtualMachineInformation> VMList) { xmlOperationVirtualMachine.addVMs(VMList); } /** * Use the method to modify the state of the specified VM * * @param _vmID * @param _state */ public boolean modidyVMState(String _vmID, String _state) { boolean success = false; success = xmlOperationVirtualMachine.modifyVMState(_vmID, _state); return success; } /** * use this method to modify a batch of VMs' state * * @param _vmIDList * @param _state * @return */ public boolean modifyVMsState(ArrayList<String> _vmIDList, String _state) { boolean success = false; success = xmlOperationVirtualMachine.modifyVMsState(_vmIDList, _state); return success; } }