Issue #5046 has been updated by Paul Berry.

Actually, doing class{'foo': } multiple times is problematic because this 
notation allows parameters to be passed to the class, and you might pass a 
different set of parameters each time you invoke the class.  So doing 
class{'foo': } multiple times is already prohibited by the language.

So the current behavior is, you can only do:

* class{'foo': } once OR
* include multiple times OR
* both, provided that the class{'foo': } happens before any of the includes.

My proposal is that we drop support for the third option, on the grounds that 
its behavior is already problematic because of the order dependency.
----------------------------------------
Bug #5046: Mixed invocation of parameterized classes leads to order 
dependencies, should be disallowed
https://projects.puppetlabs.com/issues/5046

Author: Paul Berry
Status: Accepted
Priority: Normal
Assignee: 
Category: language
Target version: 2.6.x
Affected Puppet version: 
Keywords: 
Branch: 


When a parameterized class has default values for all of its parameters, it may 
be invoked using either "include" or "class { ... }" notation.  The "include" 
notation is idempotent; the "class { ... }" notation isn't.  As a result, there 
is an order dependency.  This works:

<pre>
class foo($param = defaultvalue) {
  notify { $param: }
}

class { foo: param => value }
include foo
</pre>

But this produces an error:

<pre>
class foo($param = defaultvalue) {
  notify { $param: }
}

include foo
class { foo: param => value }
</pre>

In large manifests, it is not always obvious (or even well-defined) what order 
statements will be executed in.  To avoid user confusion, I think it would be 
preferable if both these examples produced an error message saying something 
like "class foo already invoked using 'class { ... }' syntax, cannot also 
invoke using 'include'".


-- 
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to