From libvirt: Hooks for specific system management:
Script names
At present, there are five hook scripts that can be called:
/etc/libvirt/hooks/daemon
Executed when the libvirt daemon is started, stopped, or reloads its configuration
/etc/libvirt/hooks/qemu
Executed when a QEMU guest is started, stopped, or migrated
(...)
Script arguments
The hook scripts are called with specific command line arguments,
depending upon the script, and the operation being performed.
(...)
The command line arguments take this approach:
The first argument is the name of the object involved in the operation, or '-' if there is none.
For example, the name of a guest being started.
The second argument is the name of the operation being performed.
For example, "start" if a guest is being started.
(...)
/etc/libvirt/hooks/qemu
Before a QEMU guest is started, the qemu hook script is called in three locations; if any location fails, the guest is not started. The
first location, since 0.9.0, is before libvirt performs any resource
labeling, and the hook can allocate resources not managed by libvirt
such as DRBD or missing bridges. This is called as:
/etc/libvirt/hooks/qemu guest_name prepare begin -
The second location, available Since 0.8.0, occurs after libvirt has finished labeling all resources, but has not yet started the
guest, called as:
/etc/libvirt/hooks/qemu guest_name start begin -
The third location, 0.9.13, occurs after the QEMU process has successfully started up:
/etc/libvirt/hooks/qemu guest_name started begin -
(...)
So, in practice, this:
/etc/libvirt/hooks/qemu (without extension)
#!/bin/bash
if [[ $1 == "<domain_name>" ]] && [[ $2 == "start" || $2 == "stopped" ]]
then
if [[ $2 == "start" ]]
then
# unmount logic here
else
# mount logic here
fi
fi
Of course, edit <domain name>
, implement the mount/unmount logic, and then restart libvirtd.service
.
Also don't forget to: chmod +x /etc/libvirt/hooks/qemu
I'm making my full solution available at https://gitlab.com/ranolfi/rvirtesp.
An addendum: for this particular use case,
you may find it useful to set up your fstab
file with the option noauto
and maybe also x-systemd.automount
and x-systemd.device-timeout=<seconds>
.
See fstab(5) and systemd.automount(5).