[ovirt-users] Creating templates in a blocking fashion from Python SDK

Juan Hernández jhernand at redhat.com
Mon Apr 11 09:20:38 UTC 2016


On 04/10/2016 12:16 PM, Yaniv Kaul wrote:
> 
> 
> On Sun, Apr 10, 2016 at 11:02 AM, Yedidyah Bar David <didi at redhat.com
> <mailto:didi at redhat.com>> wrote:
> 
>     On Sun, Apr 10, 2016 at 10:43 AM, Barak Korren <bkorren at redhat.com
>     <mailto:bkorren at redhat.com>> wrote:
>     > Hi there, I use the following Python SDK snippet to create a template
>     > from an existing VM:
>     >
>     >     templ = ovirt.templates.add(
>     >         ovirtsdk.xml.Template(vm=vm, name=vm.name <http://vm.name>)
>     >     )
>     >
>     > This seems to launch a template creation task in a non-blocking
>     > manner, which makes the next command I run, which tries to delete the
>     > VM, fail because the VM is still locked by the template creation task.
>     >
>     > Is there a way to block on the template creation task and not return
>     > to the code until it finishes?
> 
>     I don't think so, but you can loop waiting, see e.g.:
> 
>     http://www.ovirt.org/develop/api/pythonapi/#create-a-template-from-vm
> 
> 
> I wish we could have an extra parameters on the Python SDK that would do
> this exact loop for us, since essentially most use cases require this.
> I'm not sure it is relevant only for template creation, btw.
> What is also more annoying, is that this loop (IIRC) will never break,
> if something bad happens and the template ends up in a state != down
> (such as locked).
> (Same issue I've just had with host installation - Iv'e waited endlessly
> for it to be in 'up' state, only to find out it ended in
> 'installed_failed' state).
> Y.
>  

The API already has mechanisms to run operations in a synchronous
fashion, and they caused more problems than they solved.

For example, all actions have an "async" parameter, that indicates, when
the values is "false", if the API should wait for all the reported
backend activities to finish. The problem is that the meaning of
"reported backend activities" may be different from what you expect:
some backend activities aren't reported, see bug 1199011.

In addition the backend doesn't have any commitment to keep reporting
activities in a backwards compatible fashion. What is reported in
version 3.5 may not be reported in version 3.6.

So the only reliable mechanism to wait for activities to finish is to
check them explicitly, looping and checking the status. This is the only
mechanism that we can support and recommend.

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