On 6/18/24 18:39, Swapnil Ingle wrote: > Sometimes in release hook it is useful to know if the VM shutdown was graceful > or not. This is especially useful to do cleanup based on the VM shutdown failure > reason in release hook. This patch proposes to use the last argument 'extra' > to pass VM shutoff reason in the call to release hook. > Making this change for Qemu and LXC. > > Signed-off-by: Swapnil Ingle <swapnil.ingle@xxxxxxxxxxx> > --- > docs/hooks.rst | 49 +++++++++++++++++++++++++++++++++++++++-- > src/lxc/lxc_process.c | 2 +- > src/qemu/qemu_process.c | 2 +- > 3 files changed, 49 insertions(+), 4 deletions(-) > > diff --git a/docs/hooks.rst b/docs/hooks.rst > index 1dbc492bd4..cdcb161c7e 100644 > --- a/docs/hooks.rst > +++ b/docs/hooks.rst > @@ -215,7 +215,30 @@ operation. There is no specific operation to indicate a "restart" is occurring. > > :: > > - /etc/libvirt/hooks/qemu guest_name release end - > + /etc/libvirt/hooks/qemu guest_name release end <shutoff-reason> > + > + +-------------------+------------------------------------------------------------------+ > + | Shutoff reason | Description | > + +===================+==================================================================+ > + | unknown | the reason is unknown | > + +-------------------+------------------------------------------------------------------+ > + | shutdown | normal shutdown | > + +-------------------+------------------------------------------------------------------+ > + | destroyed | forced poweroff | > + +-------------------+------------------------------------------------------------------+ > + | crashed | domain crashed | > + +-------------------+------------------------------------------------------------------+ > + | migrated | migrated to another host | > + +-------------------+------------------------------------------------------------------+ > + | saved | saved to a file | > + +-------------------+------------------------------------------------------------------+ > + | failed | domain failed to start | > + +-------------------+------------------------------------------------------------------+ > + | from snapshot | restored from a snapshot which was taken while domain was shutoff| > + +-------------------+------------------------------------------------------------------+ Nitpick, I'm inserting an empty space at the end of the table so that "shutoff" is not joined with '|' like this. > + | daemon | daemon decides to kill domain during reconnection processing | > + +-------------------+------------------------------------------------------------------+ > + > > - :since:`Since 0.9.11`, the qemu hook script is also called at the beginning > of incoming migration. It is called as: > @@ -312,7 +335,29 @@ operation. There is no specific operation to indicate a "restart" is occurring. > > :: > > - /etc/libvirt/hooks/lxc guest_name release end - > + /etc/libvirt/hooks/lxc guest_name release end <shutoff-reason> > + > + +-------------------+------------------------------------------------------------------+ > + | Shutoff reason | Description | > + +===================+==================================================================+ > + | unknown | the reason is unknown | > + +-------------------+------------------------------------------------------------------+ > + | shutdown | normal shutdown | > + +-------------------+------------------------------------------------------------------+ > + | destroyed | forced poweroff | > + +-------------------+------------------------------------------------------------------+ > + | crashed | domain crashed | > + +-------------------+------------------------------------------------------------------+ > + | migrated | migrated to another host | > + +-------------------+------------------------------------------------------------------+ > + | saved | saved to a file | > + +-------------------+------------------------------------------------------------------+ > + | failed | domain failed to start | > + +-------------------+------------------------------------------------------------------+ > + | from snapshot | restored from a snapshot which was taken while domain was shutoff| > + +-------------------+------------------------------------------------------------------+ > + | daemon | daemon decides to kill domain during reconnection processing | > + +-------------------+------------------------------------------------------------------+ > > - :since:`Since 0.9.13`, the lxc hook script is also called when the libvirtd > daemon restarts and reconnects to previously running LXC processes. If the > diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c > index 30ff4eb3d0..f5eb5383ec 100644 > --- a/src/lxc/lxc_process.c > +++ b/src/lxc/lxc_process.c > @@ -244,7 +244,7 @@ static void virLXCProcessCleanup(virLXCDriver *driver, > /* we can't stop the operation even if the script raised an error */ > virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name, > VIR_HOOK_LXC_OP_RELEASE, VIR_HOOK_SUBOP_END, > - NULL, xml, NULL); > + virDomainShutoffReasonTypeToString(reason), xml, NULL); > } > > if (flags & VIR_LXC_PROCESS_CLEANUP_REMOVE_TRANSIENT) > diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c > index 2c33ac3bf7..9de01b1a0d 100644 > --- a/src/qemu/qemu_process.c > +++ b/src/qemu/qemu_process.c > @@ -8722,7 +8722,7 @@ void qemuProcessStop(virQEMUDriver *driver, > /* 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_RELEASE, VIR_HOOK_SUBOP_END, > - NULL, xml, NULL); > + virDomainShutoffReasonTypeToString(reason), xml, NULL); > } > > virDomainObjRemoveTransientDef(vm); Reviewed-by: Michal Privoznik <mprivozn@xxxxxxxxxx> and merged. Congratulations on your first libvirt contribution! Michal