Digamos que eu execute o seguinte.
$ cat test.sh
#!/bin/bash
echo Hello World
exit 0
$ cat Hello.yml
---
- hosts: MyTestHost
tasks:
- name: Hello yourself
script: test.sh
$ ansible-playbook Hello.yml
PLAY [MyTestHost] ****************************************************************
GATHERING FACTS ***************************************************************
ok: [MyTestHost]
TASK: [Hello yourself] ********************************************************
ok: [MyTestHost]
PLAY RECAP ********************************************************************
MyTestHost : ok=2 changed=0 unreachable=0 failed=0
$
Tenho certeza de que foi um sucesso.
Onde / como vejo o "Hello World" ecoado / impresso pelo meu script no host remoto (MyTestHost)? Ou o código de retorno / saída do script?
Minha pesquisa me mostra que seria possível escrever um plugin para interceptar callbacks de execução de módulo ou algo nessas linhas e escrever um arquivo de log. Prefiro não perder meu tempo com isso.
Por exemplo, algo como o stdout abaixo (observe que estou executando o ansible e não o ansible-playbook):
$ ansible plabb54 -i /project/plab/svn/plab-maintenance/ansible/plab_hosts.txt -m script -a ./test.sh
plabb54 | success >> {
"rc": 0,
"stderr": "",
"stdout": "Hello World\n"
}
$
set -x
eset +x
em um script de shell.no_log: True
sinalizador para impedir que um comando ou manual de log, mas isso é o mais refinado possível, eu acredito.logrotate
paralog_path
que cadaansible
execução tenha um arquivo diferente (com o comando / playbook incluído no arquivo)?v
s para obter stdout e stderrA tarefa de script do playbook será gerada
stdout
exatamente como o comando não-playbook, ele só precisa ser salvo em uma variável usandoregister
. Assim que tivermos isso, o módulo de depuração pode imprimir no fluxo de saída do manual.A saída deve ser semelhante a esta:
fonte
Também existe outra maneira de gerar arquivo de log.
Antes de executar,
ansible-playbook
execute os seguintes comandos para habilitar o registro:Especifique a localização do arquivo de log.
Habilitar depuração
Para verificar o arquivo de log gerado.
fonte
Plugins oficiais
Você pode usar os plug-ins de retorno de chamada de saída . Por exemplo, a partir do Ansible 2.4, você pode usar o plug-in de retorno de chamada de saída de depuração :
(Alternativamente, execute
export ANSIBLE_STDOUT_CALLBACK=debug
antes de executar seu manual)Importante: você deve executar
ansible-playbook
com a opção-v
(--verbose
) para ver o efeito. Comstdout_callback = debug
set, a saída deve ser semelhante a esta:Existem outros módulos além do
debug
módulo se você quiser que a saída seja formatada de forma diferente. Hájson
,yaml
,unixy
,dense
,minimal
, etc. ( lista completa ).Por exemplo, com
stdout_callback = yaml
, a saída será semelhante a esta:Plug-ins de terceiros
Se nenhum dos plug-ins oficiais for satisfatório, você pode tentar o
human_log
plug - in. Existem algumas versões:https://github.com/n0ts/ansible-human_log
https://gist.github.com/cliffano/9868180
fonte
Usando plug-ins de retorno de chamada, você pode ter o stdout de sua saída de comandos em formato legível com o play: gist: human_log.py
fonte
Ajuda de linha de comando Ansible, como
ansible-playbook --help
mostra como aumentar o detalhamento da saída configurando o modo detalhado (-v) para mais detalhamento (-vvv) ou para o detalhamento de depuração de conexão (-vvvv). Isso deve fornecer alguns dos detalhes que você procura no stdout, que podem ser registrados.fonte