Um padrão comum ao usar o fantoche é gerenciar a instalação, a configuração e o status do serviço de um pacote. Sua última etapa também pode ser obtida desde que você garanta a idempotência. Um esqueleto (muito) simples para esse tipo de tarefa:
class foo (
$some_param_in_hiera,
){
package {
'foo_pkg':
ensure => installed,
}
service {
'foo_svc':
ensure => running,
enable => true,
hasstatus => true,
require => Package['foo_pkg'];
}
file {
'/etc/foo/some.conf':
mode => '0644',
owner => root,
group => root,
source => 'puppet:///modules/foo/some.conf',
#content => template('foo/some.conf.erb'),
require => Package['foo_pkg'],
notify => Service['foo_svc'];
}
exec {
'some_task':
command => 'echo 'foo bar baz'',
refreshonly => true,
creates => '/some/file/to/ensure/idempotency'
}
}
Além disso, verifique o Puppet Forge para código já existente que faz o que você quer.