A stupidly admirably direct dependency validator for a Puppet module's metadata.json. Use a tiny dedicated Puppet Forge to stage your modules' dependences with puppet module install!
For each Module-under-test (or MUT):
- Validate that the MUT will install from the Puppet Forge without breaking on dep-solving problems (such as version conflicts or missing dependencies).
- Enable as much of this validation as possible within network-isolated enclaves.
- TODO: Detect if dependencies are missing from
metadata.jsonby using the contents ofmods_dir/as the fixture modules forspec_standalonetests. - TODO: Once missing dependencies are established, use the contents of
mods_dir/to identify missing modules in the.fixtures.yamlfile.
The MUT + dependencies are loaded into a local Puppet Forge and running puppet module install <MUT> against it. If the installation succeeds, the dependencies covered to publish on the live Puppet Forge.

- (optional) An upstream Puppet Forge can be used to install the dependencies for the MUT into a
mods_dir/directory.
- The forge server can be changed with the environment variable
TEST_FORGE_deps_forge - With internet access and a single
- (optional, enclave-friendly) All modules in
mods_dir/are built intotar.gzarchives to be served by the test Forge.
- The
mods_dircan be changed with the environment variableTEST_FORGE_mods_dir - If the
mods_diris defined, the upsteam dependency forge will not be contacted.
- (enclave-friendly) A temporary Puppet Forge is started on
localhostand serves modules fromtars_dir/. In a separate process,puppet module installis run for each MUT against the localhost Puppet Forge (modules are installed into a temporary directory). The test passes if all installs succeed.
- The
tars_dircan be changed with the environment variableTEST_FORGE_tars_dir
Each step of the process can be modified or skipped using environment variables prefixed with TEST_FORGE_ (noted in maroon text on the diagram above).

Add this to your project's Gemfile:
gem 'simp-module-repoclosure'You can set the environment variables TEST_FORGE_tars_dir and
TEST_FORGE_mods_dir to use pre-existing diretories of modules
for the local forge.
The upstream Puppet Forge to download MUT dependencies from.
(enclave-friendly) Customize the path of the mods_dir/ directory of unarchived module dependencies.
- If
TEST_FORGE_mods_diris not set,mods_dir/is a temporary directory. - If
TEST_FORGE_mods_diris customized, deps Puppet forge is no longer used
(enclave-friendly) Customize the path of the tars_dir/ directory or archived .tar.gz modules. By the time the test Forge starts, tars_dir/ should include the MUT(s) and all dependencies.
- If
TEST_FORGE_tars_diris not set,tars_dir/is a temporary directory. - If
TEST_FORGE_tars_diris customized, the Puppet Forge andmod_path/compilation steps will be skipped.
The TCP port on localhost or the temporary test Forge to use.
- If TEST_FORGE_port is no set the port will default to
8080.
TEST_FORGE_port=8888 bundle exec rake specSee LICENSE