我想使用ansible-playbook使用ps,dstat等命令快速监控一些主机.该ansible
命令本身完美的我想要做什么,比如我会使用:
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脚本,所以我把它放在一个剧本中:
--- - 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 }}
但结果当然是相同的.
有没有办法在通过playbook运行时从命令的stdout/stderr获得格式良好的输出?我可以想到一些可能的方法(使用sed格式输出?重定向输出到主机上的文件,然后将该文件返回并将其回显到屏幕?),但由于我对shell/ansible的了解有限,我需要一天试试吧.