On 2014-07-08 1:18, Wil Cooley wrote:
On Wed, Aug 6, 2014 at 1:30 PM, Henrik Lindberg
<[email protected] <mailto:[email protected]>>
wrote:

             $extra_opts = { $ssl => true, ... }


    I assume you mean {ssl => true, ...}, and not the value of a
    variable $ssl ?


Yes, sorry


             apache::vhost { ...
                ssl => undef,
                attributes => $extra_opts,
             }




        And:

             $extra_opts = { $ssl => undef, ... }
             apache::vhost { ...
                ssl => true,
                attributes => $extra_opts,
             }

    Both of these results in an error, you are not allowed to set ssl
    twice (most likely a mistake).


I think I trimmed too much context; Reid had proffered two behaviors and
I was responding to the first:

        Example 1 (assuming behavior whereinmerging is OK, and that
        explicit parameter specification takes precedence):

        ...

        Example 2 (assuming that merging is not OK, and that conflicts
        will be treated as duplicate parameter specification):

Example 1 can be used to replace/supplement resource defaults; 2 cannot.

        My expectation is that in both cases 'undef' means "pretend I've
        said
        nothing about thus attribute here" and that *true* wins in
        either case.

    undef only has a special meaning when it is the final value of the
    given attribute; it then means "No value specified for this parameter".
    That is undef behaves as a "value" until the resource creation takes
    place.


I think that amounts to the same thing, but from different sides of the
compiler, so to speak.

Such as ignoring a resource default:

    Exec { timeout => 30 }

    # Bunch of execs that sometimes take too damn long

    exec { '/usr/bin/sleep 60': }

    ...

    # Then another exec that should have the default timeout, but I
    don't want
    # to hardcode (or even remember) what that is (i.e. pretend the above
    # resource default does not exist):

    exec { '/usr/bin/ping localhost': timeout => undef }

Or passing options from a defined type to a type declaration:

    define filelike($seltype = undef) {

       file { '/tmp/foo':

         seltype => $seltype,
       }
    }

Yes that is how undef works when you are passing arguments to parameters.



             apache::vhost { $title: **$extra_opts  }


        or:

             apache::vhost { $title: &$extra_opts }

        or:

             apache::vhost { $title: *$extra_opts }


    So, that was the initial proposal '*' for any name followed by =>
    and the value. This also looks similar to the unary splat '*' that
    can be used to unfold an array or hash.

    That suggestion was not well liked... "no more operators please...".


Part of what is bothersome to me about the "* =>" proposal is that it
looks like
an assignment to a wildcard, which makes my head spin.

    It would be possible to specify '*' as signaling "here is an
    attributes hash". The only quirk is that it would be a special
    syntactic marker that is followed by any expression (which includes
    splat) - no harm, just slightly odd that you are allowed to write
    **$extra_opts, where this is not allowed elsewhere (splat is non
    associative, just like unary minus).


Rather than a special construct that only applied for attributes, it
could be a
general unpacking operator, like it is in Ruby and Python. I guess
that's a bigger can of worms.

It is already an unpacking operator nicknamed 'splat', hence what I wrote above. The problem in the grammar is that there is the need to have a syntactic marker, it is impossible to allow any expression at that point.

I echo Reid's sentiments about language complexity and prefer the metavar.

ok, good, that seems to be what most prefer.

Wil

--
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]
<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-dev/CAMmm3r5jAUnP0s_rWVqtUqJ4cZjnuCrLLG77XteG0q7rY7W43Q%40mail.gmail.com
<https://groups.google.com/d/msgid/puppet-dev/CAMmm3r5jAUnP0s_rWVqtUqJ4cZjnuCrLLG77XteG0q7rY7W43Q%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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/lrugeh%24527%241%40ger.gmane.org.
For more options, visit https://groups.google.com/d/optout.

Reply via email to