[ovirt-users] Error while using REST API with Ovirt

Juan Hernandez jhernand at redhat.com
Thu Sep 18 06:05:20 EDT 2014


On 09/18/2014 08:18 AM, Chandrahasa S wrote:
> Dear Experts.
> 
> We are Integrating our internal cloud portal with  Ovirt / RHEVM version
> 3.4.
> 
> We are integrating our internal cloud with Ovirt / RHEVM. VM template
> created using cloud init.
> 
> Through REST API Nippet while codes passes command to template ( with
> cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM
> through code.
> 
> But post this Manager getting handed. Error code is attached.
> 
> Need your help please.
> 

If I understand correctly you already created a template with the cloud
init configuration, then you created a VM from that template, and you
want to modify it and start it. In order to update the VM you need to
issue a PUT request, and the tag name for the host is "host_name":

    String updateXml =
          "<?xml version=\"1.0\"?>"
        + "<vm>"
        +   "<initialization>"
        +     "<host_name>meghaasadmin.ultimatixuat.net</host_name>"
        +     "<regenerate_ssh_keys>false</regenerate_ssh_keys>"
        +     "<nic_configurations>"
        +       "<nic_configuration>"
        +         "<name>eth0</name>"
        +         "<ip address=\"1.1.1.1\" netmask=\"255.255.255.0\"
gateway=\"13.3.3.3\"/>"
        +         "<boot_protocol>static</boot_protocol>"
        +         "<on_boot>true</on_boot>"
        +       "</nic_configuration>"
        +     "</nic_configurations>"
        +   "</initialization>"
        + "</vm>";
    StringEntity updateEntity = new StringEntity(updateXml);
    HttpPut updateRequest = new HttpPut(apiUrl + "/vms/" + vmId);
    updateRequest.setHeader("Content-Type", "application/xml");
    updateRequest.setHeader("Accept", "application/xml");
    updateRequest.setEntity(updateEntity);
    HttpResponse updateResponse = client.execute(updateRequest);

Then, after the update, you need to start the VM and it will use that
configuration:

    String startXml =
          "<?xml version=\"1.0\"?>"
        + "<action/>";
    StringEntity startEntity = new StringEntity(startXml);
    HttpPost startRequest = new HttpPost(apiUrl + "/vms/" + vmId +
"/start");
    startRequest.setEntity(startEntity);
    startRequest.setHeader("Content-Type", "application/xml");
    startRequest.setHeader("Accept", "application/xml");
    HttpResponse startResponse = client.execute(startRequest);

Some advices:

* Check the XML schema for the structure of the XML documents:

  https://rhevmanager/api?schema

* When sending requests to the RESTAPI makes sure to always explicitly
add the Content-Type and Accept headers:

  yourRequest.setHeader("Content-Type", "application/xml");
  yourRequest.setHeader("Accept", "application/xml");

* Take into account that the initialization with cloud-init will only be
executed the first time you start the VM, so in your tests you will need
to remove the VM and create it again.

* If you are planning to do complex things you may find it helpful the
Java SDK:

  http://www.ovirt.org/Java-sdk

-- 
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