At the start of this chapter, you learned about Facter and how it works as a layer of abstraction over the supported platforms. This unified information base is one of Puppet's most important means of achieving its goal of operating system independence. Another one is the DSL, of course. Finally, Puppet also needs a method to transparently adapt its behavior to the respective platform on which each agent runs.
In other words, depending on the characteristics of the computing environment, the agent needs to switch between different implementations for its resources. This is not unlike object oriented programming-the type system provides a unified interface, not unlike an abstract base class. The programmer need not worry what specific class is being referenced, as long as it correctly implements all the required methods. In this analogy...