Issue #3667 has been reported by Brice Figureau.
----------------------------------------
Bug #3667: Namespace issue with definitions in testing
http://projects.puppetlabs.com/issues/3667
Author: Brice Figureau
Status: Unreviewed
Priority: Normal
Assigned to:
Category: compiler
Target version: Rowlf
Affected version: testing
Keywords:
Branch:
Testing doesn't seem to use the correct namespaces when referring a definition:
<pre>
class snmp::agent {
define trap($trapsink) {
notify { "trap: $trapsink of $name": }
}
trap{ "this is a trap" : trapsink => "trapsink" }
}
include snmp::agent
</pre>
produces
<pre>
./lib/puppet/resource.rb:169:in `initialize'
./lib/puppet/parser/resource.rb:111:in `initialize'
./lib/puppet/parser/expression/resource.rb:39:in `new'
./lib/puppet/parser/expression/resource.rb:39:in `compute_denotation'
./lib/puppet/util/errors.rb:35:in `exceptwrap'
./lib/puppet/parser/expression/resource.rb:37:in `compute_denotation'
./lib/puppet/parser/expression/resource.rb:36:in `collect'
./lib/puppet/parser/expression/resource.rb:36:in `compute_denotation'
./lib/puppet/parser/expression.rb:72:in `denotation'
./lib/puppet/parser/expression/array.rb:35:in `compute_denotation'
./lib/puppet/parser/expression/array.rb:34:in `collect'
./lib/puppet/parser/expression/array.rb:34:in `compute_denotation'
./lib/puppet/parser/expression.rb:72:in `denotation'
./lib/puppet/resource/type.rb:38:in `evaluate_code'
./lib/puppet/parser/resource.rb:73:in `evaluate'
./lib/puppet/parser/compiler.rb:131:in `evaluate_classes'
./lib/puppet/parser/compiler.rb:122:in `each'
./lib/puppet/parser/compiler.rb:122:in `evaluate_classes'
./lib/puppet/parser/functions/include.rb:6:in `function_include'
./lib/puppet/parser/expression/function.rb:36:in `send'
./lib/puppet/parser/expression/function.rb:36:in `compute_denotation'
./lib/puppet/parser/expression.rb:72:in `denotation'
./lib/puppet/parser/expression/array.rb:35:in `compute_denotation'
./lib/puppet/parser/expression/array.rb:34:in `collect'
./lib/puppet/parser/expression/array.rb:34:in `compute_denotation'
./lib/puppet/parser/expression.rb:72:in `denotation'
./lib/puppet/resource/type.rb:38:in `evaluate_code'
./lib/puppet/parser/resource.rb:73:in `evaluate'
./lib/puppet/parser/compiler.rb:280:in `evaluate_main'
./lib/puppet/parser/compiler.rb:82:in `compile'
./lib/puppet/parser/compiler.rb:18:in `compile'
./lib/puppet/indirector/catalog/compiler.rb:77:in `compile'
./lib/puppet/util.rb:179:in `benchmark'
./lib/puppet/indirector/catalog/compiler.rb:75:in `compile'
./lib/puppet/indirector/catalog/compiler.rb:34:in `find'
./lib/puppet/indirector/indirection.rb:186:in `find'
./lib/puppet/indirector.rb:50:in `find'
./lib/puppet/application/main.rb:117:in `main'
./lib/puppet/application.rb:304:in `send'
./lib/puppet/application.rb:304:in `run_command'
./lib/puppet/application.rb:295:in `run'
./lib/puppet/application.rb:391:in `exit_on_fail'
./lib/puppet/application.rb:295:in `run'
sbin/puppet:15
./lib/puppet/parser/compiler.rb:21:in `compile'
./lib/puppet/indirector/catalog/compiler.rb:77:in `compile'
./lib/puppet/util.rb:179:in `benchmark'
./lib/puppet/indirector/catalog/compiler.rb:75:in `compile'
./lib/puppet/indirector/catalog/compiler.rb:34:in `find'
./lib/puppet/indirector/indirection.rb:186:in `find'
./lib/puppet/indirector.rb:50:in `find'
./lib/puppet/application/main.rb:117:in `main'
./lib/puppet/application.rb:304:in `send'
./lib/puppet/application.rb:304:in `run_command'
./lib/puppet/application.rb:295:in `run'
./lib/puppet/application.rb:391:in `exit_on_fail'
./lib/puppet/application.rb:295:in `run'
sbin/puppet:15
Puppet::Parser::Expression::Resource failed with error ArgumentError: Invalid
resource type trap at /tmp/trap.pp:7 on node macbook.local
</pre>
It looks like the issue is that in lib/puppet/resource.rb we try to find the
'trap' definition (see find_defined_resource_type) with the 'snmp' namespaces,
while when the definition was added to the known_resource_types it was under
['snmp','agent'].
It seems the namespace we use to find the definition comes from the current
scope (Class[snmp::agent]). The namespace of this scope returns 'snmp'.
I don't really see how this can be fixed.
Note that the following manifest works fine:
<pre>
class snmp::agent {
define trap($trapsink) {
notify { "trap: $trapsink of $name": }
}
snmp::agent::trap{ "this is a trap" : trapsink => "trapsink" }
}
include snmp::agent
</pre>
--
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.