Managing your manifests with Git
Creating a decentralized Puppet architecture
Bootstrapping Puppet with Rake
Automatic syntax checking with Git hooks
Checking your manifests with puppet-lint
Using standard naming conventions
Writing powerful conditional statements
Using regular expressions in if statements
Using selectors and case statements
Using regular expression substitutions
Using class inheritance and overriding
Writing reusable, cross-platform manifests
Getting information about the environment
Passing arguments to shell commands
Working with Files and Packages
Making quick edits to config files
Using Augeas to automatically edit config files
Building config files using snippets
Using array iteration in templates
Using GnuPG to encrypt secrets
Installing packages from a third-party repository
Building packages automatically from source
Managing users with virtual resources
Managing users' customization files
Efficiently distributing cron jobs
Using schedules to limit when resources can be applied
Temporarily disabling resources
Servers and Cloud Infrastructure
Building high-availability services using Heartbeat
Managing NFS servers and file shares
Using HAProxy to load-balance multiple web servers
Managing firewalls with iptables
Managing virtual machines with Vagrant
External Tools and the Puppet Ecosystem
Setting facts as environment variables
Importing configuration data with Hiera
Storing secret data with hiera-gpg
Generating manifests with puppet resource
Generating manifests with other tools
Testing your manifests with rspec-puppet
Using an external node classifier
Creating your own resource types
Monitoring, Reporting, and Troubleshooting
Producing automatic HTML documentation