Puppet is a tool designed to manage the system configuration similar to Unix and Microsoft Windows on a declarative way. The user describes the system resources and their status using the declarative language that Puppet provides. This information is stored in files called Puppet’s manifest. Puppet views system information through a utility called Facter, and compiles the manifest on a specific system catalog containing the resources and dependence on these resources. These catalogs are executed on the target systems.
Puppet consists of a declarative language to describe the system configuration, which can be applied directly into the system, or in a compiled catalog, and distributed to the target system through client-server paradigm (using an application programming interface of Representational State Transfer called REST API). The agent uses system specific suppliers to apply the resource specified in the "manifests". The resource abstraction layer allows administrators to describe the configuration in terms of high level, such as users, services and packages without specifying the specific operating system commands (such as rpm, yum, apt).
Built to be multiplatform, Puppet runs on Linux distributions, including Red Hat Enterprise (and their clones such as CentOS and Oracle Linux), Fedora, Debian, Mandriva, Ubuntu, and SUSE, as well as on multiple Unix systems (Solaris, BSD, Mac OS X, AIX, HP-UX), and has support for Microsoft Windows.