Python解析Ansible hosts文件并转换为JSON格式示例
本文介绍如何使用Python脚本将Ansible的hosts配置文件解析为JSON格式,以便在前端进行可视化展示。通过Python的ConfigParser模块读取分组信息,并利用Flask提供JSON接口,结合Bootstrap Treeview实现主机组的树形展示与选中操作,从而支持后续的自动化运维操作。
Python解析Ansible hosts文件并转换为JSON格式示例
Ansible的配置文件通常采用INI格式,这种结构在前端界面中直接展示较为困难。为了解决这一问题,可以使用一段简单的Python代码将Ansible配置文件转换为JSON格式,以便于前端数据的渲染与交互。
[webserver] 192.168.204.70 192.168.204.71 [dbserver] 192.168.204.72 192.168.204.73 192.168.204.75 [proxy] 192.168.204.76 192.168.204.77 192.168.204.78 [test] 192.168.204.79 192.168.204.80 [haproxy] 192.168.205.82 192.168.204.83
以下是使用Python将Ansible配置文件转换为JSON格式的具体代码实现:
import ConfigParser
import json
dict_result = {}
cf = ConfigParser.ConfigParser(allow_no_value=True)
cf.read('/etc/ansible/hosts.test')
secs = cf.sections()
for sec in secs:
dict_result[sec] = cf.options(sec)
print json.dumps(dict_result)
转换后的结果如下(本示例中Python版本为2.7):
/usr/local/python/bin/python /tmp/test.py {"test": ["192.168.204.79", "192.168.204.80"], "haproxy": ["192.168.205.82", "192.168.204.83"], "webserver": ["192.168.204.70", "192.168.204.71"], "proxy": ["192.168.204.76", "192.168.204.77", "192.168.204.78"], "dbserver": ["192.168.204.72", "192.168.204.73", "192.168.204.75"]}
将数据转换为JSON文件后,前端展示变得更加便捷。以下代码展示了如何使用Flask框架提供JSON格式的API接口:
#获取ansible分组
@app.route('/web_test/ansible')
def web_test_ansible():
dict_result = {}
cf = ConfigParser.ConfigParser(allow_no_value=True)
cf.read('/etc/ansible/hosts.test')
secs = cf.sections()
for sec in secs:
dict_result[sec] = cf.options(sec)
return json.dumps(dict_result)
接下来是前端部分的代码实现,这里使用了Bootstrap Treeview组件来展示树形结构:
<script src="/static/js/bootstrap-treeview.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#btn-get-hostgroup').click(function () {
getAllCheck = $('#hostgrouptree').treeview('getChecked');
for (var i = 0; i < getAllCheck.length; i++) {
console.log(getAllCheck[i].text);
}
});
$.ajax({
url: '/web_test/ansible',
type: 'GET',
success: function (data) {
result = JSON.parse(data);
nodes = [];
for (var hostgroup in result) {
var nodeshostgroup = [];
hosts = result[hostgroup];
for (var i = 0; i < hosts.length; i++) {
nodeshostgroup.push({text: hosts[i], selectable:false});
}
nodes.push({text: hostgroup, nodes: nodeshostgroup, selectable:false});
}
$('#hostgrouptree').treeview({data: [{text: 'all', nodes: nodes, selectable:false}], showCheckbox: true, showBorder:false});
}
});
});
</script>
{% endblock %}
{% block page_content %}
<div class="col-md-4" id="hostgrouptree">
</div>
<div class="col-md-6">
<button id="btn-get-hostgroup" type="button" class="btn btn-default">获取选中的组</button>
</div>
通过上述方式,Ansible配置文件在前端的展示效果得以实现。获取用户选中的主机组后,即可结合Ansible命令执行相应的自动化运维操作:

感谢阅读,希望本文能对大家有所帮助,感谢各位对本站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









