In the previous chapter, you learned about the tools that create modularized and reusable Puppet code in the form of classes and defined types. We discussed that almost all Puppet resources should be separated into appropriate classes, except if they logically need to be part of a defined type. This is almost enough syntax to build manifests for an entire fleet of agent nodes; each selecting the appropriate composite classes, which in turn include further required classes, with all the classes recursively instantiating the defined types.
What has not been discussed up until now is the organization of the manifests in the filesystem. It is obviously undesirable to stuff all of your code into one large site.pp file. The answer to this problem is provided by modules and will be explained in this chapter.
Besides...