Hi, I''ve just updated some modules that worked fine in Puppet 2.8, to v3.0.1. I''m struggling to get class autoloading working for some reason, and I wonder if someone can help? My main class is as follows; cat /etc/puppetlabs/puppet/environments/production/blah_soe/manifests/init.pp class blah_soe { class { ''blah_packages'': require => Class[''blah_yumrepo''] } cd /etc/puppetlabs/puppet/environments/production/blah_soe/tests [root@puppetcore1 tests]# /opt/puppet//bin/puppet apply ./init.pp --noop Error: Could not find dependency Class[Blah_yumrepo] for Class[Blah_packages] ...where tests/init.pp is just include blah_soe. *When I also include blah_packages here, it all works fine*. This was NOT necessary on the previous 2.8 instance. Class autoloading should happen as long as the modulepath is set correctly, and the ownership and permissions are not crazy?? (btw...I did a recursive chown -R puppet down the environments directory, which didn''t help, and I''ve done a 0777 down the same single path, which also didn''t work) *environment stuff* [root@puppetcore1 tests]# puppet master --configprint modulepath /etc/puppetlabs/puppet/environments/production:/opt/puppet/share/puppet/modules [root@puppetcore1 tests]# puppet master --configprint environment production *blah_packages appears to be working just fine.* cd /etc/puppetlabs/puppet/environments/production/blah_packages/tests [root@puppetcore1 tests]# /opt/puppet//bin/puppet apply ./init.pp --noop Notice: /Stage[main]/Blah_packages/Package[iotop]/ensure: current_value absent, should be present (noop) Notice: Class[Blah_packages]: Would have triggered ''refresh'' from 1 events Notice: Stage[main]: Would have triggered ''refresh'' from 1 events Notice: Finished catalog run in 0.83 seconds [root@puppetcore1 tests]# Any takers? My head is hurting :( Thanks Steven -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users. For more options, visit https://groups.google.com/groups/opt_out.
jcbollinger
2013-Sep-25 15:19 UTC
[Puppet Users] Re: Puppet 3 class autoloading not working?
On Wednesday, September 25, 2013 6:07:56 AM UTC-5, Steven James wrote:> > Hi, > > I''ve just updated some modules that worked fine in Puppet 2.8, to v3.0.1. > I''m struggling to get class autoloading working for some reason, and I > wonder if someone can help? > >"Autoloading" refers to a mechanism by which the master locates the manifest file in which a class or defined type definition is found, based on the name of the class or defined type. It is triggered when the master attempts to evaluate a declaration of a class or resource whose definition it has not yet evaluated. That doesn''t appear to have much to do with what you''re actually trying to do.> My main class is as follows; > > cat > /etc/puppetlabs/puppet/environments/production/blah_soe/manifests/init.pp > > class blah_soe { > > class { ''blah_packages'': > require => Class[''blah_yumrepo''] > > } > >Autoloading has little to do with references to classes or resources, and in particular, it does not itself cause classes to be declared when otherwise they are not. As far as I am aware, references to classes, such as "Class[''blah'']", do not cause declaration of otherwise-undeclared classes by any other mechanism, either. According to the language guide, "Resource references identify a specific *existing* Puppet resource by its type and title" (emphasis added).> cd /etc/puppetlabs/puppet/environments/production/blah_soe/tests > [root@puppetcore1 tests]# /opt/puppet//bin/puppet apply ./init.pp --noop > Error: Could not find dependency Class[Blah_yumrepo] for > Class[Blah_packages] > > ...where tests/init.pp is just include blah_soe. *When I also include > blah_packages here, it all works fine*. >Do you mean it works when you also include *blah_yumrepo* in init.pp? That''s exactly what I would expect to be needed. Alternatively (better, in fact), class blah_soe could include blah_yumrepo. It is safe for both classes to do it. Wherever I use a class reference, I am sure to declare the referenced class as well, typically via the ''include'' function. That ensures the class is declared, and I can be confident that it needs to be declared (somewhere) because I am using a reference to it. Although it is not strictly necessary to declare the referenced class in the same scope, it is safe to do so (modulo issues related to parameterized-style class declarations, but those are not relevant to the code we are now discussing).> This was NOT necessary on the previous 2.8 instance. Class autoloading > should happen as long as the modulepath is set correctly, and the ownership > and permissions are not crazy?? > >Class autoloading does not do what you seem to think it does, nor does any other Puppet mechanism of which I am aware. From your version numbers, though, I infer that you are using Puppet Enterprise, so perhaps it adds such a feature to the base product. In that case you would want to seek support on the "Puppet Enterprise" group or directly from PuppetLabs. My suspicion, however, is that you are mistaken about the code you are now trying to apply working with PE 2.8. Even if you have not changed the manifest files you are looking at in any way, a difference in Puppet''s configuration could result in it using different files than you think it''s using. John -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users. For more options, visit https://groups.google.com/groups/opt_out.