package com.cattles.cloudplatforms.openstack;
import com.cattles.cloudplatforms.interfaces.IVirtualMachineOperation;
import com.cattles.util.Constant;
import com.cattles.virtualMachineManagement.VirtualMachineInformation;
import com.google.common.io.Closeables;
import org.apache.log4j.Logger;
import org.jclouds.compute.ComputeService;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.domain.RebootType;
import org.jclouds.openstack.nova.v2_0.domain.Server;
import org.jclouds.openstack.nova.v2_0.domain.ServerCreated;
import org.jclouds.openstack.nova.v2_0.features.ServerApi;
import org.jclouds.openstack.nova.v2_0.options.CreateServerOptions;
import java.util.ArrayList;
import java.util.Set;
/**
* Created with IntelliJ IDEA.
* User: youfuli
* Date: 8/24/14
* Time: 11:19 PM
* To change this template use File | Settings | File Templates.
*/
public class OpenStackVMOperationImpl implements IVirtualMachineOperation {
private static Logger logger = Logger.getLogger(OpenStackVMOperationImpl.class);
public OpenStackConfigOperation openStackConfigOperation=new OpenStackConfigOperation();
private final NovaApi novaApi=openStackConfigOperation.initNovaApi();
private final String zone="RegionOne";
public ComputeService computeService=openStackConfigOperation.initComputeService();
@Override
public ArrayList<VirtualMachineInformation> createInstances(int vmNumber) throws Exception {
ArrayList<VirtualMachineInformation> instanceList = new ArrayList<VirtualMachineInformation>();
ServerApi serverApi= novaApi.getServerApiForZone(zone);
CreateServerOptions options = new CreateServerOptions().availabilityZone("nova").networks("613f9b74-1fc9-460b-ae15-b6cef678a249");
for(int i=0;i< vmNumber;i++){
logger.info("here");
ServerCreated serverCreated= serverApi.create("test01","b72e4c21-deb0-43e3-b010-9d354566b35f","2",options);
System.out.println("#######################################lalal#########################################");
System.out.print("server name:"+serverCreated.getName());
Server serverDetails=serverApi.get(serverCreated.getId());
VirtualMachineInformation virtualMachineInformation=new VirtualMachineInformation();
virtualMachineInformation.setVmID(serverDetails.getId());
virtualMachineInformation.setVmState(Constant.VIRTUAL_MACHINES_STATE_AVAILABLE);
virtualMachineInformation.setVmHostname(serverDetails.getName());
virtualMachineInformation.setVmPort("");
virtualMachineInformation.setVmKeyName(serverDetails.getKeyName());
virtualMachineInformation.setVmPrivateIpAddress(serverDetails.getAccessIPv4());
virtualMachineInformation.setVmPublicIpAddress(serverDetails.getAccessIPv4());
virtualMachineInformation.setVmType(serverDetails.getFlavor().getName());
//the information above is not correct, need to be adjusted
instanceList.add(virtualMachineInformation);
}
Closeables.close(novaApi, true);
return instanceList; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public VirtualMachineInformation launchInstance(VirtualMachineInformation _VMInfo) throws Exception {
VirtualMachineInformation virtualMachineInformation=new VirtualMachineInformation();
ServerApi serverApi= novaApi.getServerApiForZone(zone);
serverApi.start(_VMInfo.getVmID());
return virtualMachineInformation; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public ArrayList<VirtualMachineInformation> launchInstances(ArrayList<VirtualMachineInformation> vmList) throws Exception {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean shutdownInstance(VirtualMachineInformation _VMInfo) throws Exception {
ServerApi serverApi= novaApi.getServerApiForZone(zone);
serverApi.stop(_VMInfo.getVmID());
return true; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean shutdownInstances(ArrayList<VirtualMachineInformation> vmList) throws Exception {
ServerApi serverApi= novaApi.getServerApiForZone(zone);
for (VirtualMachineInformation vmInfo:vmList){
serverApi.stop(vmInfo.getVmID());
}
return true; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public VirtualMachineInformation rebootInstance(VirtualMachineInformation _VMInfo) throws Exception {
ServerApi serverApi= novaApi.getServerApiForZone(zone);
serverApi.reboot(_VMInfo.getVmID(), RebootType.SOFT);
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public ArrayList<VirtualMachineInformation> rebootInstances(ArrayList<VirtualMachineInformation> vmList) throws Exception {
ServerApi serverApi= novaApi.getServerApiForZone(zone);
for (VirtualMachineInformation vmInfo:vmList){
serverApi.reboot(vmInfo.getVmID(),RebootType.SOFT);
}
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean destroyInstances(ArrayList<VirtualMachineInformation> vmList) throws Exception {
ServerApi serverApi= novaApi.getServerApiForZone(zone);
for (VirtualMachineInformation vmInfo:vmList){
serverApi.delete(vmInfo.getVmID());
}
return true; //To change body of implemented methods use File | Settings | File Templates.
}
public Set<String> getZones(){
Set<String> zones=novaApi.getConfiguredZones();
return zones;
}
public static void main(String[] args){
OpenStackVMOperationImpl openStackVMOperation=new OpenStackVMOperationImpl();
/*VirtualMachineInformation virtualMachineInformation=new VirtualMachineInformation();
virtualMachineInformation.setVmID("605855cf-46dd-4c14-8608-8bf5ac9cea73");
virtualMachineInformation.setVmHostname("test");
virtualMachineInformation.setVmPrivateIpAddress("192.168.100.10");*/
try {
openStackVMOperation.createInstances(1);
//openStackVMOperation.shutdownInstance(virtualMachineInformation);
} catch (Exception e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}