Bug #3667
Namespace issue in classes in testing
| Status: | Closed | Start date: | 04/25/2010 | |
|---|---|---|---|---|
| Priority: | High | Due date: | ||
| Assignee: | % Done: | 0% |
||
| Category: | compiler | |||
| Target version: | 2.6.0 | |||
| Affected Puppet version: | testing | Branch: | http://github.com/masterzen/puppet/tree/tickets/testing/3667 | |
| Keywords: | ||||
| Votes: | 0 |
Description
Testing doesn’t seem to use the correct namespaces when referring a definition:
class snmp::agent {
define trap($trapsink) {
notify { "trap: $trapsink of $name": }
}
trap{ "this is a trap" : trapsink => "trapsink" }
}
include snmp::agent
produces
./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
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:
class snmp::agent {
define trap($trapsink) {
notify { "trap: $trapsink of $name": }
}
snmp::agent::trap{ "this is a trap" : trapsink => "trapsink" }
}
include snmp::agent
History
Updated by Brice Figureau about 2 years ago
- Subject changed from Namespace issue with definitions in testing to Namespace issue in classes in testing
- Branch set to http://github.com/masterzen/puppet/tree/tickets/testing/3667
Fix available for testing in my github repository: http://github.com/masterzen/puppet/tree/tickets/testing/3667
Updated by James Turnbull about 2 years ago
- Status changed from Unreviewed to Accepted
Updated by Luke Kanies about 2 years ago
- Assignee set to Luke Kanies
Updated by Luke Kanies about 2 years ago
- Status changed from Accepted to In Topic Branch Pending Review
- Assignee changed from Luke Kanies to Brice Figureau
Works for me (albeit it’s in deep need of a rebase).
Updated by Jesse Wolfe about 2 years ago
- Status changed from In Topic Branch Pending Review to Ready For Checkin
- Priority changed from Normal to High
Updated by Nick Lewis almost 2 years ago
- Status changed from Ready For Checkin to Closed
Pushed in commit:f35c59f83b8df2e595ec44a6258dbae30c81237e in master