我想快速監視一些使用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