libvirt-hook-qemu
libvirt-hook-qemu copied to clipboard
ValueError: need more than 0 values to unpack
Hey,
first of all, thanks for the script. Unfortunately though, it is not working for me. When starting the virtual machine it fails with error code 256. Starting the script from the shell results in the following error:
root@debiantest:/etc/libvirt/hooks# ./qemu
Traceback (most recent call last):
File "./qemu", line 96, in
This is on a debian wheezy machine with python 2.7.3.
oh, and test_qemu.py also fails:
root@debiantest:~/libvirt-hook-qemu-master# python test_qemu.py
Traceback (most recent call last):
File "test_qemu.py", line 5, in
Could you give me a hint what is going on here?
Thanks!
You need the libvirt-python package.
I guess you mean python-libvirt, right? I had that installed already
dpkg -s python-libvirt Package: python-libvirt Status: install ok installed Priority: optional Section: python Installed-Size: 2177 Maintainer: Debian Libvirt Maintainers [email protected] Architecture: amd64 Source: libvirt Version: 0.9.12.3-1+deb7u1 Provides: python2.6-libvirt, python2.7-libvirt
First error is because you didn't pass all the argument on the command-line (as libvirtd would) and the hook's code failed to validate that before unpacking.
Second error is because it's trying to import the hook's code as a python module. ln -s qemu qemu.py
and try again please.
Yeah, well, that makes sense now that you say it ;)
linking qemu.py to qemu and starting test_qemu.py again finishes without any error, or any other message for that matter.
I tried to lookup the arguments that qemu passes on and I thought this is what the arguments should look like, but that also fails.
./qemu debian7 prepare begin -
Unfortunately the libvirt.log only states: Hook script /etc/libvirt/hooks/qemu qemu failed with error code 256
My understanding was the exit code of the hook script != 0 wil result in error code 256 with the output of stderr, but there is no additional information that indicates what is wrong. Btw. this is how the qemu.json file looks:
{ "debian7": { "interface": "virbr0", "private_ip": "192.168.122.216", "port_map": { "tcp": [[2222, 22]] } }
hhttps://www.libvirt.org/hooks.html#structure
You might be missing an extra "}" at the end. I usually like to run my json files through jq: cat file.son | jq '.'
sigh
Sorry that I wasted your time with this nonsense, of course I was missing an extra } at the end. Thanks for your help.
Although the machine starts up and I can see the iptable rules, the port forwarding still isn't working, which is the same issue I had with the other solutions that you can find on the internet. Damn it...
No worries! I got it to work here pretty much painlessly (for a change). My setup was using a single bridge, where I got the public IPs (actually, my lab's private IPs) and from there it would forward to the VM. It might be worth running tcpdump on the bridge interface and inside the guests to see what's arriving (and if the packets are mangled or not).
[root@CentOS-71-64-minimal hooks]# virsh start Guest --console
error: Failed to start domain Guest
error: Hook script execution failed: internal error: Child process (LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin /etc/libvirt/hooks/qemu StageMain prepare begin -) unexpected exit status 1: Traceback (most recent call last):
File "/etc/libvirt/hooks/qemu", line 97, in
Just filed a PR that addresses the unit test part of this issue: https://github.com/saschpe/libvirt-hook-qemu/pull/6/files
Yes, running the test script should produce output:
----------------------------------------------------------------------
Ran 3 tests in 0.026s
OK
If not, the tests didn't run.
@extr3mal it looks like you have an error in your JSON file (or did, 6 months ago...)
#6 is in. @hillbicks, is there anything more that needs to be done to address this PR?