Issue #3667 has been updated by Jesse Wolfe. Status changed from Ready for Testing to Ready for Checkin Priority changed from Normal to High
---------------------------------------- Bug #3667: Namespace issue in classes in testing http://projects.puppetlabs.com/issues/3667 Author: Brice Figureau Status: Ready for Checkin Priority: High Assigned to: Brice Figureau Category: compiler Target version: Rowlf Affected version: testing Keywords: Branch: http://github.com/masterzen/puppet/tree/tickets/testing/3667 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.
