This document provides an introduction to Puppet, an open source tool for configuration management. It discusses how Puppet addresses issues with manual configuration and scripting approaches by allowing infrastructure to be coded and version controlled. Puppet uses a master-agent model or can run in standalone mode, and components like Facter, the Puppet language, resources, manifests, classes and templates are explained. Resources are the building blocks for modeling system configurations, and manifests are Puppet programs. Classes describe parts of a system's identity. Templates allow dynamic configuration files. A catalog brings all components together, and learning resources are provided.