Como fazer o tratamento adequado de erros em ansible?

1

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.

    
por Parthian Shot 13.01.2016 / 16:36

1 resposta

5

link

Blocks introduce the concept of exception handling to playbooks, and were modeled after the try/except/finally structure of Python (and many other languages). This eases development of playbooks and tasks, where task failures can be caught and dealt with in a single playbook much more simply than before.

    
por 13.01.2016 / 16:50