配置文件的设置

大体思路:

  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-客户端的更多相关文章

  1. cmdb客户端代码完善2

    目录: 1.面试提问 2.完善采集端代码 3.唯一标识的问题 4.API的验证 1.面试会问到的问题: # 1. 为啥要做CMDB?# - 实现运维自动化, 而CMDB是实现运维自动化的基石# - 之 ...

  2. cmdb客户端服务器信息采集一

    #cmdb脚本程序一 #!/usr/bin/python # coding:utf-8 """ 采集机器自身信息 1 主机名 2 内存 3 ip与mac地址 4 cpu信 ...

  3. cmdb客户端采集数据的完善

    file文件自己去拷贝(这里不提供) custom_settings.py import os BASEDIR = os.path.dirname(os.path.dirname(os.path.ab ...

  4. cmdb 配置

    cmdb客户端文件夹创建 客户端:client:-bin:启动文件-src:源文件(核心代码)-conf:配置文件-lib:全局的一些方法 和配置-test:测试文件

  5. python自动化运维之CMDB篇-大米哥

    python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ  ...

  6. CMDB资产管理系统开发【day25】:windows客户端开发

    1.目录结构 PS Y:\MadkingClient> tree /f 卷 netgame 的文件夹 PATH 列表 卷序列号为 ACE3-896E Y:. ├─bin │ NedStark.p ...

  7. CMDB资产管理系统开发【day26】:linux客户端开发

    客户端疑难点及获取流程 1.linux客户端支持2就可以,python3就是很麻烦 难道你要求所有的客户端都上pytho3吗? 现在从bin的入口进去 HouseStark.ArgvHandler(s ...

  8. CMDB学习之六 --客户端请求测试,服务端api优化

    客户端使用agent 请求测试,agent使用的POST 请求,使用requests模块 本地采集,汇报服务端 #!/usr/bin/env python # -*- coding:utf-8 -*- ...

  9. Django项目:CMDB(服务器硬件资产自动采集系统)--04--04CMDB本地(Agent)模式客户端唯一标识(ID)

    # client.py # ————————01CMDB获取服务器基本信息———————— from src import plugins #__init__.py from lib.serializ ...

  10. Python之路【第二十二篇】CMDB项目

    浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...

随机推荐

  1. PAT 1009 说反话 C语言

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区 ...

  2. Kubernetes Helm

    Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured Kubernetes reso ...

  3. drill java && spring jdbc 连接使用

     原生 jdbc 连接   1. maven 包 <dependency> <groupId>org.apache.drill.exec</groupId> < ...

  4. linux多线程并发

    多线程并发 进程和线程的概念 进程 进程包括程序映象.地址空间等要素.内核采用PCB来管理进程.进程是内核进行调度的基本单元,每个独立的进程都有自己的代码段.数据段以及堆栈,它们有自己的虚拟地址空间, ...

  5. CSS样式属性分类

    A 文字 1 font-family:字体名称 注意: 当指定多种字体时,用“,”分隔每种字体的名称 当字体名称包含两个以上分开的单词是,用“”把该字体名称括起来. 当样式规则外已经有“”时,用‘’代 ...

  6. Exception in thread "main" java.lang.UnsupportedClassVersionError: com/crack

    执行一个jar文件的时候抛异常了 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/cr ...

  7. ASP.NET Redis 开发 入门

    ASP.NET Redis 开发   文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据 ...

  8. java Annotation的应用

    一.Annotation 示例 Override Annotation @Override public void onCreate(Bundle savedInstanceState); 二.Ann ...

  9. yii 获取当前ip

    <?php //当前域名 echo Yii::app()->request->hostInfo; //除域名外的URL echo Yii::app()->request-> ...

  10. 【转】使用 JMeter 完成常用的压力测试

    本文介绍了 JMeter 相关的基本概念.并以 JMeter 为例,介绍了使用它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项.      ...