Add script hook support to the QEmu driver Right now this implements only 2 basic hooks: - before the qemu process is being launched - after the qemu process is terminated the XML description of the domain is passed to the hook script stdin /etc/libvirt/hook/qemu * src/qemu/qemu_driver.c: implement synchronous script hooks for QEmu at domain startup and end diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 257f914..64222fa 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -83,6 +83,7 @@ #include "xml.h" #include "cpu/cpu.h" #include "macvtap.h" +#include "hooks.h" #define VIR_FROM_THIS VIR_FROM_QEMU @@ -2858,6 +2859,22 @@ static int qemudStartVMDaemon(virConnectPtr conn, &tapfds, &ntapfds, migrateFrom) < 0) goto cleanup; + /* now that we know it is about to start call the hook if present */ + if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { + char *xml = virDomainDefFormat(vm->def, 0); + int hookret; + + hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, + VIR_HOOK_QEMU_OP_START, VIR_HOOK_SUBOP_BEGIN, NULL, xml); + VIR_FREE(xml); + + /* + * If the script raised an error abort the launch + */ + if (hookret < 0) + goto cleanup; + } + tmp = progenv; while (*tmp) { if (safewrite(logfile, *tmp, strlen(*tmp)) < 0) @@ -3078,6 +3095,16 @@ static void qemudShutdownVMDaemon(struct qemud_driver *driver, /* shut it off for sure */ virKillProcess(vm->pid, SIGKILL); + /* now that we know it's stopped call the hook if present */ + if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { + char *xml = virDomainDefFormat(vm->def, 0); + + /* we can't stop the operation even if the script raised an error */ + virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, + VIR_HOOK_QEMU_OP_STOPPED, VIR_HOOK_SUBOP_END, NULL, xml); + VIR_FREE(xml); + } + /* Reset Security Labels */ if (driver->securityDriver && driver->securityDriver->domainRestoreSecurityAllLabel) -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list