配置文件的设置

大体思路:

  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. fabio 安装试用&&实际使用的几个问题

    备注:    因为fabio 依赖consul vault (不是强需),启动之前需要先安装consul,    本次为了简单consul 使用的是单机,使用的是dev 模式   1. conusl ...

  2. RK3288 指令查看LCD分辨率

    通过下面指令可以查看当前系统设置的分辨率. root@xxx:/ # cd sys/class/graphics/fb0 cd sys/class/graphics/fb0 root@xxx:/sys ...

  3. 从汇编的角度看待变量类型与sizeof的机制

    1.动机:前段时间,一直有个疑问,就是编译器是从哪里知道数据的类型的,数据的类型是存在内存里面的么,因为自己调试编译器,发现内存中并没有多余的数据,后来在群上发问,才知道数据在编译成汇编的过程就知道数 ...

  4. Netty--使用TCP协议传输文件

    简介: 用于将文件通过TCP协议传输到另一台机器,两台机器需要通过网络互联. 实现: 使用Netty进行文件传输,服务端读取文件并将文件拆分为多个数据块发送,接收端接收数据块,并按顺序将数据写入文件. ...

  5. java代码----大二上机考试

    总结:对 冒泡排序熟悉,但不能灵活插入代码 package com.dkl; import java.io.*; import java.io.IOException; import java.uti ...

  6. java,js 解unicode

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class UnicodeDecodeDataConver ...

  7. Collection集合学习(二)———List接口与具体实现

    二.List接口: 一个可以包含重复元素的Collection,List中的元素不会自动排序,元素顺序由添加时的顺序决定. 具体实现类包括Vector(线程安全的),ArrayList,LinkedL ...

  8. 示例文件下载demo

    页面: 后台: package com.js.ai.modules.shwindow.util; import java.io.BufferedInputStream; import java.io. ...

  9. Java web概述

    声明:为了使初学者能更好的了解java web,所以我整理了下资料,概述了web应用程序. 一.web概述 静态web资源:内容是静态的,不同的人在不同的时间来访问时都是相同的内容.HTML.CSS. ...

  10. react组件生命

    组件的生命周期主要由三个部分组成: Mounting:组件正在被插入DOM中 Updating:如果DOM需要更新,组件正在被重新渲染 Unmounting:组件从DOM中移除 React提供了方法, ...