Os documentos ansible mencionam isso, mas apenas de passagem. "Certos erros ainda podem impedir que o manipulador seja executado, como um host se tornando inacessível." Não há sugestões sobre o que fazer neste caso.
Ele menciona --force-handlers
. Há alguma confusão aqui. O problema # 4777 solicita uma opção --force-handlers
que executaria todos os manipuladores, independentemente de terem sido notificados, para permitir recuperação nesta situação. Esta questão foi encerrada com o comentário "isto está agora implementado". Narrador: não foi implementado. Eu abri um novo problema para solicitar esse recurso.
Infelizmente, acredito que este comentário tenha feito alguns sugerirem --force-handlers
como a solução para esse problema em stackexchange ou em outro lugar, quando não é.
Uma solução completa pode ser modificada para gravar um banco de dados de manipuladores pendentes. (O manipulador seria registrado imediatamente quando uma tarefa detectar uma mudança prestes a ser feita).
Além disso, você gostaria de evitar essas interrupções. Porque você precisaria revisar cuidadosamente ambos os manipuladores e todas as tarefas condicionais em |changed
e certificar-se de executar todas elas nos destinos repetidos.
Moral: pode ser útil usar manipuladores e evitar a aspersão de |changed
em todo o manual.
Uma solução menos elegante, mas igualmente correta, envolve a modificação do ansible com uma opção para forçar a execução de todos os manipuladores. Ou talvez para tratar todas as tarefas não ignoradas, conforme alterado. Se a execução original precisou reiniciar o serviço, não é completamente irracional agendar uma segunda execução que reinicia o serviço. A desvantagem é que a execução original só precisava reiniciar alguns serviços.
Você também pode evitar jogadas interrompidas usando o ansible "pull mode". Ou, se a principal preocupação é porque o ansible é executado remotamente, você pode executar ansible em um servidor no mesmo site, usando uma sessão persistente com screen
/ tmux
.