How can I tell Puppet "If I declare class X, apply its resources before class Y"?
Solution 1:
Not sure if it will work, but maybe you could try to define the dependencies on a node level scope. For example:
class X {
...
}
class Y {
...
}
node N {
include Y
}
node M {
Class['X'] -> Class['Y']
include X
include Y
}
Solution 2:
It looks like golja's answer might work. Here's the pattern I landed on myself. It seems to be working so far.
class yum::reposareready {
# The sole and critical purpose of this class is to act as an
# intermediary between various repositories and the package
# resources. It lets us do things like:
# class yum::repofoo { ... }
# class applicationbar {
# package { 'bazfromtherightrepo': ..., require => yum::reposareready, }
# }
# node n {
# class { 'yum::repofoo': before => Class['yum::reposareready'] }
# }
# With this pattern:
# 1. The repository resource doesn't need to know about its ordering.
# 2. Nodes can mix in repository resources, including and excluding
# repositories as needed.
# 3. Classes that declare package resources need only require a
# generic "repos are ready" class rather than the knowing the
# specific repository from which to get a package.
# DO NOT DO THIS:
# class yum::repofoo { before => Class['yum::reposareready'] }
# class yum::repobar { before => Class['yum::reposareready'] }
#
# node n {
# include yum::repofoo
# }
#
# node m {
# include yum::repobar
# }
# The former scopes the ordering dependency to the node, whereas the
# latter does not. The latter would make Puppet apply yum::repofoo
# to both nodes n and m, whereas the former only applies
# yum::repofoo to node n.
}