What are templates?
In previous chapters, we've used Puppet to manage the contents of files on the node by various means, including setting the contents to a literal string using the content
attribute, and copying a file from a Puppet module using the source
attribute. While these methods are very useful, they are limited in one respect: they can only use static text, rather than building the contents of the file dynamically, based on Puppet data.
The dynamic data problem
To see why this is a problem, consider a common Puppet file management task such as a backup script. There are a number of site- and node-specific things the backup script needs to know: the local directories to back up, the destination to copy them to, and any credentials needed to access the backup storage. While we could insert these into the script as literal values, this is rather inflexible. We might have to maintain several versions of the script, each identical to the others except for a backup location, for...