Issue #5517 has been updated by Luke Kanies.

On Aug 14, 2013, at 9:18 AM, "[email protected]" <
[email protected]> wrote:

  Issue #5517 has been updated by John Bollinger.


Dustin Mitchell wrote:

I dislike the idea of removing class { name: ... } syntax entirely. I think
it was an awkward fit and would be fine with use of a time machine to
ensure it was never introduced, but now that it’s here, it has some uses,
and works fine outside of silent failures when using inheritance.

[...]

Anyway, we have already established that class parameter overrides
*cannot*be made to work reliably. It doesn’t seem very sensible to me
to devise use
cases for a feature you cannot have, no matter how wonderful those uses
might make your life.

I'm not sure I agree with this.  I don't think we've actually tried very
much to make this work, have we?  What alternatives have we actually tried?

It’s time for PL to throw in the towel on parameterized-style class
declarations. They simply are not the right tool for the job of binding
data to classes. They never have been, and they never can be. ARM-8 looks
like it may be moving in the right direction (thanks for the pointer,
Henrik). PL ought to be devoting its efforts to devising a solution that is
fundamentally viable, instead of trying out new shades of lipstick on the
pig.

Hi John,

Do you have a recommendation for what we would replace it with?  Do you
think classes still make sense in a world without parameterized classes, or
do you think we should just remove classes entirely?

----------------------------------------
Bug #5517: behavior change within 2.6 makes it impossible to override class 
parameters of "included" parametrized classes
https://projects.puppetlabs.com/issues/5517#change-96426

* Author: Peter Meier
* Status: Accepted
* Priority: High
* Assignee: eric sorenson
* Category: language
* Target version: 3.x
* Affected Puppet version: 3.0.2
* Keywords: parameterized_classes
* Branch: 
----------------------------------------
In 2.6.1 the following recipe:

<pre>
class a(
  $b_c = { 'b' => 'foo' }
) {
  notice $a::b_c
  if $a::b_c {
    notice $a::b_c['b']
  }
}

class b {
  class{'a': b_c => false }
}

class b::c inherits b {
  Class['a']{ b_c => { 'b' => 'bleh' } }
}

class b::d {
  include ::b::c
}

include b::d
</pre>

produces the following output:

<pre>
$ puppet foo.pp 
notice: Scope(Class[A]): bbleh
notice: Scope(Class[A]): bleh
</pre>

Which is what I expected. However with 2.6.3 it produces the following output:

<pre>
# puppet foo.pp 
notice: Scope(Class[A]): false
</pre>

Imho likely the changes for #4778 and #5074 are responsible for that behavior 
change.

However this makes it impossible to overwrite parameters of a "included" 
parametrized class in a subclass. There are only ugly workarounds for that 
problem and I think this should actually work as it did within 2.6.1. Otherwise 
the usefulness of parametrized classes is quite reduced.


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/puppet-bugs.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to