Скажем, я выполняю следующее.
$ 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
$
Я точно знаю, что это было удачно.
Где / как мне увидеть "Hello World", отображаемое / напечатанное моим скриптом на удаленном хосте (MyTestHost)? Или код возврата / выхода из скрипта?
Мои исследования показывают, что можно было бы написать плагин для перехвата обратных вызовов выполнения модуля или чего-то еще в этих строках и записи файла журнала. Я бы предпочел не тратить на это свое время.
Например, что-то вроде stdout ниже (обратите внимание, что я использую ansible, а не 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
иset +x
в сценарии оболочки.no_log: True
флаг, чтобы предотвратить регистрацию команды или плейбука, но я считаю, что это настолько детально, насколько это возможно.logrotate
чтобыlog_path
каждыйansible
запуск имел другой файл (с командой / playbook, включенной в файл)?v
секунды, чтобы получить stdout и stderrЗадача сценария playbook будет сгенерирована так
stdout
же, как и команда non-playbook, ее просто нужно сохранить в переменной с помощьюregister
. Как только мы его получим, модуль отладки сможет печатать в выходной поток playbook.Результат должен выглядеть примерно так:
источник
Существует также другой способ создания файла журнала.
Перед запуском
ansible-playbook
выполните следующие команды, чтобы включить ведение журнала:Укажите расположение файла журнала.
Включить отладку
Чтобы проверить созданный файл журнала.
источник
Официальные плагины
Вы можете использовать плагины обратного вызова вывода . Например, начиная с Ansible 2.4, вы можете использовать плагин обратного вызова вывода отладки :
(В качестве альтернативы запустите
export ANSIBLE_STDOUT_CALLBACK=debug
перед запуском playbook)Важно: вы должны запустить
ansible-playbook
с опцией-v
(--verbose
), чтобы увидеть эффект. Послеstdout_callback = debug
установки результат должен выглядеть примерно так:debug
Если вы хотите, чтобы вывод был отформатирован по-другому, кроме модуля, есть и другие модули . Там жеjson
,yaml
,unixy
,dense
,minimal
и т.д. ( полный список ).Например, с
stdout_callback = yaml
выводом будет примерно следующее:Сторонние плагины
Если ни один из официальных плагинов вас не устраивает, вы можете попробовать его
human_log
. Есть несколько версий:https://github.com/n0ts/ansible-human_log
https://gist.github.com/cliffano/9868180
источник
Используя плагины обратного вызова, вы можете получить стандартный вывод ваших команд в читаемой форме с помощью play: gist: human_log.py
источник
Справочная система Ansible, например,
ansible-playbook --help
показывает, как повысить подробность вывода, задав для режима подробного вывода (-v) более подробный (-vvv) или подробный режим отладки соединения (-vvvv). Это должно дать вам некоторые подробности, которые вам нужны в stdout, которые затем можно будет зарегистрировать.источник