Puppet modules are designed to be self-contained bundles of code, wrapping up into a single package all the classes, files, and templates having to do with any one component. This means that the Puppet Apache module will manage only Apache, and the MySQL module will manage only MySQL.
However, a lot of components have dependencies. For example, many modules will reuse resources from the
puppetlabs-firewall module to create rules allowing network access, or they'll use resources from
puppetlabs-concat to build configuration files. That's traditionally made it a little difficult to manage your development environment, since each module needed access to all of its dependencies for testing, and it's left up to you, the programmer, to go look up the documentation for each resource type you want to use.
RubyMine automatically manages module dependencies within your Puppet module project. Image courtesy of the RubyMine blog.
JetBrains is changing that with their recently announced RubyMine 2017.2 EAP release, containing a new feature, Puppet Project Structure. (RubyMine, in case you don't know about it already, is a Ruby and Rails integrated development environment.)
The new dependency management features allow you to install the proper version of each dependency of your module using the existing
metadata.json file inside a module or the
Puppetfile in an environment, and then use the resource types within the dependencies to provide intelligent code completion as you work. This uses the open-source
librarian-puppet tool, which manages all dependencies recursively, so it will minimize the administrivia headaches you must deal with.