Pelo que posso dizer, ansible só faz o tratamento de erros no nível de tarefas , o que não é realmente o suficiente para o que eu quero que seja capaz de fazer.
Especificamente, meu caso de uso é uma implantação comum, então o que preciso fazer é:
- pare o servidor
- recursos necessários para backup
- tente implantar (o que envolve um grande número de tarefas que devem ocorrer em ordem)
- se isso falhar, reverta para a versão anterior (que, mais uma vez, é um monte de tarefas com uma ordem estrita)
- inicie o servidor
Tudo isso é bom e elegante, exceto pela abordagem de tratamento de erros que eu esperava que funcionasse ...
- include: deploy.yml
ignore_errors: yes
register: deploy
- include: rollback.yml
when: deploy | failed
... Não.
Agora, posso entender por que isso não aconteceria - a tarefa de inclusão apenas testaria se ela poderia incluir o arquivo, e não se o arquivo incluído poderia ser executado até a conclusão. Eu fiz a minha paz com isso.
Infelizmente, isso me deixa em uma espécie de picles. A verificação automática de erros de todas as operações, combinada com a biblioteca de operações de alto nível, é toda a razão pela qual uso ansible. Mas, na ausência de um mecanismo de recuperação maduro, a notificação de falha deixa de ser útil.
Alguém tem soluções alternativas (sãs)? Eu poderia adicionar um manipulador para cada tarefa sob esse include
e tentar fazê-lo funcionar dessa maneira, mas ... Sério? Isso não pode ser a solução - ou melhor, eu não posso continuar a ter fé na humanidade e permitir que isso seja uma solução.