On Mon, Sep 10, 2012 at 1:41 PM, Calvin Walton <calvin.wal...@kepstin.ca> wrote: > 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, Thanks. Your describing exactly what I had, before I was told to stop using run stages and use resource chaining instead. Apparently resource chaining provides the same functionality as run stages. Seems that it indeed does not. Doug. -- 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.