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

相关文章
|
7月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
532 1
|
8月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
284 2
|
7月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
8月前
|
调度 Python
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
225 0
|
8月前
|
传感器 大数据 API
Python数字限制在指定范围内:方法与实践
在Python编程中,限制数字范围是常见需求,如游戏属性控制、金融计算和数据过滤等场景。本文介绍了五种主流方法:基础条件判断、数学运算、装饰器模式、类封装及NumPy数组处理,分别适用于不同复杂度和性能要求的场景。每种方法均有示例代码和适用情况说明,帮助开发者根据实际需求选择最优方案。
394 0
|
7月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
1124 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
7月前
|
机器学习/深度学习 人工智能 运维
三重Reward驱动的运维智能体进化:多智能体、上下文工程与强化学习的融合实践
这篇文章系统性地阐述了 AI 原生时代下,面向技术风险领域的智能体系统(DeRisk)的架构设计、核心理念、关键技术演进路径与实践落地案例。
三重Reward驱动的运维智能体进化:多智能体、上下文工程与强化学习的融合实践
|
8月前
|
机器学习/深度学习 数据采集 算法
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
425 4
|
7月前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
227 0
|
8月前
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
452 0

推荐镜像

更多
下一篇
开通oss服务