[libvirt-users] unable to get domain list of KVM guests from libvirt as non-root user

Tom Georgoulias tomg at mcclatchyinteractive.com
Fri Mar 12 13:48:14 UTC 2010


I have a python script that monitors the guest VMs on a servers running 
Xen, but the script doesn't work properly on a server I just built with 
KVM.  The script runs as a non-root user (same on all servers) and 
simply gathers some details on the status and names of the domains 
running on the host.

The Xen and KVM servers are running CentOS 5.4 x86_64 and are using the 
same version of libvirt:

libvirt-0.6.3-20.1.el5_4
libvirt-python-0.6.3-20.1.el5_4

Both Xen and KVM servers have the default libvirt.conf config file and 
the following /var/run/libvirt permissions:

KVM:

[root at kvm ~]# ls -l /var/run/libvirt
total 16
srwx------ 1 root root    0 Mar 12 08:37 libvirt-sock
srwxrwxrwx 1 root root    0 Mar 12 08:37 libvirt-sock-ro
drwxr-xr-x 2 root root 4096 Mar  8 13:05 network
drwxr-xr-x 2 root root 4096 Mar 11 16:17 qemu

Xen:

[root at xen ~]# ls -l /var/run/libvirt
total 16
srwx------ 1 root root    0 Feb  5 08:53 libvirt-sock
srwxrwxrwx 1 root root    0 Feb  5 08:53 libvirt-sock-ro
drwxr-xr-x 2 root root 4096 Jan 21 14:38 network
drwxr-xr-x 2 root root 4096 Oct 20 18:50 qemu

Kernel/hypervisor versions of Xen and KVM servers:

kernel-xen-2.6.18-164.9.1.el5
xen-3.0.3-94.el5_4.2

kvm-83-105.el5_4.27
kvm-qemu-img-83-105.el5_4.27
kernel-2.6.18-164.11.1.el5

To troubleshoot, I've been running python interactively as the non-root 
user.  Here's how my Xen servers behave:

[testu at xen ~]$ python
Python 2.4.3 (#1, Sep  3 2009, 15:37:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
   >>> import libvirt
   >>> conn = libvirt.openReadOnly(None)
   >>> domains = conn.listDomainsID()
   >>> print domains
[0, 3, 15, 16, 21, 24, 26, 30, 32, 36, 38, 41, 43, 45, 47, 49, 51, 55,
63, 67]
   >>>

When I try the same thing on the KVM server:

[testu at kvm ~]$ python
Python 2.4.3 (#1, Sep  3 2009, 15:37:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
   >>> import libvirt
   >>> conn = libvirt.openReadOnly(None)
14:33:07.303: error : No vport operation path found for host0
14:33:07.320: error : No vport operation path found for host4
14:33:07.325: error : No vport operation path found for host3
14:33:07.367: error : No vport operation path found for host1
14:33:07.368: error : No vport operation path found for host2
   >>> domains = conn.listDomainsID()
   >>> print domains
[]
   >>>

However, when logged in as root on the KVM server, it works just like my 
Xen servers:

[root at kvm ~]# python
Python 2.4.3 (#1, Sep  3 2009, 15:37:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
   >>> import libvirt
   >>> conn = libvirt.openReadOnly(None)
   >>> domains = conn.listDomainsID()
   >>> print domains
[1]

As an experiment suggested by a someone on the centos-virt list, I 
modified the ownership and permissions of the socket files in 
/etc/libvirt/libvirtd.conf to use the same user running the python 
script.  That didn't make a difference.

[testu at kvm ~]$ ls -l /var/run/libvirt
total 16
srwxrwx--- 1 root testu     0 Mar 12 07:45 libvirt-sock
srwxrwxrwx 1 root testu     0 Mar 12 07:45 libvirt-sock-ro
drwxr-xr-x 2 root root   4096 Mar  8 13:05 network
drwxr-xr-x 2 root root   4096 Mar 11 16:17 qemu

[testu at kvm ~]$ python
Python 2.4.3 (#1, Sep  3 2009, 15:37:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
  >>> import libvirt
  >>> conn = libvirt.openReadOnly(None)
07:45:56.893: error : No vport operation path found for host0
07:45:56.912: error : No vport operation path found for host4
07:45:56.919: error : No vport operation path found for host3
07:45:56.967: error : No vport operation path found for host1
07:45:56.968: error : No vport operation path found for host2
  >>> domains = conn.listDomainsID()
  >>> print domains
[]
  >>>

Can someone give me some pointers on what to check next?  I'm running 
out of ideas.

Thanks,
Tom




More information about the libvirt-users mailing list