我有一个执行 ansible playbook 的 shell 脚本,我想处理该 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"
]
}
}
答案1
您可以将 playbook 的结果打印为 json,然后用 Python 等现代语言对其进行解析。您需要做的就是设置一个环境变量 ANSIBLE_STDOUT_CALLBACK=json
例子:
ANSIBLE_STDOUT_CALLBACK=json ansible-playbook -i hosts.ini main.yaml