Puppet is a configuration management tool that follows a master slave principle. The desired state of a system is described in a declarative language. This allows administrators to determine the desired end state–not how to achieve it (impotence). The definitions for the managed systems lie in so-called manifestos on the Puppet Master.

An agent runs on the clients, which periodically asks the master’s desired condition and corrects deviations. Configuration drifts, for example, if users have made local changes and the system is no longer in the desired state, will be automatically corrected the next run of the agent. The range of possible commands ranges from generating and modifying individual files to managing user accounts and software packages to more complex tasks.

Manifestos and dynamic templates are written in Ruby or a syntax oriented towards Ruby and follow a strict class concept. Parameters for the manifestos are either stored in a database on the Puppet Master or dynamically queried by an External Node Classifier such as a Datacenter Inventory Management (DCIM) or a Configuration Management Database (CMDB).