Issue #5158 has been updated by Nigel Kersten.
Latest proposal:
* Whenever an array is specified for source *or* content, we are employing
the "find first existing" heuristic.
e.g. this will use foo-$hostname if it exists, otherwise will use foo-generic.
file { "/tmp/foo":
ensure => file,
source => ["puppet:///modules/$module_name/foo-$hostname",
"puppet:///modules/$module_name/foo-generic",],
}
We now apply the same thing to content. You can supply an array for content,
and if an element is evaluated as empty, the next element is evaluated.
file { "/tmp/foo":
ensure => file,
content => [template("$module_name/foo-$hostname.erb",
template("$module_name/foo-generic.erb",],
}
**Note**: Unlike the source => [ ...] syntax, if all elements evaluate to an
empty string, we'll create the file with an empty string for content.
You can also choose to use the file function like this (imagine we've solved
the problem with file() only taking absolute paths):
file { "/tmp/foo":
ensure => file,
content => [file("$module_name/foo-$hostname",
file("$module_name/foo-generic",],
}
and yes, this means you can mix and match template() and file() and explicit
strings in an array.
We're also going to introduce a concatenation function called "cat".
You can use it with any of the functions that return data to concatenate, and
you can use it with content like this:
file { "/tmp/foo":
ensure => file,
content => cat(template("header.erb"), "some content",
template("footer.erb")),
}
Note that there are some important differences between
cat(template("a.erb"), template("b.erb")
and
template("a.erb", "b.erb")
The latter will allow you assign variables and define methods in a.erb that are
accessible to b.erb
When we provide a replacement for that functionality we will deprecate the
latter syntax.
----------------------------------------
Feature #5158: File resources: Make source/content parameters and the
file/template functions consistent.
https://projects.puppetlabs.com/issues/5158
Author: Nigel Kersten
Status: Accepted
Priority: High
Assignee: Nigel Kersten
Category:
Target version: Statler
Affected Puppet version:
Keywords: usability
Branch:
We have four main ways we can specify file content in a file resource.
1. The source parameter
2. The content parameter
3. The file function
4. The template function
These behave inconsistently in the following ways.
The source parameter, file function and template function all can take an
array. For source/file, the first file that exists will be used. For the
template function, we concatenate the templates instead.
The file function takes fully qualified paths only.
The template function takes fully qualified paths, or dereferences relative
paths as follows. 'foo/bar.erb' -> modules/foo/templates/bar.erb
The latter problem is relatively easily solved, particularly if we implement
#4885
We are going to have to break backwards compatibility to solve the first
problem however.
My feeling is that more people make use of the multi-select logic in the source
parameter/file function than make use of the concatenation of the template
function.
--
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.