On 2014-06-08 16:56, Spencer Krum wrote:
I think a metaparameter is a great solution. It has the advantage of
feeling the most puppety, and can be successfully googled for.

I don't think I agree that attribute_hash is more descriptive than
attribute_defaults, since, aren't we setting defaults?

No, this is not for defaults, it is for assigning values to attributes.
Local defaults are set by setting attributes of an entry labeled with a title that is a literal default.

- henrik

Thanks,
Spencer


On Wed, Aug 6, 2014 at 6:46 AM, Henrik Lindberg
<henrik.lindb...@cloudsmith.com <mailto:henrik.lindb...@cloudsmith.com>>
wrote:

    On 2014-06-08 3:41, Reid Vandewiele wrote:

        On Tue, Aug 5, 2014 at 4:11 PM, Henrik Lindberg
        <henrik.lindberg@cloudsmith.__com
        <mailto:henrik.lindb...@cloudsmith.com>
        <mailto:henrik.lindberg@__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>
        <mailto: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/
    <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+unsubscribe@__googlegroups.com
    <mailto:puppet-dev%2bunsubscr...@googlegroups.com>.
    To view this discussion on the web visit
    
https://groups.google.com/d/__msgid/puppet-dev/lrtbji%24fqe%__241%40ger.gmane.org
    
<https://groups.google.com/d/msgid/puppet-dev/lrtbji%24fqe%241%40ger.gmane.org>.

    For more options, visit https://groups.google.com/d/__optout
    <https://groups.google.com/d/optout>.




--
Spencer Krum
(619)-980-7820

--
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
<mailto:puppet-dev+unsubscr...@googlegroups.com>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-dev/CADt6FWPh4uaR%3DWHJq3JO7eFe9xQ8fugCJWiuSw-v%3DoEXcD0kyg%40mail.gmail.com
<https://groups.google.com/d/msgid/puppet-dev/CADt6FWPh4uaR%3DWHJq3JO7eFe9xQ8fugCJWiuSw-v%3DoEXcD0kyg%40mail.gmail.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.


--

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/lru2bp%2436j%241%40ger.gmane.org.
For more options, visit https://groups.google.com/d/optout.

Reply via email to