Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
(#7316) Append module plugin directories to $LOAD_PATH
Previously, face applications delivered as a module could not be loaded. This is because FaceCollection has problems loading code. For one, it require's faces and actions within, but load's actions that reside in different files. So it conceivable that a reloaded face application could run with older faces, but newer actions. Second, if we load the face, it will call Puppet::Interface.define, which will check if the face has already been loaded by calling FaceCollection[name, version]. But that will attempt to load the face that we're currently loading, getting into an infinite loop. Third, the help face application gets a list of available application names from Application. This list includes applications from gem and module paths. However, the help face application fails to load faces which reside in the modulepath, since it's using require and not going through the Autoloader. While faces could be modified to use an Autoloader, the longer term plan is to stop pretending we can reload code in ruby, i.e. always require based on the current $LOAD_PATH. This commit adds a `each_plugin_directory` method that yields each module plugin directories based on the current environment. It also modifies the CommandLine to append those directories, unless we are loading the master or agent applications. In the case of an agent, the libdir is always in the $LOAD_PATH, and it will load pluginsync'ed files from there. This aspect of #4248 has been fixed for sometime. In the case of master, we compile catalogs in the context of the client's environment, not necessarily the environment the master itself is configured to use. As such, we only want to autoload custom functions from those modules, not require them. In other words, we don't want those modules in the $LOAD_PATH to start with. This aspect of #4248 (the ability to load utility module code from a custom function) is not fixed, and can't really be fixed until we move to one process per environment compilation. In the case of apply, we compile catalogs, but always in its current environment, so we can safely append to the $LOAD_PATH. And same for face applications. As a result, the help face can load other faces from modules.
- Loading branch information