<?xml version="1.0"?> <html> <body> <h1>Hooks for specific system management</h1> <p>Libvirt includes synchronous hooks, starting from version 0.8.0, as a way to tie in specific tailored system actions at a specific time. If these scripts are present on the host where the hypervisor is running, then they are called when the libvirt daemon is doingi some significant action.</p> <p>The scripts are expected to execute quickly, return a zero exit status if all conditions are set for the daemon to continue the action (non zero will be considered a failure which may be ignored but in general will stop the ongoing operation). The script also should not call back into libvirt as the daemon is waiting for the script exit and deadlock is likely to occur.</p> <p>The scripts are stored in the directory <code>/etc/libvirt/hooks/</code> when using a standard installation path (<code>$SYSCONF_DIR/libvirt/hooks/</code> in general).</p> <p>Each script is given the following command line arguments:</p> <ul> <li> the first argument is the name of the object involved in the operation, or '-' if there is none. <li> the second argument is the name of the operation. <li> the third argument is a suboperation indication like 'start' or 'end', or '-' if there is none. <li> the last argument is an extra argument string or '-' if there is none. </ul> <p>There are currently scripts for 3 domains of operation: <ul> <li><p><code>/etc/libvirt/hooks/daemon</code> script if present is called at 3 points in time:</p> <p>at daemon startup, typically started with the following arguments:</p> <pre>/etc/libvirt/hooks/daemon - start - start</pre> <p>at daemon shutdown when it is about to exit, with the following arguments:</p> <pre>/etc/libvirt/hooks/daemon - shutdown - shutdown</pre> <p>When the daemon is asked to reload its driver state when receiving the SIGHUP signal, arguments are:</p> <pre>/etc/libvirt/hooks/daemon - reload begin SIGHUP</pre> </li> <li><p><code>/etc/libvirt/hooks/qemu</code> script and <br/> <code>/etc/libvirt/hooks/lxc</code> associate hooks for domain operation on the respective QEmu/KVM and LXC drivers.</p> <p> The domain related hooks also receive the full XML description for the concerned domain on their stdin, which allows them to get all the information from the domain, including UUID or storage if that is needed for the script operation.</p> <p> Currently only domain startup and domain end operations involve the hook, the first one just before the domain gets created. For example if starting a QEmu domain named <code>test</code> the following script will get called:</p> <pre>/etc/libvirt/hooks/qemu test start begin -</pre> <p> note that a non-zero return value from the script will abort the domain startup operation, and if an error string is passed on stderr by the hook script, it will be provided back to the user at the libvirt API level.</p> <p> For domain shutdown, the script will be called just after the domain has finished execution, and the script will get:</p> <pre>/etc/libvirt/hooks/qemu test stopped end -</pre> <p> It is expected that other operations will be associated to hooks but at the time of 0.8.0 only those 2 are associated to the domains life cycle</p> </li> </ul> <p></p> </body> </html>