On 5 August 2014 16:25, Reid Vandewiele <[email protected]> wrote:

> On Mon, Aug 4, 2014 at 3:18 PM, Henrik Lindberg <
> [email protected]> wrote:
>
>>
>> So, to summarize: The use of * => as an operator is not liked but the
>> concept of being able to set attributes from a hash is. Unfortunately, it
>> is not possible to directly allow an expression at the position in
>> question, there must be a syntactical marker.
>>
>> As pointed out earlier, the * => was thought to read as "any_attribute =>
>> from_these_values", but I totally grok if people have an allergic reaction.
>>
>> We can do this though:
>>
>> file { default: ($hash) }
>>
>> This works because it is impossible to have an attribute name in
>> parentheses.
>>
>> In use:
>>
>> file (
>>   default   : ($my_file_defaults + { mode => '0666' });
>>   '/tmp/foo': ;
>>   '/tmp/bar': ;
>> }
>>
>> Is that better? No new operator, but you have to use parentheses around
>> the expression.
>>
>> We can naturally also revert the functionality, but it seems it is liked
>> conceptually.
>>
>>
>> - henrik
>>
>
>
> I think the parenthesis are far preferable over *=>. That isn't to say I
> like them - I don't particularly. But the functionality is desirable, and
> if it's a matter of a technical limitation then parenthesis are a Good
> Enough (TM) compromise from the more ideal direct use of a hash.
>

I really prefer the use of  * => over the parenthesis. Especially if you
need to merge things into the hash. For example look at this example:

# using parenthesis hash style
class foo (
  $servername = $::fqdn,
  $port = 80,
  $ssl = false,
  $extra_opts={},
) {
  apache::vhost { $servername: ($extra_opts + {
      port => $port,
      ssl  => $ssl,
    })
  }
}

# using * =>
class foo (
  $servername = $::fqdn,
  $port = 80,
  $ssl = false,
  $extra_opts={},
) {
  apache::vhost { $servername:
    port => $port,
    ssl  => $ssl,
    *    => $extra_opts,
  }

}

IMO the *=> is way more readable (as gist here if formatting is screwed up
for you: https://gist.github.com/dalen/57b37b80a9ba1879b78c). This is quite
similar to what I linked earlier that I am doing in
https://github.com/spotify/puppet-puppetexplorer/blob/master/manifests/init.pp#L89-L97
So it is not just a contrived example.

-- 
Erik Dalén

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/CAAAzDLdQv5iC40X0Qpx9pFaEhKf6FBPwf%3DKoLjtO7oDnDVt5bw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to