I'd like to have a program executed before a mount attempt is made for a particular device/share/mount. For example, I'd like for autofs/amd to control /data/{1..10}, and when a process opens /data/4 (and /data/4 is not currently mounted), a script is invoked, such as '/usr/local/bin/preparedata 4' (4 being the mount point name within the autofs controlled directory), prior to the attempt to mount. For example, I could dynamically attach an iSCSI LUN (which would be referenced in the autofs map), or startup a remote system/VM which has an NFS export (which is specified in the map).
I'd be glad to add details if missing.
Update: I've noticed that systemd appears to be intercepting open() calls, is there some way to do this particularly in systemd?
Autofs itself can run a custom script or program to dynamically provide "the map", i.e. the mount options and arguments autofs uses for mounting.
As an example, to automount home directories from an NFS-server one may prefer to use a pattern like "/home/user12/user123456" for the homedir paths to limit the number of sub-directories on a server when there are many users.
To dynamically mount such home directories, you could put this in your /etc/auto.master:
/home program:/usr/local/sbin/autofs-home-mapper.sh
The script /usr/local/sbin/autofs-home-mapper.sh could look like this:
#!/bin/bash
echo "-fstype=nfs4,relatime nfs.example.com:/exported/${1%????}/${1}"
When the local directory /home/johndoe is accessed, autofs will run the script
with one argument: johndoe
Output of this script will then be:
-fstype=nfs4,relatime nfs.example.com:/exported/joh/johndoe
...which is then used by autofs to mount /home/johndoe
Don't forget to set eXecute permission on the script, as it can be difficult to track down a bug like that.
More information in man 5 auto.master
(look under "map-type") and man 5 autofs
.