通过Python使用saltstack生成服务器资产清单


Posted in Python onMarch 01, 2016

SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

前言:人工去对每一台服务器的硬件信息并记录早已经过去了,无论通过脚本还是自动化工具都是可以进行一次编写到处抓取的,本文主要使用saltstack作为使用工具,然后利用其提供的APi编写所需的Python脚本~~

需求如下:生成服务器主机名,IP地址,内存,CPU核数,操作系统,数据盘配额,主要运行服务

saltstack快速入门,可参考:Saltstack快速入门简单汇总

这里主要用到saltstack的grains,就是saltstack minion端生成的一些静态信息,比如CPU,内存,主机名什么的,而这些就是我们所需要的

执行salt \* grains.items,会打印一大堆的默认抓取的信息,其中一部分,如下

通过Python使用saltstack生成服务器资产清单

我们当然只挑我们需要的,操作如下

获取主机名

salt H-T-4 grains.item host

获取IP地址

salt zabbix grains.item ipv4

获取CPU核数

salt \* grains.item num_cpus

以此类推,根据自己所需,提取~~~

值得注意的是,grains信息里面并没有硬盘信息,所以还需通过disk.usage这个选项,得到我们所需的硬盘信息

执行salt zabbix disk.usage,得到结果如下

通过Python使用saltstack生成服务器资产清单

其中1K-blocks即我们所需的硬盘信息,根据需求只需要数据盘/data,所以后面就会计算这个盘的配额

最终脚本如下

#coding=utf-8
import salt.client as sc
import json
###salt调用
local = sc.LocalClient()
###目标主机指定
tgt = "*"
###获取grains,disk信息
grains = local.cmd(tgt,"grains.items")
diskusage = local.cmd(tgt,"disk.usage")
###主要应用列表即文件开头
app_name = ["tomcat","zookeeper","redis","mysql","nginx"]
cols = "主机名,IP地址,内存(GB),CPU核数,操作系统,数据盘/data(GB),所属项目,主要应用"
###打开一个.csv文件,以便写入
ret_file = open("ret.csv","w")
###首先写入开头,有点字段名的意思
ret_file.write(cols + "\n")
try:
for i in grains.keys():
###打印信息可注释掉
print grains[i]["nodename"]
print "ipv4" + ":" ,grains[i]["ipv4"]
print "mem_total" + ":" , grains[i]["mem_total"] / 1024 + 1
print "num_cpus" + ":" , grains[i]["num_cpus"]
print "osfullname" + ":" , grains[i]["osfullname"]
print "release" + ":" , grains[i]["lsb_distrib_release"]
###可能一些主机没有/data数据盘1048576是1024x1024
if "/data" not in diskusage[i]:
print "diskusage" + ":" + "have no /data disk"
else:
data_vol = int(diskusage[i]["/data"]["1K-blocks"])
print "diskusage" + ":" , data_vol / 1048576 
###去掉127.0.0.1这个地址
ipv4 = str(grains[i]["ipv4"]).replace(", '127.0.0.1'","")
###因为一些历史遗留问题,这里取得不是主机名,而是salt-minion的id名,用以判断主要应用
hostname = grains[i]["id"]
ipv4 = str(grains[i]["ipv4"]).replace(", '127.0.0.1'","")
ipv4 = ipv4.replace(",","and")
mem = grains[i]["mem_total"] / 1024 + 1
num_cpu = grains[i]["num_cpus"]
OS = grains[i]["osfullname"] + grains[i]["lsb_distrib_release"]
if "/data" not in diskusage[i]:
disk_data = "None"
else:
disk_data = data_vol / 1048576
###项目名为空
project = ""
###通过minion ID名来判断主要运行服务,比如xx-mysql-1,则运行mysql
for j in app_name:
if j in hostname.lower():
app = j
break
else:
app = "undefined"
c = ","
###连接并写入
line = hostname + c + ipv4 + c + str(mem) + c + str(num_cpu) + c + str(OS) + c + str(disk_data) + c + project + c + app
ret_file.write(line + "\n")
except Exception,e:
print "Exception:\n",e
finally:
ret_file.close()

用记事本打开应该是这样

通过Python使用saltstack生成服务器资产清单

以上内容是小编给大家介绍的通过Python使用saltstack生成服务器资产清单的全部叙述,希望对大家有所帮助!

Python 相关文章推荐
python判断给定的字符串是否是有效日期的方法
May 13 Python
简单学习Python time模块
Apr 29 Python
Python selenium如何设置等待时间
Sep 15 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
详解python tkinter教程-事件绑定
Mar 28 Python
python3实现高效的端口扫描
Aug 31 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
Python 如何批量更新已安装的库
May 26 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
Python astype(np.float)函数使用方法解析
Jun 08 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
Python解析json文件相关知识学习
Mar 01 #Python
使用简单工厂模式来进行Python的设计模式编程
Mar 01 #Python
Python文件处理
Feb 29 #Python
python 默认参数问题的陷阱
Feb 29 #Python
简要讲解Python编程中线程的创建与锁的使用
Feb 28 #Python
Python中time模块和datetime模块的用法示例
Feb 28 #Python
python 写的一个爬虫程序源码
Feb 28 #Python
You might like
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
Python实现通讯录功能
2018/02/22 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
python实现双人五子棋(终端版)
2020/12/30 Python
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
实习期自我鉴定
2013/10/11 职场文书
师范生求职信
2014/06/14 职场文书
信用卡工资证明格式
2014/09/13 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
2015初中团委工作总结
2015/07/28 职场文书
六年级语文教学反思
2016/03/03 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL