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 ...
随机推荐
- MkDocs 搭建试用
http://www.mkdocs.org/备注: 在平时的开发中文档管理是一个比较重要的部分,同时集成在 平时开发的持续集成中,可以加速开发 1. 安装 pip install mkdoc ...
- (转)Android studio 使用心得(五)—代码混淆和破解apk
这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...
- Linux 制作补丁 打补丁 撤销补丁
1.制作补丁 diff - 逐行比较文件 格式 diff 参数 旧文件/旧文件夹 新文件/新文件夹 -N 将不存在的文件看作是空的 -a 将所有文件都视为文本文件 -u 以合并 ...
- 语义分割【semantic-segmentation】资料备忘
https://github.com/mrgloom/awesome-semantic-segmentation
- Unit07: document 对象 、 自定义对象 、 事件
Unit07: document 对象 . 自定义对象 . 事件 知识点: <!DOCTYPE html> <html> <head> <meta chars ...
- 561. 数组拆分 I
题目 python class Solution: def arrayPairSum(self, nums): """ :type nums: List[int] :rt ...
- solr 的使用及安装【转】
注本文以solr3.3为例 Solr 简介 Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现. Solr 主要特性有:强大的全文检索功能,高亮显示检索结果, ...
- [转]自己做 Visual Studio 2013 代码折叠插件
本文代码来自:https://msdn.microsoft.com/zh-cn/library/ee197665.aspx 第一步.引用 -> 程序集 -> 扩展 里找到对应 .dll 添 ...
- 【BZOJ】1823: [JSOI2010]满汉全席(2-sat)
题目 传送门:QWQ 分析 2-sat模板(然而辣鸡如我还是调了好久) 代码 //bzoj 1823 2-sat #include <bits/stdc++.h> using namesp ...
- TCP 三次握手 四次握手
http://blog.chinaunix.net/uid-22312037-id-3575121.html http://www.centos.bz/2012/08/tcp-establish-cl ...