You can sync a target file with another file accessible via the local file system by using a File
resource whose source
attribute specifies the path to the original. You can produce a modified copy in a variety of ways, such as by applying one or more File_line
resources (from stdlib) or by applying an appropriate script via an Exec
resource.
But if you go that route then you have to either
- accept that the target file will be re-synced on every Puppet run, OR
- set the
File
resource's replace
attribute to false
, in which case changes to the original file will not be propagated into the customized copy.
The latter is probably the more acceptable choice for most people. Its file-copying part might look something like this:
$project_dir = '/path/to/Infrastructure/Project1'
file { "${project_dir}/UAT/Uat_SshHost/overthere.SshHost":
ensure => 'file',
source => "${project_dir}/COMMONS/Template_SshHost/overthere.SshHost",
replace => false,
}
But you might want to consider instead writing a custom type and provider for the target file. That would allow you to incorporate changes from the original template without re-syncing the file on every run, and it would give you a lot more flexibility with respect to the customizations you need to apply. It would also present a simpler interface for you to use in your manifests, which could make managing these easier. But, of course, that's offset by the cost is that writing and maintaining a custom type and provider. Only you can determine whether that would be a worthwhile trade-off.