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