Uma das minhas tarefas ansíveis importa um banco de dados Oracle usando impdp
.
Isso gera muita saída para o console, então eu configurei no_log: True
.
No entanto, quando isso falhar, quero ver o log!
Como posso fazer essa tarefa específica registrar em um arquivo e não no console?
failed_when
condição e remover o arquivo de log, se o anterior. tarefa era :) bem sucedida-vvv
depois doansible-playbook
comando para obter logs detalhados.Respostas:
[Convertendo meu comentário em uma resposta]
Uma maneira de fazer isso seria gravar os logs em algum arquivo externo e, em seguida, executar uma tarefa que utilizasse a condição failed_when, e remover o arquivo de log, se a tarefa anterior tivesse êxito.
Algo assim deve ajudá-lo.
Nota: Essa pode não ser a melhor maneira de lidar com seu problema. Mas, esse foi um truque que me ajudou a fazer o registro e o monitoramento.
fonte
Eu acho que tudo que você precisa fazer é registrar a saída de cada comando que você precisa (armazená-lo em uma variável) e simplesmente despejar a variável em um arquivo. Dessa forma, você pode revisá-lo mais tarde.
Em seguida, em dumpall.j2:
O exemplo que estou usando é daqui
fonte
Eu resolvi isso adicionando
para a tarefa no_log. Isso faz com que o ansible continue para a próxima tarefa, mesmo quando a tarefa falhar. Em seguida, para a próxima tarefa, defina uma tarefa de depuração, que sempre falha e gera a variável registrada, mas é executada apenas quando a tarefa anterior falha:
Portanto, mesmo com no_log: true, isso tornará ansible a exibição da saída da tarefa que falhou. Esta solução não está registrando-a em um arquivo conforme solicitado, mas atende a sua necessidade de 'ver o log quando falhou' e, é claro, você pode redirecionar ou usar tee para gerar a saída ansível completa para um arquivo, o que, com esta solução também contém o log da tarefa com falha.
fonte
O que faço quando tenho um comando para executar e deseja obter o log apenas em caso de falha é o seguinte (prefixado por um coma shell e
/bin/sh -c '...'
no caso de o iniciador não usar umasystem
chamada ou executar o comando diretamente sem o shell) :Isso redirecionará o erro e a saída padrão para um arquivo e exibirá o conteúdo do arquivo apenas em caso de falha. Se o comando for muito detalhado e você não desejar manter o log quando estiver ok, poderá:
Cotação
&&
e||
uso da página de manual sh :Essa provavelmente não é a maneira mais idiomática de fazê-lo com o ansible, mas tem a vantagem de ser muito portátil com qualquer sistema de gerenciamento de configuração, permitindo exibir o comando stdout.
fonte
Assumindo que o ansible lança corretamente erros no stderr, você pode capturar a saída de erros em qualquer programa em um arquivo usando o redirecionamento de saída:
some command 2> error.log
No entanto, acho que não é esse o caso.
Em vez disso, é provável que você queira consultar este guia para decidir quando ocorrerão erros http://docs.ansible.com/ansible/playbooks_error_handling.html e, em seguida, aguardar sua saída por seqüências que indicam um erro antes de gerar um arquivo
ie
ansible-playbook my-playbook | grep 'error' > error.log
fonte
Eu acho que o que você está procurando pode ser simplesmente redirecionar stdout e street para arquivo.
Normalmente, some-command &> logfile.log
ou alguma variante ....
fonte
Tee será uma ferramenta muito simples para registro, você pode consultar o seguinte comando.
fonte