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

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

实验使用两台机器

IP

系统

软件

192.168.93.137

centos6.5_x64

ansible 1.9.4

192.168.93.128

centos6.5_x64

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

ansible 192.168.93.128 -m setup

cc3937c3264516ca59fc0f3ff93f7d9c.png

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

a2340b702fb06de93995339888464b48.png

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

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

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

importansible.runnerdefget_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_namereturndataif __name__ == '__main__':

data= get_info('')importpprint

pprint.pprint(data)

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

899e38ffb7095f76c8704c7867fec5ee.png

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

方法、套路有很多:

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

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

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

98e81cdeb62b6530ed15499a7acbaab9.png

运维平台展示服务器信息

248ab526447f3af8a9bf1b6027e177da.png

原理:

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

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

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

“成功”的信息。

前端更新按钮:

更新

4895963546c9edb976f2f996a6a2a596.png

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

cf8ae4557d03daeeff8cb4fd3bed6c92.png

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*/

functionajax_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_requireddefpostmachineinfo(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命令,

获取信息存入数据库

221eb78944a744e767fcfe9ed4bee995.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值