Puppet is an open source systems management tool for centralizing and automating configuration management. Configuration management is the detailed recording and updating of information that describes an enterprise's hardware and software.
Puppet has two layers: a configuration language to describe how the hosts and services should look, and an abstraction layer that allows the administrator to implement the configuration on a variety of platforms, including Unix, Linux, Windows and OS X. Administrators can encode the configuration of a service as a policy, which Puppet then monitors and enforces.
Puppet is written in Ruby and uses its own domain specific language (DSL) for creating and managing modules. The basic version of Puppet configuration management, which is called Open Source Puppet, is available directly from Puppet's website and is licensed under the Apache 2.0 system. Puppet Enterprise has additional functionality including orchestration, role-based access control (RBAC) and compliance reporting.
The Puppet Labs website offers a number of community modules for describing and managing infrastructure as code. Puppet Labs refers to the synergy between Open Source Puppet and community modules as the Puppet ecosystem.
Popular Puppet ecosystem modules include:
Puppet Forge - a repository that provides access to over 4,000 pre-built user contributed modules.
Beaker - a test harness focused on acceptance testing for interactions between multiple virtual machines (VMs).
Facter - a tool for gathering basic facts about nodes, including hardware details, network settings, operating system (OS) type and version.
Hiera - a key/value lookup tool for configuration data.
MCollective - a framework for building server orchestration or parallel job execution systems.
PuppetDB - a searchable database that stores information about every node.
Razor - an advanced provisioning application for discovering and deploying bare-metal VMs and virtual systems.
Trapperkeeper - a Clojure framework for hosting long-running applications
This video from Puppet Labs provides an overview of how Puppet can be used to automate infrastructure management.
See also: policy-based management