Cover
Copyright
Preface
Table of Contents
Module 1: Puppet 4 Essentials, Second Edition
1: Writing Your First Manifests
Getting started
Introducing resources and properties
Interpreting the output of the puppet apply command
Adding control structures in manifests
Using variables
Controlling the order of evaluation
Implementing resource interaction
Examining the most notable resource types
Summary
2: The Master and Its Agents
The Puppet Master
Setting up the Puppet Agent
Performance considerations
Using Phusion Passenger with Nginx
Completing the stack with PuppetDB
Troubleshooting SSL issues
Summary
3: A Peek under the Hood – Facts, Types, and Providers
Summarizing systems with Facter
Understanding the type system
Substantiating the model with providers
Putting it all together
Summary
4: Modularizing Manifests with Classes and Defined Types
Introducing classes and defined types
Structured design patterns
Including classes from defined types
Establishing relationships among containers
Making classes more flexible through parameters
Summary
5: Extending Your Puppet Infrastructure with Modules
An overview of Puppet's modules
Maintaining environments
Building a specific module
Finding helpful Forge modules
Summary
6: Leveraging the Full Toolset of the Language
Templating dynamic configuration files
Creating virtual resources
Exporting resources to other agents
Overriding resource parameters
Avoiding antipatterns
Summary
7: New Features from Puppet 4
Upgrading to Puppet 4
Using the type system
Learning lambdas and functions
Creating Puppet 4 functions
Leveraging the new template engine
Handling multiline with HEREDOC
Breaking old practices
Summary
8: Separating Data from Code Using Hiera
Understanding the need for separate data storage
Structuring configuration data in a hierarchy
Retrieving and using Hiera values in manifests
Converting resources to data
Debugging Hiera lookups
Implementing the Roles and Profiles pattern
Summary
Module 2: Extending Puppet, Second Edition
1: Puppet Essentials
The Puppet ecosystem
Puppet components
Installing and configuring Puppet
Puppet in action
Variables, facts, and scopes
Meta parameters
Managing order and dependencies
Reserved names and allowed characters
Conditionals
Comparison operators
Iteration and lambdas
Exported resources
Modules
Restoring files from a filebucket
Summary
2: Managing Puppet Data with Hiera
Installing and configuring Hiera
Working with the command line on a YAML backend
Using Hiera in Puppet
Additional Hiera backends
Using Hiera as an ENC
Summary
3: Introducing PuppetDB
Installation and configuration
Dashboards
PuppetDB API
Querying PuppetDB for fun and profit
The puppetdbquery module
How Puppet code may change in the future
Summary
4: Designing Puppet Architectures
Components of a Puppet architecture
The Foreman
Roles and profiles
The data and the code
Sample architectures
Summary
5: Using and Writing Reusable Modules
Modules layout evolution
The parameters dilemma
Reusability patterns
Summary
6: Higher Abstraction Modules
The OpenStack example
An approach to reusable stack modules
Tiny Puppet
Summary
7: Puppet Migration Patterns
Examining potential scenarios and approaches
Patterns for extending Puppet coverage
Things change
Summary
8: Code Workflow Management
Write Puppet code
Git workflows
Code review
Testing Puppet code
Deploying Puppet code
Propagating Puppet changes
Puppet continuous integration
Summary
9: Scaling Puppet Infrastructures
Scaling Puppet
Measuring performance
Summary
10: Extending Puppet
Anatomy of a Puppet run, under the hood
Puppet extension alternatives
Custom functions
Custom facts
Custom types and providers
Custom report handlers
Custom faces
Summary
11: Beyond the System
Puppet on network equipment
Puppet for cloud and virtualization
Puppet on storage devices
Puppet and Docker
Summary
12: Future Puppet
Changing the serialization format
Direct Puppet
Other changes
Beyond Puppet 4.x
Summary
Module 3: Mastering Puppet, Second Edition
1: Dealing with Load/Scale
Divide and conquer
Conquer by dividing
Summary
2: Organizing Your Nodes and Data
Getting started
Organizing the nodes with an ENC
Hiera
Summary
3: Git and Environments
Environments
Git
Git for everyone
Summary
4: Public Modules
Getting modules
Using GitHub for public modules
Modules from the Forge
Using Librarian
Using r10k
Using Puppet-supported modules
Summary
5: Custom Facts and Modules
Module manifest files
Custom facts
CFacter
Summary
6: Custom Types
Parameterized classes
Defined types
Types and providers
Summary
7: Reporting and Orchestration
Turning on reporting
Store
Logback
Internet relay chat
Foreman
Puppet GUIs
mcollective
Ansible
Summary
8: Exported Resources
Configuring PuppetDB – using the Forge module
Manually installing PuppetDB
Exported resource concepts
Resource tags
Exported SSH keys
Putting it all together
Summary
9: Roles and Profiles
Design pattern
Creating an example CDN role
Dealing with exceptions
Summary
10: Troubleshooting
Connectivity issues
Catalog failures
Debugging
Summary
Bibliography
Index