Re: Python listDefinedDomains broken?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Daniel,

thanks for that nice answer!


Am 01.06.2016 um 15:03 schrieb Daniel P. Berrange:
On Wed, Jun 01, 2016 at 02:49:26PM +0200, Marc Richter wrote:
Hi everyone,

please, don't roast me if I'm asking stupid things or fail to provide info,
since I'm a freshman, using libvirt.
No problem, we're a friendly lot here :-)

Then a domain named "winxp_ausgeschaltet" is within that list:


  Id    Name                           State
----------------------------------------------------
...
  -     winxp_ausgeschaltet            shut off


When I do the same for the second host, it is also in that list:


  Id    Name                           State
----------------------------------------------------
...
  7     winxp_ausgeschaltet            running


When I do the following in Python, this domain is listed for the first host
(where it's state is "shut off"), but not for the second one:


import libvirt
import sys

class kvmhost:
     def __init__(self, host, keyfile):
         self.conn = self.connect_kvm(host, keyfile)
         self.doms = sorted(self.get_doms())
     def connect_kvm(self, host, keyfile):
         try:
             conn = libvirt.openReadOnly('qemu+ssh://root@' + host +
'/system?keyfile=' + keyfile)
         except libvirt.libvirtError as lve:
             print('Error: ' + str(lve))
             sys.exit(1)
         return conn
     def get_doms(self):
         try:
             alldoms = self.conn.listDefinedDomains()
         except libvirt.libvirtError as lve:
             print('Error: ' + str(lve))
             self.conn.close()
             sys.exit(1)
         return alldoms

host1 = kvmhost('host1', '/path/to/ssh_keyfile')
host2 = kvmhost('host2', '/path/to/ssh_keyfile')

print(host1.doms)
print(host2.doms)


What am I doing wrong here or: is there a missbehavior in libvirt or the
python module?
This is expected behaviour of the listDefinedDomains() API call - though
admittedly somewhat stupid behaviour.

Originally libvirt has a listDomainsIDs API call that only listed guests
that were running.

We then added  listDefinedDomains() call that only listed guests that
were *not* running.

So to get a complete list of guests on the host you had to use *both*
listDomainsIDs and listDefinedDomains().

This had a built-in race condition if a guest started or stopped in
betweeen the 2 API calls. So we introduced 'listAllDomains' as a better
API that can give you a list of *all* domains whether running or stopped.

Great, thanks for explaining this to me!
Then listAllDomains seems like the way to go for me; but even the workaround of combining listDomainsIDs and listDefinedDomains() seems OK, if I cannot resolve the unknown procedure issue.

Using listAllDomains instead of listDefinedDomains gives:

libvirt: Remote Driver error : unknown procedure: 273
I'm really surprised to see that error - this API call has existed
since libvirt 0.9.13 and you say you have 1.3.1 which is more than
new enough

I'm very sorry, my bad: I've queried the wrong server from out of python. You are right: The Host which has this issue is of libvirt version 0.9.2. Testing the call against more recent libvirt works.
Thank you for helping me identifying this fail.

What is the difference between listAllDomains and listDefinedDomains at all?
Essentially listAllDomains() is what any app using modern libvirt should
be using. We recommend ignoring listDefinedDomains & listDomainIDs unless
you need to work with older (ancient) libvirt

Regards,
Daniel

Best regars,
Marc

---
Diese E-Mail wurde von Avast Antivirus-Software auf Viren geprüft.
https://www.avast.com/antivirus


--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]