Ansible 플레이북을 실행하는 쉘 스크립트가 있고 해당 플레이북의 출력을 처리하고 싶습니다. 어떻게 해야 할지 모르겠습니다.
스크립트:
#!/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"
]
}
}
답변1
플레이북의 결과를 json으로 인쇄하고 Python과 같은 최신 언어로 구문 분석할 수 있습니다. 환경 변수 ANSIBLE_STDOUT_CALLBACK=json을 설정하기만 하면 됩니다.
예:
ANSIBLE_STDOUT_CALLBACK=json ansible-playbook -i hosts.ini main.yaml