如何查看 ansible-playbook 命令的标准输出?-v 仅显示 ansible 输出,而不是单个命令。如果我能立即弄清楚如何做到这一点就太好了,这样如果出现故障或挂起,我就能知道原因。
例如
- name: print to stdout
action: command echo "hello"
将打印
TASK: [print variable] ********************************************************
hello
答案1
我认为您可以将结果注册到变量,然后使用调试打印。
- name: print to stdout
command: echo "hello"
register: hello
- debug: msg="{{ hello.stdout }}"
- debug: msg="{{ hello.stderr }}"
答案2
代替标准输出我建议使用标准输出行。对于多行输出,这要好得多,例如
- 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 讨论为什么这不可能并且不会实现。
答案3
我发现使用最小 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
答案4
我发现只需通过 ssh 终止远程卡住的进程即可返回 stdout。我发现这比编写最终剧本中不会使用的解决方法要短:
kill -9 PID