On Mon, 2012-09-10 at 12:34 -0700, Douglas Garstang wrote: > Why does this: > > Class['network::base'] -> Class['apt::base'] -> Class['lvm::setup'] -> > Class <| |> > > generate this error? > > err: Could not retrieve catalog from remote server: Error 400 on > SERVER: Resource type class doesn't exist at > /truth/sauce/env/prod/modules/role/manifests/common.pp:18 on node > mon01.ap1.xxx.com > warning: Not using cache on failed catalog > err: Could not retrieve catalog; skipping run
Classes are not resources. As a result, you cannot use the resource collection syntax <| |> on classes. Even if it worked, this wouldn't do what you wanted! Class <| |> would include Class['network::base'] and all the others, giving dependency cycles, like this: Class['network::base'] -> Class['apt::base'] -> Class['lvm::setup'] -> Class['network::base'] > I've been repeatedly told to stop using run stages, and use resource > chaining instead. However, without putting the Class <| |> at the end, > to indicate that every other class should come afterwards, the > functionality is not the same. With run stages, I could specify that > classes A, B and C should applied first, before everything else. If you're sure that you will always need these classes run before everything else, a run stage might still make sense. You would want to have one run stage in addition to main, perhaps like this: stage { 'early_setup': before => Stage['main'], } class { 'network::base': stage => 'early_setup', } class { 'apt::base': stage => 'early_setup', } class { 'lvm::setup': stage => 'early_setup', } Class['network::base'] -> Class['apt::base'] -> Class['lvm::setup'] (In your case, you'd want to put the exec for apt-get update into the same 'early_setup' stage as well, for example by putting it into the apt::base class). If you later add additional apt repositories, you'd have to put them into the same early stage as well, so they can be configured before doing the apt-get update. Everything else can then go in the main stage, and should be ordered only relative to each-other. The general advice that I've seen is that you should use a limited number of stages only for cases like this where you need some system setup that is independent of the other things that you'll be installing on the system, and must be ordered before (or after) *everything* else. Do keep in mind the things listed in http://docs.puppetlabs.com/puppet/2.7/reference/lang_run_stages.html#limitations-and-known-issues in particular, make sure that the classes in the non-main stage don't include other classes without setting the stage on them as well! -- Calvin Walton <calvin.wal...@kepstin.ca> -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.