Puppet (software)

From Wikipedia, the free encyclopedia
  (Redirected from Puppet (tool))
Jump to: navigation, search
Puppet Logo.svg
Developer(s) Puppet
Initial release 2005; 13 years ago (2005)
Stable release 5.4.0 (February 14, 2018; 33 days ago (2018-02-14)[1]) [±]
Preview release (March 12, 2018; 7 days ago (2018-03-12)) [±]
Repository Edit this at Wikidata
Written in C++ & Clojure from 4.0,[2] Ruby
Operating system Linux, Unix-like, Microsoft Windows
License Apache for >2.7.0, GPL for prior versions
Website www.puppet.com

In computing, Puppet is an open-source software configuration management tool. It runs on many Unix-like systems as well as on Microsoft Windows, and includes its own declarative language to describe system configuration.

Puppet is produced by Puppet, founded by Luke Kanies in 2005. It is written in C++ & Clojure and released as free software under the GNU General Public License (GPL) until version 2.7.0 and the Apache License 2.0 after that.[3]


Puppet is designed to manage the configuration of Unix-like and Microsoft Windows systems declaratively. The user describes system resources and their state, either using Puppet's declarative language or a Ruby DSL (domain-specific language). This information is stored in files called "Puppet manifests". Puppet discovers the system information via a utility called Facter, and compiles the Puppet manifests into a system-specific catalog containing resources and resource dependency, which are applied against the target systems. Any actions taken by Puppet are then reported.

Puppet consists of a custom declarative language to describe system configuration, which can be either applied directly on the system, or compiled into a catalog and distributed to the target system via client–server paradigm (using a REST API), and the agent uses system specific providers to enforce the resource specified in the manifests. The resource abstraction layer enables administrators to describe the configuration in high-level terms, such as users, services and packages without the need to specify OS specific commands (such as rpm, yum, apt).

Puppet is model-driven, requiring limited programming knowledge to use.[4]

Puppet comes in two versions, Puppet Enterprise and Open Source Puppet. In addition to providing functionalities of Open Source Puppet, Puppet Enterprise also provides GUI, API and command line tools for node management.


Puppet manually invoked on a client

Puppet usually follows client-server architecture. The client is known as agent and the server is known as master. It can also be used as a stand-alone application.

Puppet Master is installed on one or more servers and the systems that need to be configured install Puppet Agent. Puppet Agents communicate with the server and fetch configuration instructions. The Agent then applies the configuration on the system and sends the status report to the server.[5] Devices can run Puppet Agent as a daemon, that can be triggered periodically as a cron job or can be run manually whenever needed.

Puppet architecture consists of:

  • Configuration language: In Puppet, items to be configured are termed as ‘resources’. Since Puppet follows declarative language, it just needs to specify ‘what’ action needs to be performed on the resources. The action is implemented by declaring three things for every resource: its type, title and a list of attributes whose state needs to be configured. Puppet code is written into files called Manifests. These are stored on the server and contain configuration instructions for each client.[6] The format for writing manifest files is stated below.
type { 'title':
  attribute => value


user { 'harry':
  ensure => present,
  uid    => '1000',
  shell  => '/bin/bash',
  home   => '/var/tmp'
  • Resource abstraction: Puppet provides resource abstraction by providing the ability to configure resources on different platforms without worrying about the platform dependencies. For example, if an user wants to install a package on three different platforms then they don't have to worry about the required package type of given platform and its dependencies, Puppet takes care of it by using Facter. Facter is the piece of information which agents provide to the server describing what kind of operating system is being used, their IP, hostname, etc. Indirectly, it is a way of informing Puppet as to what procedure needs to be followed for software configuration in its case; depending on the facts being rendered by Facter. For any given type of resource, there are a number of providers. Providers have package management tools corresponding to different platforms/operating systems. These providers define how resources have to be managed.[6]
  • Transaction: Following are the steps of execution:
    1. Every agent send across Facter to master.
    2. Puppet maintains a graphical representation of the list of resources and their interdependencies; depicting the order in which they need to be configured in a ‘catalog’ for every client. Master sends this catalog to the client.
    3. Configuration already present on the system is known as actual state and the configuration mentioned in manifest file is known as desired state. Agent applies configuration on the system only when actual state is not same as desired state. The clause of applying a state change only if needed is called as ‘idempotency’, which is the key feature of Puppet.
    4. The result of the applying the configuration is sent across to the server.


  • Puppet is flexible. Since it is open source, custom libraries and modules can be implemented to suit needs.
  • Takes care of the host throughout its life cycle from start to end, including the initial setup, installation, upgradation and maintenance activities.
  • Increases manageability and productivity.
  • Automates repetitive tasks.
  • Reuses resources across different platforms.

Platforms and users[edit]

Built to be cross-platform, Puppet works on all major Linux distributions, as well as on other Unix-like systems (Solaris, BSD, Mac OS X, AIX, HP-UX) alongside mature Microsoft Windows support.

Puppet is used by the Wikimedia Foundation,[7] ARIN, Mozilla,[8] Reddit,[9] CERN,[10] Dell, Rackspace, Zynga, Twitter, the New York Stock Exchange, PayPal, Disney, Citrix Systems, Spotify, TubeMogul,[11] Oracle, Yandex, the University of California Los Angeles, the University of North Texas, the Los Alamos National Laboratory, Stanford University, Purdue University, Lexmark, QVC, Intel, Bright Computing and Google, among others.[12]

See also[edit]


  1. ^ "Puppet 5.4 Release Notes". Retrieved 12 March 2018. 
  2. ^ "Evolving Puppet for the Next 10 Years". Luke Kanies. 2014-09-23. Retrieved 2017-05-26. 
  3. ^ "Puppet Frequently Asked Questions". Puppet Labs. Retrieved 10 March 2010. 
  4. ^ "Deploying Apache Tomcat Applications With Puppet". tomcatexpert.com. Retrieved 23 January 2015. 
  5. ^ "Overview of Puppet's architecture — Documentation — Puppet". docs.puppet.com. Retrieved 2016-09-14. 
  6. ^ a b Krum, Hevelingen, Kero, Turnbull, McCune. Pro Puppet. Apress. ISBN 978-1430260400. 
  7. ^ Ever wondered how the Wikimedia servers are configured? — Wikimedia blog. Blog.wikimedia.org (2011-09-19). Retrieved on 2013-12-09.
  8. ^ "ReleaseEngineering/PuppetAgain". mozilla.org. Retrieved 4 March 2015. 
  9. ^ We are sysadmins @ reddit. Ask us anything! : sysadmin. Reddit.com (2012-03-21). Retrieved on 2013-12-09.
  10. ^ "CERN Configuration Management System User Guide". cern.ch. Retrieved 30 March 2015. 
  11. ^ "Puppet Camp Paris: Improving Operations Efficiency With Puppet". shell-tips.com. 2015-04-20. 
  12. ^ Google, VMware, Cisco stuff Puppet with $8.5M

External links[edit]