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

Shahar Havivi shaharh at redhat.com
Thu Sep 18 19:10:23 UTC 2014


On 18.09.14 15:00, Juan Hernandez wrote:
> On 09/18/2014 01:39 PM, Chandrahasa S wrote:
> > Dear Juan / All,
> > 
> > Thanks for reply.
> > 
> >  I tried to give the hostname with the tag mentioned "host_name". Its
> > working.
> > 
> >         So below are the issues still remaining:
> > 
> >         1) The issue of internal server error still persits (rhev
> > manager showing issues) even after following the advice of the expert
> > and doing the initialization part just once(giving ip and            
> >  hostname) after creating the vm.
> > 
> 
> Actually this is a bug:
> 
> https://bugzilla.redhat.com/1144005
> 
> The reason is that when you use an incorrect boot protocol we end up
> storing null in the corresponding place in the database, and later we
> use the value without checking it, which triggers a null pointer exception.
> 
> The right value for the boot protocol is "static", not "STATIC_IP". The
> "STATIC_IP" value is what we use in the backend and in the database, but
> in the RESTAPI it is "static".
> 
> To workaround this issue you can delete the VMs and create them again
> with the correct boot protocol.
> 
> If you don't want to create the VMs again you can fix the database
> manually like this:
> 
> # su - postgres
> # psql
> postgres=# \c engine
> engine=# update vm_init set networks = replace(networks, '"bootProtocol"
> : null', '"bootProtocol" : "STATIC_IP"');
> 
> >         2) Please confirm if this is the case that  we can do
> > initialization part only once on a particular vm , then we can
> > reconfigure the network (ip, subnet, gateway etc)
> >             or not for that vm.
> > 
> 
> I'm reasonably sure that you can run initialization only once per VM,
> but Shahar can confirm this better than me.
Yes on RunVm we send the cloud-init params only the first time, ie when the
is_initialized flag is false in vm_static table,
You can resend the existing cloud-init params (and override them) via the
RunOnce - I believe that if you run the VM via Rest with the <initialization>
section it will run via RunOnce.
> 
> >         3) For Windows guest we are still unable to provide ip details
> > and hostname using sysprep/payload.
> > 
> 
> I'm not familiar with Sysprep. Can you provide an example of the code
> that you are using for that?
In 3.5 we have a filed vm_hostname, regarding the IP you can provide the
Sysprep file in the Initialization/Sysprep elements (not sure that is the
right name, Juan?) - please note that if you do provide it we send the Sysprep
as is and not replace the vm_hostname and other fields that user provided.
> 
> > Error attached.
> > 
> > 
> > 
> > Regards,
> > Chandrahasa S
> > 
> > 
> > 
> > From:        Juan Hernandez <jhernand at redhat.com>
> > To:        Chandrahasa S <chandrahasa.s at tcs.com>, users at ovirt.org
> > Cc:        Agarwal Ruchita <agarwal.ruchita at tcs.com>
> > Date:        09/18/2014 03:35 PM
> > Subject:        Re: [ovirt-users] Error while using REST API with Ovirt
> > ------------------------------------------------------------------------
> > 
> > 
> > 
> > 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