在局部配置文件中配置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():
### 获取订单详情的代码
改进的方法: