You want to deploy a specific file based on the value of a fact.
file { "/etc/mysql/conf.d/tuning.cnf":
ensure => "present",
source => [
"puppet:///modules/mysql-server/tuning.$hostname.cnf",
"puppet:///modules/mysql-server/tuning.$domain.cnf",
"puppet:///modules/mysql-server/tuning.cnf"
],
}
Sometimes you want to have specific versions of a file for a given host, location or operating system while having a default fallback for the standard cases. By using an array of sources in a file resource, with the value of a fact as part of the on-disk file name, you can easily make your configs more granular where needed while keeping sensible defaults.
In the mysql-server module you would have file names like these:
files/
tuning.host1.cnf
tuning.host2.cnf
tuning.example.org.cnf
tuning.cnf
When using multiple sources in this way puppet will use the first file that matches a source line, and cause an error if none match, so you should nearly always have a default file.