Hi,
2. missing virConnectPtr during autostart of the vm:
in src/qemu_driver.c:145, qemudAutostartConfigs() you can find this call:
int ret = qemudStartVMDaemon(NULL, driver, vm, NULL);
This means virConnectPtr conn is NULL within qemudStartVMDaemon().
Following the calls:
qemudStartVMDaemon()
-> qemudBuildCommandLine()
-> qemudNetworkIfaceConnect()
-> virNetworkLookupByName()
virNetworkLookupByName bails out if called with invalid virConnectPtr. This
means starting this vm fails.
I came up with the attached patch to fix this for me, but
a) I'm not sure if it is a clean use of the api to call virConnectOpen() from
within a state-initializer function
b) This is just for qemu/kvm, I haven't looked at any other drivers
It would be nice if an experienced libvirt-developer could take a look at
this. Thank you very much.
Kind regards,
Gerd
diff -r -u libvirt-0.5.0.orig/src/qemu_driver.c libvirt-0.5.0/src/qemu_driver.c
--- libvirt-0.5.0.orig/src/qemu_driver.c 2008-11-21 13:47:32.000000000 +0100
+++ libvirt-0.5.0/src/qemu_driver.c 2008-12-01 01:49:16.000000000 +0100
@@ -138,11 +138,14 @@
qemudAutostartConfigs(struct qemud_driver *driver) {
unsigned int i;
+ /* we need a valid virConnectPtr for qemudStartVMDaemon to be able to connect to
other drivers */
+ virConnectPtr conn=virConnectOpen(getuid() ? "qemu:///session" :
"qemu:///system");
+
for (i = 0 ; i < driver->domains.count ; i++) {
virDomainObjPtr vm = driver->domains.objs[i];
if (vm->autostart &&
!virDomainIsActive(vm)) {
- int ret = qemudStartVMDaemon(NULL, driver, vm, NULL);
+ int ret = qemudStartVMDaemon(conn, driver, vm, NULL);
if (ret < 0) {
virErrorPtr err = virGetLastError();
qemudLog(QEMUD_ERR, _("Failed to autostart VM '%s':
%s\n"),
@@ -154,6 +157,8 @@
}
}
}
+
+ virConnectClose(conn);
}
/**
--
Address (better: trap) for people I really don't want to get mail from:
james(a)cactusamerica.com