Any resource can be exported, including defined types and your own custom types. Tags may be used to limit the set of exported resources collected by a collector. Tags may include local variables, facts, and custom facts. Using exported resources, defined types, and custom facts, it is possible to have Puppet generate complete interactions without intervention (automatically).
As an abstract example, think of any clustered service where members of a cluster need to know about the other members of the cluster. You could define a custom fact,
clustername, that defines the name of the cluster based on information either on the node or in a central Configuration Management Database (CMDB).
CMDBs are the data warehouses of ...