Hi List,
Facing issues trying to use virDomainAttachDevice API of libvirt
from python.
Here is what I am trying to do
1) Setup qemu-nbd to export a qcow2 disk image over unix socket on my
localhost
qemu-nbd -t -k /tmp/mysock2 /home/dpkshetty/work/img/iscsi_disk
The above blocks. and i am able to use
qemu-system-x86_64 -drive file=nbd:unix:/tmp/mysock2
Just to test it...and it works. Since currently the disk is a blank
disk.. I see "No bootable device" and QEMU stops.. whcih is expected
So qemu-nbd is setup and working properly
2)
>> print nbdxml
<disk type='network'
device='disk'>
<driver name="qemu" type="qcow2"/>
<source protocol="nbd">
<host name="deepakcs-lx" port="10809"
transport="unix"
socket="/tmp/mysock2" />
</source>
<target dev="vdc" bus="virtio" />
</disk>
>> dom.attachDevice(nbdxml)
libvir: QEMU error : operation
failed: open disk image file failed
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 400, in
attachDevice
if ret == -1: raise libvirtError ('virDomainAttachDevice() failed',
dom=self)
libvirt.libvirtError: operation failed: open disk image file failed
and I see... in the VM's log....
inet_connect_opts:
connect(ipv4,deepakcs-lx.local.lan,192.168.1.7,10809): Connection refused
3) I tried usign virsh attach-device.. and the same problem happens
4) firewall/iptables are not running. SELinux is permissive
5) I tried appending -p 1111 to the qemu-nbd cmdline and using
port="1111" in the XML.. but that doesn't help, see the same error
Questions/Observations :
1) What am i doing wrong here ? In the <host> tag, port attr is
mandatory.. but looking at `netstat -nptl` I don't see any process
listeing on 10809 or 1111 (when i gave -p 1111 ).
So does this mean there is no way for libvirt to just directly open the
socket and use it.. Its trying to connect to the port i give in the XML
and since no one is listening there.. it fails.. hence the error seen in
the VM logs.... Has anybody tryign usign qemu-nbd and attaching that
disk as I am doign above ? Is it legal, if not, why ?
2) The VM/Domain is active during all of the above steps.
3) IIUC... for the above usecase... port attr of <host> should be
optional... such that libvirt can directly do the equivalent of ` -drive
file=nbd:unix:/tmp/mysock2` and add this as a NBD device to the runnign
guest/Domain... but currently port and hostname are mandatory. For unix
sockets... hostname will always be local...so i feel both hostname &
port should be optional for the above usecase ?
4) I haven't yet tried doing the above when guest/Domain is Inactive.
5) I haven't yet tried doing the above usign nbd-server or qemu-nbd
usign -c option (which i believe starts qemu-nbd in server mode, but
need nbd.ko kernel module to be loaded).
I am hoping using either of these might get it working... since we have
a process listening on a port on the host... but I wanted to get this
working using plain unix sockets.. lightweight and doesn't need nbd.ko
Comments/Suggestions appreciated.
thanx,
deepak