Как я могу получить журналы/детали выполнения модулей с помощью незанятых модулей?
Скажем, я выполняю следующее.
$ 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", отобранный/напечатанный моим script на удаленном хосте (MyTestHost)? Или код возврата/выхода script?
Мое исследование показывает, что можно было бы написать плагин для перехвата вызовов выполнения модуля или что-то в этих строках и записи файла журнала. Я бы предпочел не тратить время на это.
например. что-то вроде stdout ниже (обратите внимание, что я запускаю доступную и не подлежащую прослушиванию):
$ 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"
}
$
Ответы
Ответ 1
Если вы передадите флаг -v
в загружаемую книгу в командной строке, вы увидите stdout и stderr для каждой выполняемой задачи:
$ ansible-playbook -v playbook.yaml
Ansible также имеет встроенную поддержку ведения журнала. Добавьте следующие строки в файл настраиваемой конфигурации:
[defaults]
log_path=/path/to/logfile
Ansible будет выглядеть в нескольких местах для файла конфигурации:
-
ansible.cfg
в текущем каталоге, где вы запустили ansible-playbook
-
~/.ansible.cfg
-
/etc/ansible/ansible.cfg
Ответ 2
Задача playbook script будет генерировать stdout
так же, как и команда без воспроизведения, ее просто нужно сохранить в переменной с помощью register
. Как только мы получим это,
Результат должен выглядеть примерно так:
TASK: [Hello yourself] ********************************************************
changed: [MyTestHost]
TASK: [Debug hello] ***********************************************************
ok: [MyTestHost] => {
"hello": {
"changed": true,
"invocation": {
"module_args": "test.sh",
"module_name": "script"
},
"rc": 0,
"stderr": "",
"stdout": "Hello World\r\n",
"stdout_lines": [
"Hello World"
]
}
}
TASK: [Debug hello.stdout as part of a string] ********************************
ok: [MyTestHost] => {
"msg": "The script stdout was `Hello World\r\n`."
}
Ответ 3
Существует также другой способ создания файла журнала.
Перед запуском ansible-playbook
выполните следующие команды, чтобы включить ведение журнала:
Ответ 4
Используя плагины обратного вызова, вы можете вывести команду вывода команд в читаемой форме с помощью игры:
gist: human_log.py
Изменить, например, вывод:
_____________________________________
< TASK: common | install apt packages >
-------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
changed: [10.76.71.167] => (item=htop,vim-tiny,curl,git,unzip,update-motd,ssh-askpass,gcc,python-dev,libxml2,libxml2-dev,libxslt-dev,python-lxml,python-pip)
stdout:
Reading package lists...
Building dependency tree...
Reading state information...
libxslt1-dev is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
stderr:
start:
2015-03-27 17:12:22.132237
end:
2015-03-27 17:12:22.136859
Ответ 5
Справка по командной строке Ansible, такая как ansible-playbook --help
показывает, как увеличить выходную детализацию путем установки более подробного режима (-v) для большей детализации (-v vv) или для многословия отладки соединения (-v vvv), Это должно дать вам некоторые детали, которые вы ищете в stdout, которые вы можете войти в систему.
Ответ 6
Официальные плагины
Вы можете использовать выходные плагины обратного вызова. Например, начиная с Ansible 2.4, вы можете использовать плагин обратного вызова вывода отладки:
# In ansible.cfg:
[defaults]
stdout_callback = debug
(В качестве альтернативы, запустите export ANSIBLE_STDOUT_CALLBACK=debug
перед запуском вашей книги игр)
Важно: вы должны запустить ansible-playbook
с -v
(--verbose
), чтобы увидеть эффект. При установленном stdout_callback = debug
вывод должен выглядеть примерно так:
TASK [Say Hello] ********************************
changed: [192.168.1.2] => {
"changed": true,
"rc": 0
}
STDOUT:
Hello!
STDERR:
Shared connection to 192.168.1.2 closed.
Есть и другие модули, кроме модуля debug
если вы хотите, чтобы вывод форматировался по-другому. Есть json
, yaml
, unixy
, dense
, minimal
и т.д. (Полный список).
Например, с stdout_callback = yaml
вывод будет выглядеть примерно так:
TASK [Say Hello] **********************************
changed: [192.168.1.2] => changed=true
rc: 0
stderr: |-
Shared connection to 192.168.1.2 closed.
stderr_lines:
- Shared connection to 192.168.1.2 closed.
stdout: |2-
Hello!
stdout_lines: <omitted>
Сторонние плагины
Если ни один из официальных плагинов не является удовлетворительным, вы можете попробовать плагин human_log
. Есть несколько версий: