You want to restart a service when its config file changes
# define the service to restart
service { "sshd":
ensure => "running",
enable => "true",
require => Package["openssh-server"],
}
# add a notify to the file resource
file { "/etc/ssh/sshd_config":
notify => Service["sshd"], # this sets up the relationship
mode => 600,
owner => "root",
group => "root",
require => Package["openssh-server"],
content => template("ssh/sshd_config.erb"),
}
It would be very annoying if puppet allowed you to deploy a new config file without providing a way to restart a service to take advantage of the change. Using the “notify” metaparameter we can tell a resource to signal another resource, often a file notifying a service, and cause it to refresh, which in the case of a service causes a restart.
Puppet will accumulate multiple notifies over a single run and only refresh the service once. This is useful for services like Nagios where a large number of config files can change for one amendment and nothing would be gained from multiple restarts.
It’s worth noting that you probably don’t want to use this with larger, more important, services like mysql where a small white space change in a config file could cause a restart of your mysql database and begin a domino effect.