Por que não substituir o arquivo de configuração antes de instalar a atualização? Se carregar na reinicialização, não usará o arquivo de configuração "errado" até que a atualização seja reiniciada. . .
Estou tentando fazer com que o Puppet atualize nossos servidores Varnish 3 para o Varnish 4, uma atualização importante que requer um arquivo de configuração atualizado ou não será iniciado. Isso está no Ubuntu 12.04.
O módulo Varnish é essencialmente construído com estas classes e dependências:
Class['varnish::repo']
-> Class['varnish::install']
-> Class['varnish::tools']
-> Class['varnish::config']
~> Class['varnish::service']
Atualizei o URL do Apt-repo em varnish::repo
, defini ensure=>latest
em varnish::install
e forneci um arquivo de configuração atualizado para varnish::config
. Até aí tudo bem.
Quando o Puppet executa essas dependências, a execução falha no estágio varnish::install
porque o Apt tenta reiniciar o daemon do Varnish imediatamente após atualizá-lo, não dando ao Puppet a chance de substituir o arquivo de configuração. A falha na classe varnish::install
leva a uma cadeia de dependência quebrada e faz com que as classes restantes também falhem. O resultado é uma instalação quebrada do Varnish que precisa de recuperação manual.
Como você lida com isso?
Eu pensei em usar policy-rc.d
, que essencialmente diz ao Apt para não executar paradas automáticas e inícios de serviços. Eu tentei criar o arquivo antes da atualização e removê-lo depois.
file {'/usr/sbin/policy-rc.d':
ensure => $ensure,
content => "#!/bin/sh\nexit 101",
owner => 'root',
group => 'root',
mode => '0755',
}
É claro que criar e remoção é um problema porque o Puppet vê isso como um recurso duplicado.
Por que eu quero remover a política novamente, depois de instalá-la, você pergunta? Porque usamos unattended-upgrades
para realizar pequenas atualizações de segurança e eu quero permitir reinicializações automáticas de serviço nesses casos, mas não neste caso. Além disso, o policy-rc.d afeta os serviços all , não apenas o Varnish.
Talvez eu esteja pensando errado, mas posso de alguma forma dizer ao Puppet ou ao Apt para esperar com a reinicialização até que o arquivo de configuração também seja substituído?
Por que não substituir o arquivo de configuração antes de instalar a atualização? Se carregar na reinicialização, não usará o arquivo de configuração "errado" até que a atualização seja reiniciada. . .