Ansible-playbookを使用してps、dstatなどのコマンドを使用して、いくつかのホストをすばやく監視したいと思います。 ansible
コマンド自体は、私が望むものを完全に実行します。たとえば、私は使用します:
ansible -m Shell -a "ps -eo pcpu,user,args | sort -r -k1 | head -n5"
そして、次のようにすべてのホストのすべての標準出力をうまく出力します:
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
と 'debug'タスクを追加して{{ var.stdout }}
を表示することも試みましたが、結果はもちろん同じです。
プレイブック経由で実行したときに、コマンドのstdout/stderrから適切にフォーマットされた出力を取得する方法はありますか?私はいくつかの可能な方法を考えることができます(sedを使用して出力をフォーマットしますか?出力をホスト上のファイルにリダイレクトし、そのファイルを取得して画面にエコーしますか?)が、シェル/アンシブルの知識が限られていると試してみるだけの日。
debug
モジュールは本当に愛を使うことができますが、現時点でできることはこれを使うことです:
- hosts: all
gather_facts: no
tasks:
- Shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
register: ps
- debug: var=ps.stdout_lines
次のような出力が得られます。
ok: [Host1] => {
"ps.stdout_lines": [
"%CPU USER COMMAND",
" 1.0 root /usr/bin/python",
" 0.6 root sshd: root@notty ",
" 0.2 root Java",
" 0.0 root sort -r -k1"
]
}
ok: [Host2] => {
"ps.stdout_lines": [
"%CPU USER COMMAND",
" 4.0 root /usr/bin/python",
" 0.6 root sshd: root@notty ",
" 0.1 root Java",
" 0.0 root sort -r -k1"
]
}
これは開始かもしれません:
- hosts: all
gather_facts: no
tasks:
- Shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
register: ps
- local_action: command echo item
with_items: ps.stdout_lines
注:ps.stdout_lines
に関するドキュメントについては、 ( 'Register Variables'章) で説明しています。
ロイコスが答えで言ったことを拡張して、Ansibleの謙虚な debug
モジュールで情報を印刷することもできます:
- hosts: all
gather_facts: no
tasks:
- Shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
register: ps
# Print the Shell task's stdout.
- debug: msg={{ ps.stdout }}
# Print all contents of the Shell task's output.
- debug: var=ps
Ansible-playbookでminimalstdout_callback
を使用すると、アドホック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
あなたのようなansible-playbook
タスク
---
-
hosts: example
gather_facts: no
tasks:
- Shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
アドホックコマンドのように、このような出力を提供します
example | SUCCESS | rc=0 >>
%CPU USER COMMAND
0.2 root sshd: root@pts/3
0.1 root /usr/sbin/CROND -n
0.0 root [xfs-reclaim/vda]
0.0 root [xfs_mru_cache]
私はansible-playbook 2.2.1.0を使用しています
特定の終了ステータスが必要な場合、Ansibleはcallback pluginsでそれを行う方法を提供します。
例 。 100%正確な終了ステータスが必要な場合、これは非常に優れたオプションです。
そうでない場合は、常に Debug Module を使用できます。これはstandardこの使用例の場合。
乾杯
ANSIBLE_STDOUT_CALLBACK=debug ansible-playbook /tmp/foo.yml -vvv
STDOUTを使用したタスクにはセクションがあります:
STDOUT:
What ever was in STDOUT