Run stages
Run stages are an additional way to order resources.
Groups of classes run before or after everything else, without having to explicitly create
relationships with other classes. The run stage feature has two parts: a stage
resource type, and a stage
metaparameter, which
assigns a class to a named run stage.
Default main stage
By default there is only one stage, named main
. All resources are
automatically associated with this stage unless explicitly assigned to a different
one. If you do not use run stages, every resource is in the main stage.
Custom stages
Additional stages are declared as normal resources. Each
additional stage must have an order relationship with
another stage, such as Stage['main']
. As with normal resources, these relationships are
specified with metaparameters or with chaining arrows.
first
stage are applied
before the classes associated with the main
stage, and both of those stages are applied
before the last
stage.stage { 'first':
before => Stage['main'],
}
stage { 'last': }
Stage['main'] -> Stage['last']
Assigning classes to stages
After stages have been declared, use the stage
metaparameter to
assign a class to a custom stage.
apt-keys
class happens before all
other classes, which is useful if most of your package resources rely on those
keys.class { 'apt-keys':
stage => first,
}
Limitations
- To assign a class to a stage, you must use
the resource-like class declaration syntax and
supply the stage explicitly. You cannot assign classes to stages
with the
include
function, or by relying on automatic parameter lookup from hiera while using resource-like class declarations. - You cannot subscribe to or notify resources across a stage boundary.
- Classes that contain other
classes, with either the
contain
function or the anchor pattern, can sometimes behave badly if declared with a run stage. If the contained class is declared only by its container, it works fine, but if it's declared anywhere outside its container, it often creates a dependency cycle that prevents the involved classes being applied.