[Users] [rhevm-api] Need help to Start and Stop VM using Java SDK

Juan Hernandez jhernand at redhat.com
Wed Feb 12 13:34:12 EST 2014


On 02/12/2014 10:08 AM, Tejesh M wrote:
> Thanks Juan... I'm in process of automating VM creation from Template &
> i want to assign random root password.. can you suggest whether is it
> possible via java SDK?
> 

This is possible with a combination of cloud-init and the Java SDK.

First you will need to create a VM manually, install the cloud-init
package, and then make a template from this VM. Once you have this
template you can use something like the following to create a VM from
that template, and start it so that cloud-init will assign the password
you want:

  // Generate the random password, using whatever mechanism you
  // prefer:
  String password = ...;

  // You need to know the name of the template, the cluster and
  // the VM you are going to create:
  String templateName = "mytemplate";
  String clusterName = "mycluster";
  String vmName = "myvm";

  // Prepare the data to create the VM from the template:
  Template templateData = new Template();
  templateData.setName(templateName);
  Cluster clusterData = new Cluster();
  clusterData.setName(clusterName);
  VM vmDataForCreate = new VM();
  vmDataForCreate.setName(vmName);
  vmDataForCreate.setCluster(clusterData);
  vmDataForCreate.setTemplate(templateData);

  // Send the request to create the VM to the server:
  api.getVMs().add(vmDataForCreate);

  // White till the VM is down (it will be locked for a while):
  for (;;) {
    String state = api.getVMs().get(vmName).getStatus().getState();
    if ("down".equals(state)) {
      break;
    }
    Thread.sleep(1000);
  }

  // Populate parameters for the action to start the VM with cloud-init:
  User userData = new User();
  userData.setUserName("root");
  userData.setPassword(password);
  Users usersData = new Users();
  usersData.getUsers().add(userData);
  CloudInit cloudData = new CloudInit();
  cloudData.setUsers(usersData);
  Initialization initData = new Initialization();
  initData.setCloudInit(cloudData);
  VM vmDataForStart = new VM();
  vmDataForStart.setInitialization(initData);
  Action actionData = new Action();
  actionData.setVm(vmDataForStart);

  // Send the request to start the VM to the server:
  api.getVMs().get(vmName).start(actionData);

> 
>   
> 
> 
> On Tue, Feb 11, 2014 at 9:01 PM, Juan Hernandez <jhernand at redhat.com
> <mailto:jhernand at redhat.com>> wrote:
> 
>     On 02/11/2014 04:16 PM, Itamar Heim wrote:
>     > On 02/11/2014 04:55 PM, Tejesh M wrote:
>     >> Thanks for your fast response.
>     >>
>     >> But intelli sense is not listing vm.*start *function
>     >>
> 
>     This is because you are using the VM class from the
>     org.ovirt.engine.sdk.entities package, instead of from the
>     org.ovirt.engine.sdk.decorators package.
> 
>     The entities package contains classes that plain containers for the data
>     that is sent to and received from the server.
> 
>     The decorators package contains classes that extend those plain
>     containers adding functionality like the action methods.
> 
>     >> I'm using rhevm-sdk-java-1.0.0.29-1.jar
>     >>
>     >> _*code:*_
>     >>
>     >> import org.ovirt.engine.sdk.Api;
>     >> import org.ovirt.engine.sdk.common.*;
>     >> import org.ovirt.engine.sdk.decorators.VMDisk;
>     >> import org.ovirt.engine.sdk.entities.*;
>     >> import org.apache.commons.beanutils.*;
>     >>
>     >>
>     >> public class rhvm {
>     >>      static Api api;
>     >>      public static void callAPI()
>     >>      {
>     >>          try{
>     >>
>     >>          api = new Api("https://rhevm:443/api", "admin at internal",
>     >> "password");
>     >>
>     >>
>     >>          org.ovirt.engine.sdk.entities.VM vm =
>     >> api.getVMs().get("testVM3"); //get VM
> 
>     If you want to be able to use the "start" method you will need something
>     like this:
> 
>     org.ovirt.engine.sdk.decorators.VM vm = api.getVMs().get("testVM3");
> 
>     Then your IDE will show you the additional methods in the decorator,
>     including the "start" method.
> 
>     >>          vm.setDescription("java_sdk");
>     >>
>     >>          System.out.print("VM ID:" + vm.getStatus().getState());
>     >>          System.out.print("VM ID:" + vm.getId());
>     >>
>     >>
>     >>          }
>     >>          catch(Exception e)
>     >>          {
>     >>              System.out.print(e);
>     >>          }
>     >>          finally {
>     >>               api.shutdown();
>     >>           }
>     >>      }
>     >> public static void main(String a[]) throws Exception
>     >> {
>     >>      //rhvm obj = new rhvm();
>     >>      callAPI();
>     >>      System.out.println("\ncompleted");
>     >> }
>     >> }
>     >>
>     >>
>     >>
>     >>
>     >> On Tue, Feb 11, 2014 at 8:08 PM, Ewoud Kohl van Wijngaarden
>     >> <ewoud+rhevm-api at kohlvanwijngaarden.nl
>     <mailto:ewoud%2Brhevm-api at kohlvanwijngaarden.nl>
>     >> <mailto:ewoud+rhevm-api at kohlvanwijngaarden.nl
>     <mailto:ewoud%2Brhevm-api at kohlvanwijngaarden.nl>>> wrote:
>     >>
>     >>     On Tue, Feb 11, 2014 at 08:00:57PM +0530, Tejesh M wrote:
>     >>      > Can anyone share sample on how to Start & Stop VM using
>     Java SDK? I
>     >>      > couldn't find any document on JAVA SDK for RHEVM.
>     >>
>     >>     While this list hasn't been in use for some time, I hope I
>     can still
>     >>     point you
>     >>     in the right direction.
>     http://www.ovirt.org/Java-sdk#Examples has the
>     >>     following examples:
>     >>
>     >>     // -- Create proxy
>     >>
>     >>     // #1 - import
>     >>     import org.ovirt.engine.sdk.Api;
>     >>
>     >>     // #2 - create proxy
>     >>     Api api = new Api("http://localhost:8080/api", "user at domain",
>     >>     "password");
>     >>
>     >>     // -- perform an action on resource
>     >>
>     >>     // #1 - fetch resource
>     >>     VM vm = api.getVMs().get("test");
>     >>
>     >>     // #2 - create params + perform an action
>     >>     Action res = vm.start(new Action() {
>     >>              {
>     >>                      setVm(new org.ovirt.engine.sdk.entities.VM());
>     >>              }
>     >>     });
>     >>
>     >>     I'd guess vm.stop is exactly the same as vm.start.
>     >>     _______________________________________________
>     >>     rhevm-api mailing list
>     >>     rhevm-api at lists.fedorahosted.org
>     <mailto:rhevm-api at lists.fedorahosted.org>
>     >>     <mailto:rhevm-api at lists.fedorahosted.org
>     <mailto:rhevm-api at lists.fedorahosted.org>>
>     >>     https://lists.fedorahosted.org/mailman/listinfo/rhevm-api
>     >>
>     >>
>     >>
>     >>
>     >> --
>     >> Thanks & Regards
>     >> Tejesh
>     >>
>     >>
>     >> _______________________________________________
>     >> rhevm-api mailing list
>     >> rhevm-api at lists.fedorahosted.org
>     <mailto:rhevm-api at lists.fedorahosted.org>
>     >> https://lists.fedorahosted.org/mailman/listinfo/rhevm-api
>     >>
>     >
>     > moving to users at ovirt.org...
>     >
>     > thanks,
>     >     Itamar


-- 
Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta
3ºD, 28016 Madrid, Spain
Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.


More information about the Users mailing list