Skip to content

Latest commit

 

History

History
174 lines (133 loc) · 7.57 KB

control-mode-behaviors.rst

File metadata and controls

174 lines (133 loc) · 7.57 KB

Control mode behaviors

  • Modulefile commands that modify environment variables applies
    • a behavior when modulefile is loaded
    • and another behavior when modulefile is unloaded
  • Depending on the situation, it seems interesting to apply a different behavior when modulefile is unloaded:
    • restore value unset at load time, either:
      • append-on-unload
      • prepend-on-unload
    • remove value from list: remove-on-unload
    • unset full variable value: unset-on-unload
    • set another value, either:
      • append-on-unload
      • prepend-on-unload
      • set-on-unload (for non-path-like variable)
    • do nothing: noop-on-unload
  • Also when modulefile loads sometimes it may be interesting to apply a slightly different behavior depending on the situation:
    • set value only if variable is undefined: set-if-undef
  • Concerned modulefile commands:
    • module use<module>
    • module unuse<module>
    • setenv
    • unsetenv
    • append-path
    • prepend-path
    • remove-path
  • Only applies when the above commands are called from a modulefile (as some of these commands can also act as module sub-commands)

Unload behavior

  • Unload behavior of concerned modulefile commands:

    Command Default unload behavior Specific unload behavior Alternative behaviors to add
    module use remove-on-unload n/a
    module unuse remove-on-unload n/a append-on-unload, prepend-on-unload, noop-on-unload
    setenv unset-on-unload n/a
    unsetenv noop-on-unload set-on-unload (when 2nd argument is provided) unset-on-unload
    append-path remove-on-unload n/a
    prepend-path remove-on-unload n/a
    remove-path noop-on-unload n/a remove-on-unload, append-on-unload, prepend-on-unload
  • When either restoring or setting other value for path-like modulefile commands, it is needed to know if the value should be appended or prepended.
  • Either restoring or setting other value result in the same behavior name
    • append-on-unload and prepend-on-unload
    • position of the option will determine if the values to set are:
      • those unset at load time: when option is placed prior value list
      • a different list of value: when option is placed after value list to unset at load time and another value list is defined after option
  • The set-on-unload behavior is only useful for modulefile commands which unset value on load mode, as commands that set value on load mode mainly need to unset the value set.
  • Default unload behavior of module unuse, unsetenv and remove-path commands can also be set as an option in their argument list. Helps to dynamically choose the behavior to apply, which could be the default behavior.

Load behavior

  • Load behavior of concerned modulefile commands:

    Command Default load behavior Alternative behaviors to add
    module use set-on-load
    module unuse remove-on-load
    setenv set-on-load set-if-undef
    unsetenv unset-on-load
    append-path add-on-load
    prepend-path add-on-load
    remove-path remove-on-load

Modulefile command options

  • Alternative behaviors could be specified by setting the associated option over the modulefile command:
    • --remove-on-unload
    • --append-on-unload
    • --prepend-on-unload
    • --noop-on-unload
    • --unset-on-unload
    • --set-if-undef
  • The --append-on-unload and --prepend-on-unload options either:
    • restore the value list removed at load time if placed prior this value list
    • set a different value list if a different list of value is specified after option (all the values set after the option are considered element to add to the path-like variable)
    • both options also accept to be set prior or right after variable name or even right at the end of argument list to restore value list removed at load time
  • The --set-if-undef option does not change the behavior of setenv when modulefile is unloaded: environment variable will be unset whether the option is set or not.
  • The --remove-on-unload option can be set anywhere in argument list
  • The --remove-on-unload, --append-on-unload and --prepend-on-unload options cannot be mixed with the --index option of remove-path sub-command.
  • The --append-on-unload, --prepend-on-unload options cannot be mixed with the --glob option of remove-path sub-command.
  • The --remove-on-unload, --append-on-unload, --prepend-on-unload and --noop-on-unload options:
    • can be placed at different positions in argument list to limit error cases
    • if multiple options of this kind are defined in argument list, the one defined at the most right is retained

Misc

  • FUTURE: what is applied to:
    • module use may also be interesting for module load
    • module unuse may also be interesting for module unload