libvirt-hook-qemu icon indicating copy to clipboard operation
libvirt-hook-qemu copied to clipboard

ValueError: need more than 0 values to unpack

Open hillbicks opened this issue 9 years ago • 10 comments

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 vir_domain, action = sys.argv[1:3] ValueError: need more than 0 values to unpack

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 import qemu # Our local libvirt hooks module ImportError: No module named qemu

Could you give me a hint what is going on here?

Thanks!

hillbicks avatar Apr 17 '15 14:04 hillbicks

You need the libvirt-python package.

gtirloni avatar Apr 17 '15 14:04 gtirloni

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

hillbicks avatar Apr 17 '15 14:04 hillbicks

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.

gtirloni avatar Apr 17 '15 14:04 gtirloni

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

hillbicks avatar Apr 17 '15 15:04 hillbicks

You might be missing an extra "}" at the end. I usually like to run my json files through jq: cat file.son | jq '.'

gtirloni avatar Apr 17 '15 15:04 gtirloni

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

hillbicks avatar Apr 17 '15 16:04 hillbicks

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

gtirloni avatar Apr 17 '15 16:04 gtirloni

[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 domain = config().get(vir_domain) File "/etc/libvirt/hooks/qemu", line 51, in config config._conf = json.load(f) File "/usr/lib64/python2.7/json/init.py", line 290, in load **kw) File "/usr/lib64/python2.7/json/init.py", line 338, in loads return _default_decoder.decode(s) File "/usr/lib64/python2.7/json/decoder.py", line 365, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib64/python2.7/json/decoder.py", line 381, in raw_decode obj, end = self.scan_once(s, idx) ValueError: Expecting property name: line 7 column 8 (char 115)

extr3mal avatar May 27 '15 08:05 extr3mal

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

bronson avatar Dec 08 '15 02:12 bronson

#6 is in. @hillbicks, is there anything more that needs to be done to address this PR?

bronson avatar Dec 17 '15 00:12 bronson