On Nov 3, 2010, at 6:38 AM, jcbollinger wrote:
>
>
> On Nov 2, 11:43 am, Nigel Kersten <[email protected]> wrote:
>> On Tue, Nov 2, 2010 at 4:32 PM, Patrick <[email protected]> wrote:
>>
>>> On Nov 2, 2010, at 9:14 AM, Michael Gliwinski wrote:
>>
>>>> On Tuesday 02 Nov 2010 15:06:19 Nigel Kersten wrote:
>>
>>>>> Thanks. There's one thing I'm not quite clear on.
>>
>>>>> This proposal means we have concatenation and find-first-existing
>>>>> support for the source parameter, and concatenation for the template
>>>>> function, but how are we proposing we provide find-first-existing
>>>>> support for the template and file functions? Or are we dropping that
>>>>> goal?
>>
>>>> I believe that was by either passing an array or multiple arguments, no?
>>>> E.g.:
>>
>>>> find-first-existing:
>>
>>>> file('foo', 'bar')
>>>> template('foo.erb', 'bar.erb')
>>
>>>> concatenation:
>>
>>>> concat(file('foo'), file('bar'))
>>>> concat(template('foo.erb'), template('bar.erb'))
>>
>>>> that way you can even mix them ;)
>>
>>>> concat(file('header'), template("foo.$host.erb", "foo.erb"))
>>
>>> The proposal I was supporting (and the one in the bug tracker) retained
>>> backward compatibility which means that passing more than one file to
>>> template() still concatenates. That is deprecated though.
>>
>>> *) Would creating a function that says, 'return the first argument that
>>> doesn't throw an exception' be useful?
>>> *) Is it even feasible to write?
>>
>> maybe... I'm having trouble thinking of a decent name for this though :)
>>
>>> *) Also, I'm assuming that file() and template() throw an exception if the
>>> file doesn't exist. Does anyone know if that's true?
>>
>> From memory they do, but I'll have to double check.
>>
>>> *) Also, what would you name this function?
>>
>>> I'm thinking that if we do take this approach, it should be split off into
>>> another ticket.
>>
>> I kind of disagree with splitting it off.
>>
>> Perhaps I didn't express myself well, but my main impetus was to make
>> the source/file/template data specifications *all* support the
>> find-first-existing and concatenation functionality in a sane and
>> consistent manner.
>
> As Patrick already wrote, the proposal that seemed to garner broad
> acceptance maintains backwards compatibility by preserving, but
> deprecating, template()'s concatentation feature. If the function is
> only supposed to be passed one argument, then the question of find-
> first does not arise.
>
> If there is a desire for find-first functionality for template(), then
> I think the most general solution would be some version of Patrick's
> suggested function for determining which file name to use, whether it
> be named "coalesce", "first_file", "find_first", "first_existing",
> "choose", "options", or something else. Thus:
>
> template( find_first("t1", "t2") )
>
> In that case, you might also consider deprecating multiple arguments
> to the file() function in favor of this new approach (i.e.
> file( find_first("foo", "bar") ) instead of file("foo", "bar") ).
>
> Alternatively, a variant version of template() could be added that
> provides find-first semantics. It could be named template_choose, or
> some similar thing. I prefer the other approach, though.
This is what I wanted except reversed. I was assuming that find_first() can't
open or find files. It can only look at what it returned to it, so the syntax
would be:
find_first( file('foo'), file('bar') )
or
find_first( template('foo'), template('bar') )
or even
find_first( file('foo'), template('bar') )
I think this order gives you more flexibility. Also, you might be able to put
a generate() function in there to depending on implementation.
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" 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-users?hl=en.