我想快速监视一些使用ps,dstat等命令的主机,使用ansible-playbook。该ansible
命令本身完美的我想要做什么,比如我会用:Ansible playbook shell输出
ansible -m shell -a "ps -eo pcpu,user,args | sort -r -k1 | head -n5"
,它很好地打印为每个主机的所有此类STD输出:
localhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
otherhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
然而,这需要我保持一堆周围shell脚本每个任务的这是不是很“ansible”所以我把这个在剧本:
---
-
hosts: all
gather_facts: no
tasks:
- shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
与-vv
运行它,但输出baiscally示出了字典的内容和换行不打印这样所以这导致一个不可读的混乱这样的:
changed: [localhost] => {"changed": true, "cmd": "ps -eo pcpu,user,args | sort -r -k1
head -n5 ", "delta": "0:00:00.015337", "end": "2013-12-13 10:57:25.680708", "rc": 0,
"start": "2013-12-13 10:57:25.665371", "stderr": "", "stdout": "47.3 xxx Xvnc4 :24
-desktop xxx:24 (xxx) -auth /home/xxx/.Xauthority -geometry 1920x1200\n
....
我还尝试添加register: var
和一个“调试”任务,以显示{{ var.stdout }}
但结果是当然是一样的。
当通过剧本运行时,是否有办法从命令的stdout/stderr中获得格式良好的输出?我可以想到一些可能的方法(使用sed?格式输出重定向输出到主机上的文件,然后将该文件回传给屏幕?),但是由于我对shell的了解有限,一天试试吧。
给也许想要输出的样本(这样做manualy) – NeronLeVelu
@NeronLeVelu goodd点,增加 – stijn