System.out.println("Virtual Machine Template:\n" + vmTemplate);
System.out.println();
System.out.print("Trying to allocate the virtual machine... ");
OneResponse rc = VirtualMachine.allocate(oneClient, vmTemplate);
if( rc.isError() )
{
System.out.println( "failed!");
throw new Exception( rc.getErrorMessage() );
}
// The response message is the new VM's ID
int newVMID = Integer.parseInt(rc.getMessage());
System.out.println("ok, ID " + newVMID + ".");
// We can create a representation for the new VM, using the returned
// VM-ID
VirtualMachine vm = new VirtualMachine(newVMID, oneClient);
// Let's hold the VM, so the scheduler won't try to deploy it
System.out.print("Trying to hold the new VM... ");
rc = vm.hold();
if(rc.isError())
{
System.out.println("failed!");
throw new Exception( rc.getErrorMessage() );
}
else
System.out.println("ok.");
// And now we can request its information.
rc = vm.info();
if(rc.isError())
throw new Exception( rc.getErrorMessage() );
System.out.println();
System.out.println(
"This is the information OpenNebula stores for the new VM:");
System.out.println(rc.getMessage() + "\n");
// This VirtualMachine object has some helpers, so we can access its
// attributes easily (remember to load the data first using the info
// method).
System.out.println("The new VM " +
vm.getName() + " has status: " + vm.status());
// And we can also use xpath expressions
System.out.println("The path of the disk is");
System.out.println( "\t" + vm.xpath("template/disk/source") );
// Let's delete the VirtualMachine object.
vm = null;
// The reference is lost, but we can ask OpenNebula about the VM
// again. This time however, we are going to use the VM pool
VirtualMachinePool vmPool = new VirtualMachinePool(oneClient);
// Remember that we have to ask the pool to retrieve the information
// from OpenNebula
rc = vmPool.info();
if(rc.isError())
throw new Exception( rc.getErrorMessage() );
System.out.println(
"\nThese are all the Virtual Machines in the pool:");
for ( VirtualMachine vmachine : vmPool )
{
System.out.println("\tID :" + vmachine.getId() +
", Name :" + vmachine.getName() );
// Check if we have found the VM we are looking for
if ( vmachine.getId().equals( ""+newVMID ) )
{
vm = vmachine;
}
}
// We have also some useful helpers for the actions you can perform
// on a virtual machine, like cancel:
rc = vm.cancel();
System.out.println("\nTrying to cancel the VM " + vm.getId() +
" (should fail)...");
// This is all the information you can get from the OneResponse:
System.out.println("\tOpenNebula response");
System.out.println("\t Error: " + rc.isError());
System.out.println("\t Msg: " + rc.getMessage());
System.out.println("\t ErrMsg: " + rc.getErrorMessage());
rc = vm.finalizeVM();
System.out.println("\nTrying to finalize (delete) the VM " +
vm.getId() + "...");
System.out.println("\tOpenNebula response");
System.out.println("\t Error: " + rc.isError());
System.out.println("\t Msg: " + rc.getMessage());
System.out.println("\t ErrMsg: " + rc.getErrorMessage());
}
catch (Exception e)
{