资产管理 cmdb之ansible 获取服务器硬件、软件等信息

摘要:
cmdb有许多方法可以检索服务信息。您可以使用自动化工具,如saltstack、ansible和puppet,或者使用其他模块直接ssh远程连接来检索服务器信息。下面是使用ansible API接口调用设置模块的记录。该实验使用了两台机器的IP系统软件192.168.93.137centos6.5_x64ansible1.9.4192.168.93.128centos6.5_ x64中没有两台机器建立了ssh信任,并且可以通过在192.168.93.137上运行ansible192.168.93.128-msetup来获得几乎所有所需的信息。直接处理这些字符串非常容易。调用ansibleAPI接口要容易得多。事实上,它是使用ansibleRunner模块来调用设置模块以获得结果。返回的是一个dict字典,它更容易处理。

    cmdb抓取服务信息的方式有很多种,可以使用自动化工具saltstack、ansible、puppet,或者使用其它模块直接ssh远程连接抓取服务器信息。这里记录一下用ansible的API接口调用setup模块抓取。

实验使用两台机器

IP系统软件
192.168.93.137centos6.5_x64ansible 1.9.4
192.168.93.128centos6.5_x64

两台机器建立好ssh信任后在192.168.93.137上执行

ansible 192.168.93.128 -m setup

资产管理 cmdb之ansible 获取服务器硬件、软件等信息第1张

几乎可以获取到所有想要的信息,直接处理这些字符串很让人想砸电脑,调用ansible的API接口就方便多了,其实就是用ansible的runner模块调用setup模块来获取结果,返回的是dict字典,处理起来就方便多了。(注意:ansible1.x版本有runner模块,ansible2.x以上就没有runner接口模块,需要看官网)

资产管理 cmdb之ansible 获取服务器硬件、软件等信息第2张

将其封装成函数保存为test.py,(此处封装借鉴的一位高手,可惜忘了博客地址)

里面的参数根据各自的系统可适当修改

# -*- coding: UTF-8 -*-

import ansible.runner


def get_info(ip):
    data = {}
    runner = ansible.runner.Runner(module_name='setup', module_args='', pattern='all', forks=2)
    datastructure = runner.run()
    sn = datastructure['contacted'][ip]['ansible_facts']['ansible_product_serial']
    host_name = datastructure['contacted'][ip]['ansible_facts']['ansible_hostname']

    description = datastructure['contacted'][ip]['ansible_facts']['ansible_lsb']['description']
    ansible_machine = datastructure['contacted'][ip]['ansible_facts']['ansible_machine']
    sysinfo = '%s %s' % (description, ansible_machine)

    os_kernel = datastructure['contacted'][ip]['ansible_facts']['ansible_kernel']

    cpu = datastructure['contacted'][ip]['ansible_facts']['ansible_processor'][1]
    cpu_count = datastructure['contacted'][ip]['ansible_facts']['ansible_processor_count']
    cpu_cores = datastructure['contacted'][ip]['ansible_facts']['ansible_processor_cores']
    mem = datastructure['contacted'][ip]['ansible_facts']['ansible_memtotal_mb']

    ipadd_in = datastructure['contacted'][ip]['ansible_facts']['ansible_all_ipv4_addresses'][0]
    disk = datastructure['contacted'][ip]['ansible_facts']['ansible_devices']['sda']['size']
    # print sysinfo
    data['sn'] = sn
    data['sysinfo'] = sysinfo
    data['cpu'] = cpu
    data['cpu_count'] = cpu_count
    data['cpu_cores'] = cpu_cores
    data['mem'] = mem
    data['disk'] = disk
    data['ipadd_in'] = ipadd_in
    data['os_kernel'] = os_kernel
    data['host_name'] = host_name

    return data


if __name__ == '__main__':
    data = get_info('')

    import pprint
    pprint.pprint(data)

在192.168.93.137上执行test.py获取192.168.93.128的服务器信息

资产管理 cmdb之ansible 获取服务器硬件、软件等信息第3张

接着就是结合资产管理平台存入数据库中了

方法、套路有很多:

  1. 写成脚本用crontab定期执行,脚本读取IP列表文件将信息存入数据库(借鉴燕郊大神春哥)

  2. 通过运维平台主动调用脚本写入数据库(借鉴老司机戴总[戴如峰])

此处用第二种,点击“更新”按钮,获取到服务器信息后写入数据库

资产管理 cmdb之ansible 获取服务器硬件、软件等信息第4张

运维平台展示服务器信息

资产管理 cmdb之ansible 获取服务器硬件、软件等信息第5张

原理:

      点击更新按钮之后触发ajax,然后将服务器的id号以post方式提交给“/cmdb/postmachineinfo/”接口,此id是服务器在数据库表中的id号,

运维平台接口收到请求后拿该id号去数据库中查询服务器的ip,再调用封装有

ansible API接口的脚本查询服务器信息,然后写入数据库,最后给前端返回

“成功”的信息。

前端更新按钮:

<button type="button" id="server_update_{{server.id}}" class="btn btn-xs btn-primary">更新</button>

资产管理 cmdb之ansible 获取服务器硬件、软件等信息第6张

按钮的id值最后一位就是192.168.93.128在数据库表中的id号

资产管理 cmdb之ansible 获取服务器硬件、软件等信息第7张

ajax提交信息到“/cmdb/postmachineinfo/”

/*
*更新机器信息
*/
$("table tbody tr td button[id^='server_update']").click(function(){
   var id_val = $(this).attr('id'); //获取更新按钮id值
   var id = id_val.split('_')[2]; //获取id值的最后一位
    var data = {"id":id};
    data = JSON.stringify(data);
    var url = "/cmdb/postmachineinfo/";

    $.get(url,{data:data},function(msg){
       ajax_callback(msg);
     });
});

/*
*ajax get callback
*/
function ajax_callback(msg){
    var msg =  $.parseJSON(msg);
    var index = layer.alert(msg, { //layer控件提示信息
        skin: 'layui-layer-molv' //样式类名
    },function(){
        if (msg == '成功'){
            window.location="/cmdb/server_list/";
        }
        else{
           layer.close(index)
        }
    });
}

后端接口“/cmdb/postmachineinfo/”

@login_required
def postmachineinfo(request):
    # 提交服务器信息
    response = HttpResponse()
    data = json.loads(request.GET.get('data', ''))
    id = int(data['id'])
    print 'update--->'
    server = Server.objects.get(pk=id)
    data = get_info(server.in_ip)
    server.os_version = data['sysinfo']
    server.host_name = data['host_name']
    server.os_kernel = data['os_kernel']
    server.cpu_model = data['cpu']
    server.cpu_count = data['cpu_count']
    server.cpu_cores = data['cpu_cores']
    server.mem = data['mem']
    server.disk = data['disk']
    server.status = True
    server.max_open_files = get_ulimit(server.in_ip)
    server.uptime = get_uptime(server.in_ip)
    server.save()

    # set_service_port(server)  # 设置服务端口信息
    response.write(json.dumps(u'成功'))
    return response

192.168.93.128上的服务和端口信息,原理一样,通过ansible API远程执行netstat -ntpl命令,

获取信息存入数据库

资产管理 cmdb之ansible 获取服务器硬件、软件等信息第8张

免责声明:文章转载自《资产管理 cmdb之ansible 获取服务器硬件、软件等信息》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ATM境内外取款测试点重建索引到指定表空间下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PetShop 4.0 详解之四(PetShop之ASP.NET缓存)

继续第四讲,转自[ http://www.cnblogs.com/YoungPeng/archive/2008/10/13/1177622.html#1339706 ] 如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个名词一定是耳熟能详的。在CPU以及主板的芯片中,都引入了这种名为高速缓冲存储器(Cache)的技术。因为Cache的存取速度比...

Rsync+sersync部署

内核版本:2.6.32-431.el6.x86_64 系统采用最小化安装,系统经过了基本优化,selinux 为关闭状态,iptables 为无限制模式 源码包存放位置:/root Rsync 客户端+Sersync 服务器(SERSYNC),承担角色 MASTER,IP:172.16.100.3,主机名: rsync-client-sersync SE...

SQL Server的链接服务器(MySQL、Oracle、Ms_sql、Access、SYBASE)

一、使用 Microsoft OLE DB Provider For ODBC 链接MySQL安装MySQL的ODBC驱动MyODBC1、为MySQL建立一个ODBC系统数据源,例如:选择数据库为test ,数据源名称为myDSN 2、建立链接数据库EXEC sp_addlinkedserver @server = 'MySQLTest', @srvpro...

埋点

一直有听说过埋点测试,但只有个模糊的概念,现在从埋点测试的定义、埋点测试的目的、埋点测试的方法进行整理,系统学习一下埋点测试 1.埋点测试的定义 定义:     所谓埋点就是在应用中特定的流程收集一些信息,用来跟踪应用使用的状况,后续用来进一步优化产品或是提供运营的数据支撑,包括访问(Visits),访客(Visitor),停留时间(Time On Sit...

Jmeter之JDBC请求(四)

我们常用的Jmeter中的功能又HTTP请求、JDBC Request、SOAP/XML -RPC Request,这3个请求, 现在就为大家介绍下 什么是JDBC请求 首先,大家右键点击“测试计划”与右键“线程组”可以比较看的出,线程组中多了一个Sampler 这边既然要介绍JDBC请求,那么就必须添加一个驱动,使数据库跟Jmeter能连接上 咋们这...

echarts柱状图多组数据配置

一共三组数据 var map4_data1=[320, 332, 301, 334, 390,360,320, 332, 301, 334, 390,360]; var map4_data2=[220, 182, 191, 234, 290,320,220, 182, 191, 234, 290,320]; var map4_data3=[150, 232...