Issue #5517 has been updated by John Bollinger.

John Bollinger wrote:
> Parametrized class declaration syntax has *always* had issues, with this 
> being one of the lesser.  I have written rather extensively about it on 
> puppet-users, so I will spare everyone most of the harangue, but the bottom 
> line is this: it is fundamentally problematic that if a parametrized 
> declaration of a given class is used, then that must be the first declaration 
> of that class that is parsed.

Moreover, that springs from a deeper dissonance between parametrized-style 
class declarations and the essential nature of Puppet classes.  Because classes 
are singletons, their characteristic data are properties of (node, class) 
pairs.  With that being the case, the fact that classes can be declared 
multiple times makes class declarations the wrong place to bind data to 
classes, because putting data there associates them with one declaration out of 
many, instead of directly with the class itself.

If you want a parametrized container to which you can bind data via the DSL, 
then there are always definitions.  You can even write them so that attempting 
to declare multiple instances produces a parse error (intentionally).
----------------------------------------
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-83598

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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to