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]
ただし、これには、すべてのタスクに対して一連のシェルスクリプトを保持する必要があり、これはあまり「可能」ではないため、これをプレイブックに入れます。
---
-
hosts: all
gather_facts: no
tasks:
- shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
で実行します-vv
が、出力には辞書の内容が基本的に表示され、改行はそのように出力されないため、次のような読み取り不能な混乱が発生します。
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 を使用して出力をフォーマットしますか?出力をホスト上のファイルにリダイレクトし、そのファイルを取得して画面にエコーしますか?)、シェル/ ansible の知識が限られているため、試すだけの日。