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