On 23.08.2016 13:03, Christian Loehle wrote: > I'm trying to use virt-manager with a custom libvirt hypervisor driver.
Wow, custom hypervisor driver? Sounds interesting - for what hypervisor it is? > My current problem is that virt-manager closes the connection because > virNodeGetInfo(the python binding) returns None: > Traceback (most recent call last): > File > "/home/cloehle/Documents/libvirt/virt-manager/virtManager/connection.py", > line 1390, in tick_from_engine > self._tick(*args, **kwargs) > File > "/home/cloehle/Documents/libvirt/virt-manager/virtManager/connection.py", > line 1280, in _tick > self._hostinfo = self._backend.getInfo() > File "/usr/lib/python2.7/dist-packages/libvirt.py", line 3612, in getInfo > if ret is None: raise libvirtError ('virNodeGetInfo() failed', conn=self) > libvirtError: internal error: client socket is closed > > The virNodeGetInfo function of my driver should set a valid virNodeInfoPtr, > since it only consists of the line: > return nodeGetInfo(NULL, info); Ah, this is the problem. You may want to look how other drivers do this. For instance, qemu driver defines its own implementation: .nodeGetInfo = qemuNodeGetInfo, /* 0.2.0 */ static int qemuNodeGetInfo(virConnectPtr conn, virNodeInfoPtr nodeinfo) { if (virNodeGetInfoEnsureACL(conn) < 0) return -1; return nodeGetInfo(nodeinfo); } > virsh shows no problems which is why I suspect this is a problem with > libvirt-python. This looks suspicious, are you sure you have the correct connection URI in virsh? > So I looked at the source and the first thing that I noticed is in line 2753 > of libvirt-override.c: > if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetInfo", &pyobj_conn)) > return NULL; > > Since this is for virNodeGetInfo this should probably be virNodeGetInfo > instead of domain(the same thing occurs in line 2794 for another function). Yeah, nice catch! But those are just prefixes for some error messages [1]. Nevertheless, I've posted a fix for that [2]. > This could be my source of error but doesn't have to be. Could someone walk > me through finding the reason why libvirt-python returns None for my > virNodeGetInfo? One possibility might be that you've passed invalid connection. It should be possible to: a) see error in the daemon's log, b) set up client logs to see whether error occurs there. [3]. > Is there any good way of debugging where exactly libvirt-python encounters an > error and returns None?4 Yes, you should be able to just attach gdb to it and set a breakpoint. After that you can just step through the function. Michal 1: https://docs.python.org/3.5/c-api/arg.html 2: https://www.redhat.com/archives/libvir-list/2016-August/msg01089.html 3: http://wiki.libvirt.org/page/DebugLogs -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list