Você pode precisar adicionar à declaração de recurso de serviço para 'fantoche':
hasrestart => true,
Eu tenho um arquivo que avisa o agente fantoche.
No módulo network
, as configurações de proxy estão incluídas no arquivo .gemrc assim:
file { "/root/.gemrc":
content => "http_proxy: $http_proxy\n",
notify => Service['puppet'],
}
O problema é que o fantoche pára e não reinicia.
Aug 31 12:05:13 snch7log01 puppet-agent[1117]: (/Stage[main]/Network/File[/root/.gemrc]/content) content changed '{md5}2b00042f7481c7b056c4b410d28f33cf' to '{md5}60b725f10c9c85c70d97880dfe8191b3'
Aug 31 12:05:13 snch7log01 puppet-agent[1117]: Caught TERM; calling stop
Eu assumo que o código faz algo como /etc/init.d/puppet stop && /etc/init.d/puppet start
Como o boneco não está funcionando, ele não pode começar sozinho ... faz sentido.
Como fazer o fantoche reiniciar sozinho quando esse arquivo muda? Note que este arquivo pode não existir também.
Além de garantir que o "hasrestart" esteja no manifesto, você também deve se certificar de que
"ensure => running"
Está no manifesto. Aqui está minha cópia:
class puppet::service {
service { puppet:
ensure => running,
enable => true,
hasrestart => true,
subscribe => File["/etc/puppet/puppet.conf"],
}
}
Eu tive um problema semelhante. Eu precisava implantar correções para augeas e usei o fantoche para implantá-las, mas elas não entrariam em vigor até que o puppetd fosse reiniciado. Então, eu precisava de uma maneira rápida e fácil de dizer ao puppetd para reiniciar uma vez. Eu resolvi isso com um script de shell e um exec.
Aqui está o script:
#!/bin/bash
if [ X"$1" != Xbackground ]; then
OUTDIR=/var/log/puppet
mkdir -p $OUTDIR
nohup $0 background > $OUTDIR/puppet_restart.out 2>&1 < /dev/null &
exit 0
fi
# If you get here, this is a background copy of this script that has
# been decoupled from puppet by the nohup above. Give puppet a chance
# to finish what it is doing, then restart it.
sleep 60
/sbin/service puppet restart
O manifesto para executar o script faz uso do arquivo de log que ele cria. (Isso funciona bem pela primeira vez - se você fizer atualizações subseqüentes, faça um manifesto que exclua o arquivo de log para que isso seja executado uma vez novamente):
file { "/usr/local/bin/puppet_restart":
owner => root,
group => root,
mode => 750,
source => "puppet:///modules/puppet_fix_module/puppet_restart"
}
exec { "restart_puppet":
command => "/usr/local/bin/puppet_restart",
path => ["/usr/bin", "/usr/sbin", "/bin"],
creates => "/var/log/puppet/puppet_restart.out",
require => [ File['/usr/local/bin/puppet_restart'],
File ["/some/other/file/that/requires/restart"],
]
}