python将ansible配置转为json格式实例代码

yipeiwu_com6年前Python基础

python将ansible配置转为json格式实例代码

ansible的配置文件举例如下,这种配置文件不利于在前端的展现,因此,我们用一段简单的代码将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格式,python代码如下:

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格式的接口如下:

#获取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选中的组,利用ansible命令就可以实现一些简单的自动化操作了:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

Python写的服务监控程序实例

前言: Redhat下安装Python2.7 rhel6.4自带的是2.6, 发现有的机器是python2.4。 到python网站下载源代码,解压到Redhat上,然后运行下面的命令:...

浅谈python中的面向对象和类的基本语法

浅谈python中的面向对象和类的基本语法

当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀。我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前...

python实现读取命令行参数的方法

本文实例讲述了python读取命令行参数的方法。分享给大家供大家参考。具体分析如下: 如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么...

Django1.3添加app提示模块不存在的解决方法

使用Django添加应用的时候,一直提示Error: No module named myapp。意思是找不到这个名字的应用,可是我已经startapp成功,并且系统已经创建相应的目录...

Django基础之Model操作步骤(介绍)

Django基础之Model操作步骤(介绍)

一、数据库操作 1、创建model表 基本结构: #coding:Utf8 from django.db import models class userinfo(models....