Puppet is impressively extendable. Almost every key component of the software can be extended and replaced by the code provided by users.
Most of the time, we can use modules to distribute our code to clients. However, Puppet goes a step further; surprising things are possible, for example, with the indirector and its termini (somehow strange words that are going to be clearer in the following pages).
This chapter is about understanding and extending Puppet code. We are going to review the following topics: