Puppet is impressively extendable. Almost every key component of the software can be extended and replaced by code provided by users.
Most of the time we can use modules to distribute our code to clients, but Puppet goes further; surprising things are possible with the indirector and its termini (somehow strange words that are going to be clearer in the next pages).
This chapter is about understanding and extending Puppet code. We are going to review the following topics:
Anatomy of a Puppet run, what happens under the hood
What are Puppet extension alternatives?
Developing custom functions
Developing custom facts
Developing custom types and providers
Developing custom reports handlers
Developing custom faces
The subject is large, we are going to have an overview and show examples that let us dive in some details. For more information about how Puppet works and its inner beauties, check these great sources, in detail:
The Puppet Extension Points and Puppet Internals series...