通过Python利用saltstack进行生成服务器资产清单

简介:

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

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

    

    saltstack快速入门,可参考:http://youerning.blog.51cto.com/10513771/1708964

    

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

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

wKioL1bUA0vyz7jLAAAyER8kKtQ523.png spacer.gif

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

获取主机名

1
salt H-T-4 grains.item host

获取IP地址

1
salt zabbix grains.item ipv4

获取CPU核数

1
salt \* grains.item num_cpus

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

     

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

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

  wKioL1bUA6qDqgZaAABQAUvjze8699.png

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

    

最终脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#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  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  in  app_name:
             if  in  hostname.lower():
                 app  =   j
                 break
             else :
                 app  =  "undefined"
         =  ","
         
         ###连接并写入
         line  =  hostname  +  +  ipv4  +  +  str (mem)  +  +  str (num_cpu)  +  +  str (OS)  +  +  str (disk_data)  +  +  project  +  +  app
         ret_file.write(line  +  "\n" )
except  Exception,e:
     print  "Exception:\n" ,e
finally :
     ret_file.close()

用记事本打开应该是这样

wKiom1bUBSLCcFkDAAFuacqW6Ao882.png

用Excel打开应该是这样

wKioL1bUBaaQ9w7xAADq1H32mGk828.png


本文转自 youerning 51CTO博客,原文链接:http://blog.51cto.com/youerning/1746075

相关文章
|
10天前
|
JSON API 数据库
Python使用Quart作为web服务器的代码实现
Quart 是一个异步的 Web 框架,它使用 ASGI 接口(Asynchronous Server Gateway Interface)而不是传统的 WSGI(Web Server Gateway Interface)。这使得 Quart 特别适合用于构建需要处理大量并发连接的高性能 Web 应用程序。与 Flask 类似,Quart 也非常灵活,可以轻松地构建 RESTful API、WebSockets、HTTP/2 服务器推送等。
|
10天前
|
存储 数据库连接 数据库
如何使用Python上传文件到FTP服务器
如何使用Python上传文件到FTP服务器
13 1
|
17天前
|
运维 监控 API
自动化运维实践指南:Python脚本优化服务器管理任务
本文探讨了Python在自动化运维中的应用,介绍了使用Python脚本优化服务器管理的四个关键步骤:1) 安装必备库如paramiko、psutil和requests;2) 使用paramiko进行远程命令执行;3) 利用psutil监控系统资源;4) 结合requests自动化软件部署。这些示例展示了Python如何提升运维效率和系统稳定性。
33 8
|
5天前
|
Linux Shell Python
linux服务器python2升级安装python3.7环境
linux服务器python2升级安装python3.7环境
16 0
|
2月前
|
API 网络安全 数据处理
使用Python调用远程服务器上的依赖
通过使用SSH远程执行、远程API调用和Jupyter Notebook等方法,我们可以有效地调用远程服务器上的依赖,简化本地环境配置,提高计算效率。这种方法在处理大规模数据、复杂计算任务时尤为有用。希望本文能为您提供一些有用的参考,助您在开发过程中更加高效地利用远程依赖。
|
应用服务中间件 nginx Python
|
10天前
|
机器学习/深度学习 人工智能 前端开发
Python中的模块化编程
【6月更文挑战第17天】Python模块化编程与软件架构设计的关键在于拆分任务到独立模块,提高代码的可维护性、可重用性和可扩展性。例如,学生管理系统可分解为录入、查询和删除模块。MVC和MVVM架构模式有助于组织代码,而微服务和函数式编程将在未来发展中扮演重要角色。通过示例代码,读者能学习如何实现这些概念,提升项目开发效率和质量。
156 57
|
17天前
|
测试技术 虚拟化 云计算
GitHub高赞!速通Python编程基础手册,被玩出花了!
随着云时代的来临,Python 语言越来越被程序开发人员喜欢和使用,因为其不仅简单易学,而且还有丰富的第三方程序库和相应完善的管理工具。 从命令行脚本程序到 GUI程序,从图形技术到科学计算,从软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有 Python 的身影。 今天给小伙伴们分享的这份手册采用以任务为导向的编写模式,全面地介绍了 Python 编程基础及其相关知识的应用,讲解了如何利用 Python 的知识解决部分实际问题。
GitHub高赞!速通Python编程基础手册,被玩出花了!
|
7天前
|
数据挖掘 数据处理 Python
Python编程入门:从基础到实践
【6月更文挑战第26天】这篇文章引导读者逐步学习Python编程,从基础语法如变量、数据类型(整数、浮点数、字符串)到条件语句、循环(if/for/while),再到函数定义和模块导入。通过实例展示了Python在文本处理、数据分析(使用pandas)和Web开发(使用Flask)的应用。学习Python能为初学者开启更广阔的技术领域,如面向对象编程、并发和网络编程等。