Configuring Puppet's file server
Creating decentralized Puppet architecture
Monitoring, Reporting, and Troubleshooting
E-mailing log messages containing specific tags
Producing automatic HTML documentation
Inspecting configuration settings
Using standard naming conventions
Writing manifests in pure Ruby
Writing powerful conditional statements
Using regular expressions in if statements
Using selectors and case statements
Testing whether values are contained in strings
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
Installing packages from a third-party repository
Setting up an APT package repository
Building packages automatically from source
Managing users with virtual resources
Managing users' customization files
Efficiently distributing cron jobs
Running a command when a file is updated
Using schedules with resources
Temporarily disabling resources
Creating MySQL databases and users
Servers and Cloud Infrastructure
Deploying a Nagios monitoring server
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
Executing commands before and after Puppet runs
Generating manifests from shell sessions
Generating manifests from a running system
Using an external node classifier