Tom Georgoulias
2010-Mar-12 13:48 UTC
[libvirt-users] unable to get domain list of KVM guests from libvirt as non-root user
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
Daniel Veillard
2010-Mar-12 14:18 UTC
[libvirt-users] unable to get domain list of KVM guests from libvirt as non-root user
On Fri, Mar 12, 2010 at 08:48:14AM -0500, Tom Georgoulias wrote:> 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: >[...]> 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 host2http://libvirt.org/uri.html try libvirt.openReadOnly("qemu:///system") Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/