CMDB-客户端
配置文件的设置

大体思路:
1,通过开始文件将用户配置信息的文件放置到环境变量中。
2,在lib文件中的config文件中,从环境变量中获取到用户的配置,通过importlib模块导入用户配置文件,通过dir方法获取到文件內的配置信息加载到本Settings类中。
3,默认配置方式同上。
import os os.environ["USER_SETTINGS"] = "config.settings" from lib.conf.config import settings print(settings.USER)
print(settings.EMAIL)
./bin/start
"""
用户自定义配置
""" USER = "root"
EMAIL = "chenrun@163.com"
./config/settings
默认配置信息
"""
全局配置文件
"""
import os
import importlib
from . import global_settings class Settings(object):
def __init__(self):
# 找到默认配置
for name in dir(global_settings):
value = getattr(global_settings, name)
setattr(self, name, value) # 找到自定义配置
settings_module = os.environ.get("USER_SETTINGS")
# 根据字符串导入模块
if settings_module:
m = importlib.import_module(settings_module)
for name in dir(m):
if name.isupper():
value = getattr(m, name)
setattr(self, name, value) settings = Settings()
./lib/conf/config
执行流程的大体思路:

basic.py
class Basic(object):
def process(self):
return "123123123"
init.py文件
从配置文件中获取到所有需要采集的硬件信息,通过importlib导入,并执行每个类里的process方法。
import importlib
from lib.conf.config import settings class PluginManager(object):
def __init__(self, hostname=None):
self.hostname = hostname
self.plugin_dict = settings.PLUGINS_DICT def exec_plugin(self):
"""
获取所有的插件,并执行获取插件的返回值
:return:
"""
response = {}
for k, v in self.plugin_dict.items():
# 'basic': "src.plugins.basic.Basic"
prefix, class_module = v.rsplit(".", 1)
m = importlib.import_module(prefix)
cls = getattr(m, class_module)
result = cls().process()
response[k] = result return response
start.py文件
通过sys.path.append() 导入根目录,方便导入src中的模块
import os os.environ["USER_SETTINGS"] = "config.settings"
import sys BASEDIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(BASEDIR) from src.plugins import PluginManager if __name__ == '__main__':
server_info = PluginManager().exec_plugin()
print(server_info)
后续在init中执行分别定义不同的连接方式,agent,paramiko,saltstack。
src下创建client与script文件
client处理发送API,获取资产信息,获取ssh
import json import requests from src.plugins import PluginManager
from lib.conf.config import settings class Base(object):
def post_asset(self, server_info):
requests.post(settings.API, json=server_info) class Agent(Base): def execute(self):
server_info = PluginManager().exec_plugin()
self.post_asset(server_info) class SSHSALT(Base):
def get_host(self):
# 获取未采集的主机列表
response = requests.get(settings.API)
result = json.loads(response.text)
if not result["status"]:
return
return result["data"] def execute(self):
host_list = self.get_host()
for host in host_list:
server_info = PluginManager(host).exec_plugin()
self.post_asset(server_info)
./src/client
script.py文件对不同的模式进行判断返回obj对象
from . import client
from lib.conf.config import settings def run():
if settings.MODE == "AGENT":
obj = client.Agent()
else:
obj = client.SSHSALT() obj.execute()
./src/script.py
CMDB-客户端的更多相关文章
- cmdb客户端代码完善2
目录: 1.面试提问 2.完善采集端代码 3.唯一标识的问题 4.API的验证 1.面试会问到的问题: # 1. 为啥要做CMDB?# - 实现运维自动化, 而CMDB是实现运维自动化的基石# - 之 ...
- cmdb客户端服务器信息采集一
#cmdb脚本程序一 #!/usr/bin/python # coding:utf-8 """ 采集机器自身信息 1 主机名 2 内存 3 ip与mac地址 4 cpu信 ...
- cmdb客户端采集数据的完善
file文件自己去拷贝(这里不提供) custom_settings.py import os BASEDIR = os.path.dirname(os.path.dirname(os.path.ab ...
- cmdb 配置
cmdb客户端文件夹创建 客户端:client:-bin:启动文件-src:源文件(核心代码)-conf:配置文件-lib:全局的一些方法 和配置-test:测试文件
- python自动化运维之CMDB篇-大米哥
python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ ...
- CMDB资产管理系统开发【day25】:windows客户端开发
1.目录结构 PS Y:\MadkingClient> tree /f 卷 netgame 的文件夹 PATH 列表 卷序列号为 ACE3-896E Y:. ├─bin │ NedStark.p ...
- CMDB资产管理系统开发【day26】:linux客户端开发
客户端疑难点及获取流程 1.linux客户端支持2就可以,python3就是很麻烦 难道你要求所有的客户端都上pytho3吗? 现在从bin的入口进去 HouseStark.ArgvHandler(s ...
- CMDB学习之六 --客户端请求测试,服务端api优化
客户端使用agent 请求测试,agent使用的POST 请求,使用requests模块 本地采集,汇报服务端 #!/usr/bin/env python # -*- coding:utf-8 -*- ...
- Django项目:CMDB(服务器硬件资产自动采集系统)--04--04CMDB本地(Agent)模式客户端唯一标识(ID)
# client.py # ————————01CMDB获取服务器基本信息———————— from src import plugins #__init__.py from lib.serializ ...
- Python之路【第二十二篇】CMDB项目
浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...
随机推荐
- 配置 VS Code 调试 JavaScript
原文:配置 VS Code 调试 JavaScript 1. 安装 Debugger for Chrome 扩展.Open in Browser 扩展.View In Browser 扩展 2.用v ...
- lua中的数学库
Lua5.1中数学库的所有函数如下表: 使用数学库,不需要require,直接math.function就可以math.pi 为圆周率常量 = 3.14159265358979323846 abs 取 ...
- jenkins忘记密码如何处理?
一.admin密码未更改情况 1.进入\Jenkins\secrets目录,打开initialAdminPassword文件,复制密码: 2.访问Jenkins页面,输入管理员admin,及刚才的密码 ...
- 扩充 jQuery EasyUI Datagrid 数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
客户需求: jQuery EasyUI Datagrid 用户列表鼠标悬停/离开数据行时显示人员头像(onMouseOver/onMouseOut) 如图所示,Datagrid 鼠标悬停/离开数据行时 ...
- C++内存管理原则
内存可分配的地方有2个: 栈Stack和堆Heap. 内存管理的方式有3种: RAII, 智能指针或者GC. 不推荐自己管理裸指针. C++的内存管理其实是一个哲学问题: 怎样才能确定一个东西没有被其 ...
- Pdnovel 在线阅读体验
pdnovel是discuz的一款小说阅读插件,本身是用php开发的,数据存储于mysql,小说文本存储于file文件.pdnovel本身已有添加书籍.连载章节的功能,但为了批量添加全本txt书籍又开 ...
- python 面向对象(其他相关)
python 面向对象(其他相关): (思维导图 ↑↑↑↑↑↑) 一.issubclass(obj,cls) 检查obj是否是类cls的对象 class Base(object): pass c ...
- Java 代码块
一.简介 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. 3.静态代码块: 用static{}包裹起来的代码片段,只会执 ...
- 数据运算+-*/,比较运算符==!=,赋值运算,逻辑运算and,or,not,成员运算in,not in,身份运算is is not,位运算&|,运算符的优先级
取模就是返回余数. 取模的作用主要是来取奇偶数来用的,奇数干嘛,偶数干嘛. 比较运算符: 赋值运算: 逻辑运算: 赋值的时候可以多个变量同时赋值 成员运算: in就是在不在的意思. 身份运算: 位运算 ...
- Java复习——反射和泛型的复习
反射 Class类 一个类被类加载器加载到内存之中,占有一片区域,这个空间里的内容就是类的字节码,不同的类的字节码是不一样的,这一个个空间页可以使用类来表示,这就是Class类. 根据这个概念可知:不 ...