# Puppet Manifest Example: Defining Order Between Actions

Last updated:

Since Puppet resources are run in no particular order, we must explicitly define temporal dependencies between them.

In order words, if we want a given command to be run only after another command has run, we must declare it using keywords such as require, before, notify and subscribe.

For example, making sure a system update is run before we try to install the git package.

# tell puppet what to prepend to commands
Exec {
path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ]
}
# a command to run system updates
exec { 'sys_update':
command => "apt-get update --fix-missing"
}
class git {
package{'git-core':
ensure => 'installed',
require => Exec['sys_update']
}
}
include git


### All keywords

• before => Resource['foo']: current resource will always be applied before Resource 'foo'.
• notify => Resource['foo']: current resource will always be applied before Resource 'foo', and resource 'foo' will be notified (i.e. re-run) every time the state of the current resource changes.
• subscribe => Resource['foo']: the current resource will always be applied after Resource 'foo'. The current resource will be re-applied whenever Resource 'foo' changes state.

### Using Arrows instead of keywords

TODO: example
TODO: note that requiring a resource with arrows to others **does not** trigger the other resources.