Ansible Playbookを実行するシェルスクリプトがあり、このPlaybookの出力を処理したいと思います。どうすればこれができるのかわかりません。
スクリプト:
#!/bin/sh
ansible-playbook -i inventory/ec2.py services_status.yml
Ansible-playbookコマンドの出力は次のとおりです。
PLAY [all] *********************************************************************
TASK [cmx_running_services] ****************************************************
ok: [172.31.35.225]
ok: [172.31.9.253]
TASK [debug] *******************************************************************
ok: [172.31.35.225] => {
"services": {
"changed": false,
"meta": {
"services": [
"zk",
"kafka"
]
}
}
}
ok: [172.31.9.253] => {
"services": {
"changed": false,
"meta": {
"MyService": [
"default"
],
"services": [
"monitoring-agent"
]
}
}
}
PLAY RECAP *********************************************************************
172.31.35.225 : ok=2 changed=0 unreachable=0 failed=0
172.31.9.253 : ok=2 changed=0 unreachable=0 failed=0
私のスクリプトでは、この出力を処理して、jsonオブジェクトを次の形式で保存したいと思います。
{
"172.31.35.225":{
"services":[
"zk",
"kafka"
]
},
"172.31.9.253":{
"MyService":[
"default"
],
"services":[
"monitoring-agent"
]
}
}
プレイブックの結果をjsonとして印刷し、Pythonなどの現代語で解析できます。あなたがする必要があるのは環境変数ANSIBLE_STDOUT_CALLBACK = jsonを設定することです
例:
ANSIBLE_STDOUT_CALLBACK=json ansible-playbook -i hosts.ini main.yaml
あなたがする必要があるのは、Ansibleログでsed
またはawk
を使用することを忘れることです。これは非常に複雑になり、代わりにコールバックプラグインを開発またはカスタマイズします。
ほとんどの場合、例から始める必要があります json.py
これはAnsibleログをJSON形式で出力します(少なくとも理論的には、サンプルコードはgithubの外では機能しないようです)。
公式のAnsibleドキュメントで コールバックプラグイン の開発と構成の詳細。