Looking back at what you implemented during this book so far, you 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 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 be found on a remote machine only, which Puppet handles through exported resources. Such manifest designs that can rely on facts are very economic. The information has already been gathered, and a single class can most likely behave correctly for many or all of your nodes and manage a common task in a graceful manner...