Mode select: irreversible module actions
This design document describes how the Lmod mode select feature could be implemented in Tcl modulefiles.
Goal is to describe a solution that could be the same over the different
module
implementations. This way the Tcl modulefiles relying on such
feature will be processed the same way whatever the module
implementation.
Feature description
The mode select feature allows modulefiles to specify actions that should only be executed in specific modes (load or unload). This is particularly useful for operations that are irreversible or need special handling during module load/unload cycles.
When mode select is used, the command is executed as-is if current evaluation
mode corresponds to one set. Which means a setenv
with a mode select for
unload
evaluation, is evaluated as a setenv
command when unloading
modulefile.
Such feature does not cope with module dependency definition.
Proposed interface for Tcl modulefile
Proposition is to add a --mode
option on concerned Tcl modulefile
commands. This --mode
option accepts a Tcl as value, for instance:
--mode load
--mode {load unload}
Concerned Tcl modulefile commands are:
setenv
unsetenv
prepend-path
append-path
remove-path
pushenv
module load
module load-any
module try-load
module unload
Support in Modules
Mode select is not supported at the moment in Modules. Support can be added if someone shows up and expresses a need.
The implementation of this feature for the module load
command may be
non-trivial: currently when unloading modules, only modulefile unloads are
expected. Dependency resolution mechanism is expecting to have all the
properties of the system when starting by looking at the loaded environment.
Adding the ability to throw modulefile loads during this unload process
requires to revise the current dependency resolution mechanism.
Due to that, implementation if asked may first be done only for modulefile Tcl
commands others than module
.