首页 > 技术文章 > cmdb采集数据的版本

huangxuanya 2019-10-04 19:58 原文

 

在局部配置文件中配置MODE=' agent',或者MODE=‘ssh’,或者MODE=‘’saltstack ',  实现只需要修改这个配置,就会使用对应的方案进行采集数据

 

第一种版本:

启动文件中直接判断

start.py

from lib.config.config import settings
import subprocess

from src.plugins import board,disk,memory
if __name__ == '__main__':
    mode = settings.MODE

    if mode == 'agent':
        res = subprocess.getoutput('ifconfig')
        ip = res[30:50]
        print(ip)

    elif mode == 'ssh':
        import paramiko

        # 创建SSH对象
        ssh = paramiko.SSHClient()
        # 允许连接不在know_hosts文件中的主机
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 连接服务器
        ssh.connect(hostname='c1.salt.com', port=22, username='root', password='123')
        # 执行命令
        stdin, stdout, stderr = ssh.exec_command('ifconfig')
        # 获取命令结果
        result = stdout.read()
        print(result)
        # 关闭连接
        ssh.close()
    else:
        import salt.client

        local = salt.client.LocalClient()
        result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])
        print(result)

如果采集不同的信息,还需要一次次的修改命令并且启动文件不能写业务逻辑代码

存在的问题:

1. 面向过程的写法, 代码不容易扩展, 后续不好维护

2. 不符合软件设计的原则 ()
高内聚低耦合
a. 这是一个代码的设计思想
b. 在写函数或者类的时候, 代码中尽量不要多一行和次函数或者 类无关的代码

原则:
def getUserInfo():
### 获取用户信息的函数

getOrderDetail()
pass

def getOrderDetail():
### 获取订单详情的代码

 

 

改进的方法:

推荐阅读