Как мне увидеть стандартный вывод для команд ansible-playbook? -v показывает только доступный вывод, а не отдельные команды. Было бы здорово, если бы я мог понять, как это сделать немедленно, поэтому, если что-то выйдет из строя или зависнет, я смогу понять, почему.
например
- name: print to stdout
action: command echo "hello"
напечатал бы
TASK: [print variable] ********************************************************
hello
Я думаю, вы можете зарегистрировать результат в переменной, а затем распечатать с отладкой.
- name: print to stdout
command: echo "hello"
register: hello
- debug: msg="{{ hello.stdout }}"
- debug: msg="{{ hello.stderr }}"
Вместо того стандартный вывод Я бы предложил использовать stdout_lines. Для многострочного вывода это намного лучше, например
- hosts: all
tasks:
- name: Run ls.sh and output "ls /"
script: ls.sh
register: out
- debug: var=out.stdout_lines
дает
TASK: [debug var=out.stdout_lines] ********************************************
ok: [local] => {
"var": {
"out.stdout_lines": [
"total 61",
"lrwxrwxrwx 1 root root 7 Feb 15 2015 bin -> usr/bin",
"drwxr-xr-x 6 root root 1024 Aug 24 22:08 boot",
"drwxr-xr-x 22 root root 3580 Sep 8 18:41 dev",
[...]
"drwxr-xr-x 9 root root 4096 Aug 25 19:14 usr",
"drwxr-xr-x 13 root root 4096 Feb 25 2015 var"
]
}
}
Что касается вывода в реальном времени для целей отладки, есть закрытый отчет об ошибке https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 обсуждение причин, по которым это невозможно и не будет реализовано.
Я нашел с помощью минимальный stdout_callback
с ansible-playbook дал аналогичный результат с использованием ad-hoc ansible.
В вашем ansible.cfg (обратите внимание, что я использую OS X, поэтому измените callback_plugins
путь, соответствующий вашей установке)
stdout_callback = minimal
callback_plugins = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/plugins/callback
Чтобы такая задача
---
- hosts: example
tasks:
- name: Say hi
command: echo "hi ..."
Дает такой вывод, как специальная команда
example | SUCCESS | rc=0 >>
hi ...
Я использую ansible-playbook 2.2.1.0
Если вы действительно хотите смотреть результат в реальном времени, есть способ обойти это, по крайней мере, для ансибла. shell
модуль.
В любом сценарии оболочки, который переносит ваш вызов в ansible, прикоснитесь к файлу журнала и завершите его в фоновом задании. Затем перенаправьте вывод команды ansible shell для добавления в этот файл журнала. Вам нужно убедиться, что вы убили фоновую хвостовую задачу после завершения работы ansible, иначе она останется висящей.
Например, в сценарии bash, который вызывает ansible:
set -m
touch /tmp/debug.log && tail -f /tmp/debug.log &
ansible-playbook ... call playbook here
kill %1 # ensure the background tail job is stopped
Затем в какой-то недоступной роли:
- name: Run a script and print stdout/stderr
shell: bash -c "/run/something.sh 2>&1 >> /tmp/debug.log"