Issue #11762 has been reported by Daniel Grace.
----------------------------------------
Feature #11762: Add File resource option to treat all/some input files as
templates when recursing subdirectories
https://projects.puppetlabs.com/issues/11762
Author: Daniel Grace
Status: Unreviewed
Priority: Normal
Assignee:
Category: file
Target version:
Affected Puppet version:
Keywords: puppet file resource recursion templates
Branch:
While in theory we should be avoiding file resources, it seems like it would be
handy to be able to recursively copy a directory while treating files within
that directory as templates -- particularly for quickly adapting an existing
configuration to Puppet. Using content => template(...) is fine for individual
files, but is a headache for a large number of them.
At the simplest level, an additional option to file could be added that says
"If this is a file, send the generated contents through template() to determine
the final file contents."
At a more complex level, the following might be added:
* Ability to include/exclude files by suffix, being a binary file, or MIME type
(presumably harder to implement)
* Functionality such that if we find a file called bar.erb on the source
(/etc/puppet/[...]/files/bar.erb) but no file called 'bar', we treat bar.erb as
a template to generate bar. If we do have an undecorated 'bar' file, it's
treated as a regular file (not evaluated as a template). The template suffix
(or prefix?) should be customizable in this case. A few ways this could be
implemented:
* templatesuffix/templateprefix parameters. (e.g. templatesuffix => ".erb")
* templatepattern paramater: A regexp that -- when it matches a file name --
treats that file as an ERB template for an actual file matching the capture
portion of the expression. i.e. templatepattern => "^(.*)\.erb$". The
question here then is should templatepattern match against just the file name
or should it match the entire relpath (is .../files/subdir/baz.erb 'baz.erb'
or 'subdir/baz.erb'?) The former makes patterns easier to write, the latter
makes them more powerful.
Scenario: A given user already has a fairly complicated configuration file
layout for package 'foo' stored in /etc/foo. Most nodes running 'foo' use
nearly-identical configuration files with just a handful of machine-specific
changes. While it's possible to create a File resource for each individual
configuration file and template() in the appropriate template, this can be
cumbersome if there's a large number of files in question.
File resources already have the ability to recurse into directories. It'd be
nice to have an option that essentially says "When recursing a directory, if a
directory entry is a file (rather than a directory/etc), treat the contents of
it as a template". The above scenario could then be implemented with the
following steps:
1. Copy existing contents of /etc/foo to /etc/puppet/module/foo/files
2. Edit files to define machine-specific behavior, treating them as ERB
templates.
3. Import the entire set of files with something akin to:
<pre>
class Foo {
file { '/etc/foo':
ensure => directory,
recurse => true,
source => 'foo'
template => true, // proposed addition to treat source files as templates.
}
}
</pre>
--
You have received this notification because you have either subscribed to it,
or are involved in it.
To change your notification preferences, please click here:
http://projects.puppetlabs.com/my/account
--
You received this message because you are subscribed to the Google Groups
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-bugs?hl=en.