zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    RHEL6 搭建 keepalived + lvs/DR 集群
    LeetCode 104. Maximum Depth of Binary Tree
    JAVA面试精选【Java基础第二部分】
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    为什么支付宝不怕你欠债?
  • 原文地址:https://www.cnblogs.com/chenrun/p/10200562.html
Copyright © 2011-2022 走看看