运维前线:一线运维专家的运维方法、技巧与实践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的信息进行集中处理。

相关文章
|
4天前
|
消息中间件 运维 Kubernetes
构建高效自动化运维体系:Ansible与Kubernetes的融合实践
【5月更文挑战第9天】随着云计算和微服务架构的普及,自动化运维成为确保系统可靠性和效率的关键。本文将深入探讨如何通过Ansible和Kubernetes的集成,构建一个强大的自动化运维体系。我们将分析Ansible的配置管理功能以及Kubernetes容器编排的优势,并展示如何将二者结合,以实现持续部署、快速扩展和高效管理现代云原生应用。文章还将涵盖实际案例,帮助读者理解在真实环境下如何利用这些工具优化运维流程。
|
1天前
|
SQL 关系型数据库 数据库连接
使用 Python 访问数据库的基本方法
【5月更文挑战第12天】在Python中操作数据库涉及安装数据库驱动(如mysql-connector-python, psycopg2, pymongo)、连接数据库、执行查询/更新、处理结果集及关闭连接。使用ORM(如SQLAlchemy)可简化操作。通过上下文管理器(with语句)能更好地管理资源和错误。注意根据实际需求处理事务、错误和安全性,例如使用SSL连接。
13 2
|
2天前
|
Python
【Python进阶(二)】——程序调试方法
【Python进阶(二)】——程序调试方法
|
4天前
|
存储 Linux Shell
python移除/删除非空文件夹/目录的最有效方法是什么?
python移除/删除非空文件夹/目录的最有效方法是什么?
9 0
|
6天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Ansible的策略与实践
【5月更文挑战第8天】 在当今IT基础设施管理领域,自动化不再是一个选择,而是必要的步骤。随着复杂性的增加和变更的频繁性,自动化工具如Ansible提供了一种高效、可靠的解决方案来简化配置管理和多节点部署。本文将探讨如何利用Ansible构建一个高效的自动化运维体系,涵盖其核心原理、策略设计以及在实际环境中的应用。我们将分析Ansible与其他自动化工具的不同之处,并提供一些最佳实践,以帮助运维专家提升他们的工作效率和系统稳定性。
|
7天前
|
Python
【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
【5月更文挑战第6天】【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
|
7天前
|
Python
在Python中快捷引入缺失包的技巧和实践
在Python中快捷引入缺失包的技巧和实践
11 0
|
7天前
|
人工智能 Python
Python中的反对称矩阵:理论、应用与代码实践
Python中的反对称矩阵:理论、应用与代码实践
24 1
|
7天前
|
数据处理 Python
Python中每个字段增加多条数据的高效方法
Python中每个字段增加多条数据的高效方法
14 1
|
7天前
|
机器学习/深度学习 数据采集 数据可视化
利用Python进行历史数据预测:从入门到实践的两个案例分析
利用Python进行历史数据预测:从入门到实践的两个案例分析
21 1