Puppet uses a Declarative Domain Specific Language (DSL) that defines states. Puppet code is written in manifests. In that code, you declare resources that define various aspects of a system, such as files, packages, services, and so on. Resources are grouped into classes, which expose parameters that can affect their behavior. Classes and configuration files are then organized into modules. These core Puppet terms are described in more detail in the following sections. For more complete definitions, consult the Puppet Glossary.
The various resources that you need to declare for a specific configuration are stored in files that are called manifests. Manifests contain Puppet code and are central to Puppet's infrastructure. These manifests are located on the Puppet master. Whenever you want to save a resource definition, you save it in a manifest. Note that each manifest must end with a .pp file extension.
You use a Puppet site.pp manifest to define global configuration that applies to all of the nodes. A site manifest can also include node-specific code that applies to certain nodes. A node definition (or node statement) is a block of Puppet code that is only included in the catalogs of the nodes that it matches. This feature enables you to assign specific configurations to specific nodes. For more information, go to Node Definitions.
You can also write manifests that group several resources together. In this case, you would use a class to apply the resources to the specified nodes. See Writing Puppet Manifests, Classes, and Modules in Oracle Solaris.
A class is a set of configurations that are bundled together. A Puppet class can include resources, variables, as well as additional, advanced attributes. When you assign a class to a node, that node gets all of the configurations that are part of the class. You include class declarations within a manifest. See Writing Puppet Classes.
Puppet modules are self-contained collections of files and directories that can contain Puppet manifests and other objects, including files and templates. The information that is within a module is packaged and organized in a way that Puppet can understand and use. Modules are how Puppet finds the classes and types that can be used for configuration management within your IT infrastructure. Puppet automatically loads any class or defined type that is stored within a given module. You can declare any of these classes or types by name within a manifest. See Writing Puppet Modules.