Issue #4483 has been updated by Jesse Wolfe. Status changed from Accepted to Available In Testing Branch Assigned to changed from Paul Berry to Jesse Wolfe Target version set to Statler Branch set to http://github.com/reductivelabs/puppet/tree/next
Available in `next` as 16f701edd89a320ad73b5468d883dfb017fe6e96 ---------------------------------------- Bug #4483: Already-loaded classes shadow autoloaded classes, violating namespace resolution order http://projects.puppetlabs.com/issues/4483 Author: Paul Berry Status: Available In Testing Branch Priority: Normal Assigned to: Jesse Wolfe Category: Target version: Statler Affected version: 2.6.1rc1 Keywords: Branch: http://github.com/reductivelabs/puppet/tree/next I found this bug while investigating issue #4211. The failure applies to 0.25.5 as well as 2.6.1rc1. If I run "puppet init.pp", supplying the following source files: init.pp: <pre> class test::foo { include bar } include test::foo </pre> test/foo/bar.pp: <pre> class test::foo::bar { notify {"test::foo::bar": } } </pre> I get this output: <pre> notice: test::foo::bar notice: /Stage[main]/Test::Foo::Bar/Notify[test::foo::bar]/message: defined 'message' as 'test::foo::bar' </pre> This is expected; the statement "include bar" is interpreted as referring to "test::foo::bar", so it causes "test/foo/bar.pp" to be autoloaded. However, if I change init.pp to this: <pre> class test::bar { notify {"test::bar": } } class test::foo { include bar } include test::foo </pre> I now get this output: <pre> notice: test::bar notice: /Stage[main]/Test::Bar/Notify[test::bar]/message: defined 'message' as 'test::bar' </pre> This is unexpected. The statement "include bar" should be resolved by looking first in test::foo, then in test, then at toplevel. So it should still resolve to "test::foo::bar". Further experimentation reveals that the shadowing effect only occurs because "test/foo/bar.pp" hasn't been loaded yet. If you manually force that file to be loaded by changing init.pp to this: <pre> import "test/foo/bar.pp" class test::bar { notify {"test::bar": } } class test::foo { include bar } include test::foo </pre> Then the expected behavior is restored. -- 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.
