On 5 August 2014 16:25, Reid Vandewiele <r...@puppetlabs.com> wrote:

> On Mon, Aug 4, 2014 at 3:18 PM, Henrik Lindberg <
> henrik.lindb...@cloudsmith.com> 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 puppet-dev+unsubscr...@googlegroups.com.
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