Você poderia fazer algo assim:
file { '/etc/foo.conf.tmp':
ensure => file,
content => epp('my_module/etc/foo.conf.epp'),
}
exec { 'stop service':
command => 'service foo stop',
refreshonly => true,
subscribe => File['/etc/foo.conf.tmp']
}
exec { 'update file':
command => 'cp /etc/foo.conf.tmp /etc/foo.conf',
subscribe => Exec['stop service'],
refreshonly => true,
}
exec { 'start service':
command => 'service foo start',
subscribe => Exec['update file'],
refreshonly => true,
}
O atributo refreshonly
do recurso exec
garantirá que o comando só seja executado quando receber um evento, neste caso por meio do atributo subscribe
. Nesse caso, ele só irá parar o servidor e copiar no novo arquivo de configurações quando o arquivo de configurações do tmp for alterado. O arquivo tmp permitirá que você gerencie suas configurações no servidor sem que o serviço seja sobrescrito.
Você pode combinar esses três exec
s em um único comando, como
file { '/etc/foo.conf.tmp':
ensure => file,
content => epp('my_module/etc/foo.conf.epp'),
}
exec { 'update settings':
command => 'service foo stop && cp /etc/foo.conf.tmp /etc/foo.conf && service foo start',
refreshonly => true,
subscribe => File['/etc/foo.conf.tmp']
}