On 2014-06-08 3:41, Reid Vandewiele wrote:
On Tue, Aug 5, 2014 at 4:11 PM, Henrik Lindberg
<henrik.lindb...@cloudsmith.com <mailto:henrik.lindb...@cloudsmith.com>>
wrote:
On 2014-05-08 18:24, Andy Parker wrote:
My argument against using parenthesis is that parenthesis, are often
read as "seldom necessary grouping". I believe that most programmers
read them as usually only needed for fixing precedence problems,
which
is really what is happening here but it doesn't look like it.
Based on
that I can imagine that a common, and frustrating mistake would be:
apache::vhost { $servername: $opts }
And then confusion and anger and bug reports.
Yeah, I think they are too subtle too (and hence the * =>).
One more proposal :-)
We could leave out the name part all together (i.e. drop the '*').
dalens' example would then look like this:
apache::vhost { $servername:
port => $port,
ssl => $ssl,
=> $extra_opts,
And if it is used for local defaults (or the only thing for a titled
resource):
file { default: => $hash }
file { '/tmp/foo': => $hash }
This works best if it is restricted to being the only attribute
operation for a title, but looks a bit odd when presented in a list
where there are also named (i.e. name => expression) operations.
At least it is not a new operator.
Is this better than * => or requiring parentheses ?
- henrik
I'm still not happy with either "* =>" or " =>". Both unnecessarily
(imho) complicate the structure of the most basic building block in the
Puppet language.
On Tue, Aug 5, 2014 at 11:52 AM, David Schmitt <da...@dasz.at
<mailto:da...@dasz.at>> wrote:
I like that piece of code as it is. Perhaps I would add a comment
noting that $vhost_options is not allowed to override the
base_vhost_options and give a reason for that. I needed to browse up
to the parameter doc and think a bit about what that should mean.
I do not think the whole sequence would be any better with some kind
of special operator, except perhaps for the hash() thingy, which I
conveniently ignore in the analysis, but assume it's doing some merging.
Also, create_resources is google-able. To find the splat operator,
one would either have to know it or think about the language
reference and browse through the visual index or the operator chapter.
Maybe solving for this use case would be better handled by implementing
something that looks and feels like a metaparameter rather than trying
to come up with new syntax. That approach would have the benefit of not
complicating the language, and meet all of the functional requirements
discussed so far. It would also be google-able. There would need to be
some design around the choice of a name for the "metaparameter", but
it's easy enough to demonstrate the concept with a stand-in like
"attribute_defaults" or "attribute_hash".
Example 1 (assuming behavior whereinmerging is OK, and that explicit
parameter specification takes precedence):
apache::vhost { $servername:
port => $port,
ssl => $ssl,
attribute_defaults => $extra_opts,
}
Example 2 (assuming that merging is not OK, and that conflicts will be
treated as duplicate parameter specification):
apache::vhost { $servername:
port => $port,
ssl => $ssl,
attribute_hash => $extra_opts,
}
My initial thought would be to choose and settle on one behavior and
review an appropriate name, though it wouldn't be objectionable to
support both.
Does an operator/syntax gain us anything that this kind of
metaparameter-like approach does not?
The only negative implication of a meta-parameter-like approach is that
it requires a special reserved name. Currently attribute names can be
any valid name including keywords (except true and false, plus the names
that are already reserved for meta parameters).
An operator does not add any other value.
A small difference is that the meta attribute name may be used in
manifests that are evaluated by an older puppet. In those cases there
would be an error that "attribute_hash" is not a valid attribute name,
as opposed to a syntax error (if an operator is used).
Is taking a metaparameter-like approach still a language feature, or
does that become an actual metaparameter?
It becomes a language feature - otherwise the implementation of this
ripples through the entire system.
Visual review, for convenience:
file { $title: * => $attributes; }
file { $title: => $attributes; }
file { $title: ($attributes); }
file { $title: attribute_defaults => $attributes; }
file { $title: attribute_hash => $attributes; }
Using "attribute_hash" is certainly a lot more descriptive.
- henrik
--
Visit my Blog "Puppet on the Edge"
http://puppet-on-the-edge.blogspot.se/
--
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/lrtbji%24fqe%241%40ger.gmane.org.
For more options, visit https://groups.google.com/d/optout.