Looking back at what you have implemented during this book so far, you have managed to create some very versatile code that did very useful things in an automatic fashion. Your nodes can distribute entries for /etc/hosts among themselves. They register each other's public SSH key for authentication. A node can automatically register itself to a central Cacti server.
Thanks to Facter, Puppet has the information that allows the effortless handling of these use cases. Many configuration items are unique to each node only because they refer to a detail (such as an IP address or a generated key) that is already defined. Sometimes, the required configuration data can only be found on a remote machine, which Puppet handles through exported resources. Such manifest designs that can rely on facts are very economical. The information...