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 ...
随机推荐
- shell编写总结
变量引用 $(VAR): 会将VAR当做一条命令来执行 '$VAR': 单引号中包含的变量, 不会被引用, 仍然输出$VAR "$VAR": 双引号中包含的变量, 会被引用成$VA ...
- django gunicorn 各worker class简单性能测试
版权归作者所有,任何形式转载请联系作者.作者:petanne(来自豆瓣)来源:https://www.douban.com/note/564871723/ ====================== ...
- UVA12716 GCD XOR 数论数学构造
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010682557/article/details/36204645 题目给你一个N,让你求 两个数 ...
- 微信开发 api 需要 https 服务器
微信开发 api 需要 https 服务器 先建一个环境,本地的 https 服务器. 以下这篇不错,很完整. https://zhuanlan.zhihu.com/p/23640321
- 深入理解java虚拟机-第二章:java内存区域与内存泄露异常
2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...
- 在AWS EMR上运行Map Reduce的Java示例程序 及 操作小计
下面的代码中AffairClient类中包含了三个内之类,分别对应于Hadoop Mapreduce程序运行所需的Mapper类,Reducer类,和主类.AffairClient类中其余方法用于配置 ...
- caffemodel的读取与修改
直接撸代码~ import caffe import numpy as np caffe.set_mode_cpu() net = caffe.Net('myprototxt.prototxt', ' ...
- C# WMP 视频播放
1. C#播放器控件常用的方法介绍 右击工具箱->选择项(I)... -> 显示"选择工具箱项" -> COM组件 -> Windows Media Pla ...
- 老齐python-基础9(函数)
继续上篇 函数 多参数: >>> def foo(x,y,z,*args,**kargs): ... print(x) ... print(y) ... print(z) ... p ...
- 数组与指针的区别,以及在STL中传递数组/指针
数组和指针在作为实参传入T[] 或T*的形参时没有区别 void f(int pi[]) { cout << sizeof(pi) << endl; } int a[5] = ...