Am 26-02-2014 17:55, schrieb Rodrigo Trujillo:
However I think you are only seeing the case where the flow just works, you did not took in account that
rollbacks are used in case of errors/crashes/fails in the middle of test.
You are right, I did not see the cases when the test fails.
If the code breaks in (4), while starting the vm (receive an exception), how would you remove the vms created above (1)(2) ? I asked myself this.
The option I could think know is to add try/except in the code, but, the with/rollback was implemented exactly for this (or to avoid this).
I also tried to split with/rollback, but this does not work.
One solution would be to remove the VMs by their UUIDs instead of by their names. The UUID is a unique value and it never changes, so the deferred commands would always work, even if the VM name changes.

However the Kimchi function "vm_delete" expects only a name, not a UUID (which, IMO, was not a good design, given that libvirt allows us to lookup VMs by names and UUIDs). So I do not see an easy way to solve this properly without having "vm_delete" to accept something like a domain object instead of its name.

The function "_rollback_wrapper" still looks ugly though.