运维前线:一线运维专家的运维方法、技巧与实践2.4 如何利用Python获取Facts-阿里云开发者社区

开发者社区> 华章计算机> 正文

运维前线:一线运维专家的运维方法、技巧与实践2.4 如何利用Python获取Facts

简介:
+关注继续查看

2.4 如何利用Python获取Facts


2.4.1 工作原理

通过2.3节的学习可以知道Facts可以获取主机的系统信息,并以K-V形式进行存储,我们只需要处理Puppet Server收集的Agent Facts信息、入库,然后通过Django来读取数据库信息即可,如图2-6所示。

 

图2-6 Facts信息获取流程图

2.4.2 利用Python脚本获取Facts

首先要确定系统中已经安装了Puppet,如果没有,可以从http://yum.puppetlabs.com/下载,并参考https://docs.puppetlabs.com/puppet/latest/reference/install_pre.html进行安装,接下来看看如何通过Python程序来获取Facts信息(注意:下面的程序是查看当前机器的fact信息,下面的这个程序对结果不会做过多的处理,在后面进行CMDB项目的时候将详细讲解fact的数据处理),实例程序facter_message.py的内容如下:

#!/usr/bin/python

# encoding: utf-8

__authors__     = ['LiuYu']

__version__     = 1.0

__date__        = '2015-08-19 14:34:44'

__licence__     = 'GPL licence'

 

# 导入模块

import commands

import re

# 定义一个变量

command = 'facter'

# 定义要打印的列表

show_list = [('fqdn', u'主机名'),

             ('domain', u'域名'),

             ('uptime', u'运行时间'),

             ('operatingsystem', u'系统'),

             ('kernelrelease', u'内核版本'),

             ('ipaddress', u'IP'),

             ('macaddress', u'MAC'),

             ('memorysize_mb', u'内存MB'),

             ('processors', u'CPU'),

             ('blockdevices', u'磁盘'),

]

# 定义一个处理命令的函数

def handle_command_message(command):

    status, content = commands.getstatusoutput(command)

    if status == 0:

        return content

    else:

        return

# 通过函数处理名称,然后打印结果

if __name__ == '__main__':

    result_dict = {}

    result = handle_command_message(command)

    if result:

        for line in result.strip().split('\n'):

            if re.findall('=>', line):

                key, value = line.split('=>', 1)

                result_dict[key.strip()] = value.strip()

        for f_k, f_s in show_list:

            if f_k in result_dict:

                print f_s, ':', result_dict[f_k]

下面我们来运行facter_message.py程序,打印结果:

$ python facter_message.py

主机名 : puppetclient.domain.com

域名 : domain.com

运行时间 : 1 day

系统 : CentOS

内核版本 : 2.6.32-431.1.2.0.1.el6.x86_64

IP: 10.20.122.111

MAC : 00:22:E2:5E:4D:10

内存 MB : 996.48

CPU : {"count"=>1, "models"=>["QEMU Virtual CPU version 1.1.2"], "

磁盘 : sr0,vda,vdb,vdc

通过如上的简单代码就可以将Facts的信息进行集中处理。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
飞天加速计划·高校学生在家实践
关于使用小白对阿里云ECS的使用
32 0
与数据隐私相关的 AI 关键问题
  本文最初发表在 Towards Data Science 博客,经原作者 Alexandros Zenonos 授权,InfoQ 中文站翻译并分享。   隐私不仅是与人工智能有关的问题,也是任何与数据相关的领域普遍关注的问题。隐私是关于人们对其个人数据和基于这些数据所做的决定的控制。
5 0
JavaScript、PHP、Golang、Haskell、Elixir,哪个才是最佳编程语言?
  在过去的几年里,我有机会尝试了多种不同的编程语言。   我非常喜欢学习不同的语言、方法和范式。我是一个充满好奇心的人,一直对编程语言十分着迷。每种编程语言都是不同的,在本文中,我们来讨论一下以下五大编程语言的优点以及缺点。
3 0
DDD 不够好用,你需要学习如何进行弹性软件系统设计
  关键要点   当今的分布式系统环境必须采用弹性软件设计。关键挑战不在于编码,而在于“外围”。做好分布式其实很难,大多数人都严重低估了它的难度。恰当的功能设计是构建健壮的分布式系统的关键,但人们却知之甚少。在公司中引入弹性软件设计的主要挑战是如何建立意识和可持续性。   写这篇文章的起因是我在 2018 年GOTO 柏林大会上所做的演讲,我在演讲中分享了在进行弹性软件设计时会面临哪些挑战。我将简要地介绍弹性软件设计的“why”和“what”,中间部分是我近年来经常遇到的挑战,最后,我添加了一些关于如何在组织中实现弹性软件设计的最佳实践。阅读完本文之后,希望你能够更好地了解弹性软件设计所面
3 0
亚信数据新一代PaaS平台是如何炼成的?
  日前,亚信数据发布旗下多款PaaS产品,包括亚信分布式数据库ADB、容器云计算平台HPS、大数据云平台DCP。这三款产品在亚信内部历经了3年的研发投入和攻关,并在客户项目中得到了实践部署。随着这些系列产品的正式亮相,它们共同构建了亚信完整的PaaS平台解决方案,将亚信拥有的大数据、CRM(客户关系管理系统)、BOSS(业务运营支撑系统)以及众多核心能力逐渐服务化、组件化,由该平台统一承载。
6 0
从时延毛刺问题定位到 Netty 的性能统计设计(上)
从时延毛刺问题定位到 Netty 的性能统计设计(上)
7 0
从时延毛刺问题定位到 Netty 的性能统计设计(下)
从时延毛刺问题定位到 Netty 的性能统计设计(下)
4 0
IT运维人员,把握现在展望未来
  近年来,互联网在中国的发展势头迅猛并呈现出广阔前景。根据中国互联网络信息中心报告显示,截至2020年3月,我国网民规模已经达到9.04亿,互联网普及率增至67.0%,超全球平均水平。   互联网强劲发展的背后是整个IT行业的蓬勃。国家统计局发布的2019平均工资数据表明,工资最高的行业是信息传输、软件和信息技术服务业,IT行业从业人员平均年薪已超16万元。
6 0
阿里云对于学习的帮助
在配置好阿里云后的使用过程中发现的帮助,以及便利。
8 0
阿里ECS初体验
谈谈使用阿里ECS的体验感受
13 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载