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 ...
随机推荐
- MySQL中地理位置数据扩展geometry的使用心得
最近学习了些MySQL geometry数据存储和计算,在这里记录下. 1. 环境 geometry推荐在5.6版本以上使用,尽管大部分功能在5.5已经可用,除了距离计算函数st_distance等新 ...
- [MEF]第05篇 MEF的目录(Catalog)筛选
一.演示概述本示例演示如何使用MEF提供的目录(Catalog)的扩展机制实现可过滤导出部件的自定义目录类.主要是通过继承ComposablePartCatalog基类,并实现接口INotifyCom ...
- PHP面向对象(OOP)----访问限制符
访问控制修饰符指public.protected.private三个关键词来修饰类的成员属性和成员方法,可以有不同的权限 public:[共有的]类里面调用和类外面调用都是可以的 protected: ...
- Linux和Windows的遍历目录下所有文件的方法对比
首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...
- dom4j使用的小例子
product.xml: <?xml version="1.0" encoding="UTF-8"?> <root> <produ ...
- python算两个时间之间的天数,将天数转成int型
import time import datetime #计算两个日期相差天数,自定义函数名,和两个日期的变量名. def Caltime(date1,date2): #%Y-%m-%d为日期格式,其 ...
- Window下安装Memecached
原创,如有转载请注明来处! memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用.这是一套开 ...
- json data 解析demo
json data: demo: JsonObject jsonObject= JsonHandle.getAsJsonObject(city_dataInfo).get("data&quo ...
- nginx+php产生大量TIME_WAIT连接解决办法
问题:当启动nginx和php-fpm时,使用netstat -tunap查看到大量TIME_WAIT连接 由于不知道原因,害怕是受到攻击,马上killall nginx 和php-fpm 会不会是8 ...
- Storm概念理解
组成: Topology是Storm里的最高抽象概念,相当于Hadoop里的MapReduce,Topology(流转换图)由Spouts和Bolts组成.Spout创建Stream,Stream由无 ...