Como executo ansible em um host por vez e interrompo uma falha

15

Eu tenho um manual do Ansible onde quero atualizar vários dispositivos escamosos em sequência. Posso usar serial:1, mas quero interromper completamente o manual, se houver uma falha, para corrigi-lo antes de prosseguir, em vez de acumular erros.

Também gostaria de reiniciar o manual no mesmo host em que parei. Atualmente, está usando o Ansible v2.0, mas também pode mudar para uma versão mais recente se esse tipo de recurso estiver disponível apenas nas versões mais recentes.

Peter Turner
fonte

Respostas:

15

Seu manual será interrompido quando ocorrer uma falha e você será usado de serial: 1acordo com a documentação .

Por padrão, o Ansible continuará executando ações enquanto houver hosts no grupo que ainda não falharam.

Dito isto, parece haver alguma confusão na comunidade sobre o comportamento padrão, e parece ter mudado - ou tem sido um bug - em algum lugar entre 1,8 e 2,1.

Portanto, se serial: 1não for suficiente, use esta configuração adicional:

max_failure_percentage: 0

Em algumas situações, como nas atualizações contínuas descritas acima, pode ser desejável interromper a reprodução quando um certo limite de falhas for atingido. Para conseguir isso, a partir da versão 1.3, você pode definir uma porcentagem máxima de falhas ...

==

Quanto à nova tentativa do seu manual, você deve receber uma mensagem de falha como esta:

to retry, use: --limit @/home/user/site.retry

Use esse --limitsinalizador e na sua próxima execução de ansible-playbooke ele continuará de onde falhou.

Os arquivos de nova tentativa serão criados, a menos que você tenha definido retry_files_enabled = Falsesua configuração.

Como alternativa, --start-at-tasktambém pode funcionar.

Fontes:

https://github.com/ansible/ansible/issues/1663

https://github.com/ansible/ansible/issues/16241

http://docs.ansible.com/ansible/playbooks_delegation.html#rolling-update-batch-size

http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage

http://docs.ansible.com/ansible/intro_configuration.html#retry-files-enabled

http://docs.ansible.com/ansible/playbooks_startnstep.html#start-at-task

Caçador da floresta
fonte
11
Se alguém tiver uma noção melhor do que aconteceu com a alteração / bug nas versões 1.9 e 2.0, informe-me e atualizarei esta resposta.
Woodland Hunter
Sim, eu sei que o ansible 2.0 continuará sendo executado em outros hosts se houver falhas em um deles. Acho que não achei que teria um comportamento diferente se eu rodasse serial: 1. É isso que você está dizendo?
Peter Turner
Correto, serial: 1 deve ter esse comportamento e, se não tiver (porque ??), adicione max_failure_percentage: 0 também. Eu também sugeriria atualizar o Ansible, pois o 2.0 tinha muitos bugs.
Woodland Hunter
Tantos bugs, na verdade, que você está perdendo os arquivos .retry no 2.0! github.com/ansible/ansible/issues/13944
Woodland Hunter
Heh, então eu não sou o único que está constantemente corrigindo a fonte. É bom saber disso.
Peter Turner