一、conf 文件
-
在conf文件夹创建settings.py 的配置文件
例如这次的运维管理系统,我们将主要会用的模块做好配置封装
MODE = "Agent" #Salt,SSH
二、在src业务逻辑
-
在src文件夹创建script.py 的脚本文件
(1) 考虑用户配置时,会出现在settings.py 限定的MODE变量中输入空,或者出现拼写错误和超出预期配置,解决方法在脚本文件中,__init__
做好判断
def __init__(self):
#创建一个限定的集合
mode_list = ['SSH','Salt','Agent']
# 判断用户输入的是否在我们的限定集合中
if setting.MODE in mode_list:
self.mode = setting.MODE
else:
raise Exception('配置文件错误')
(2) 分析,首先判断配置文件执行的对应方法 ,通过方法返回值判断平台,接受平台返回的内容
# 只有这三种方式
def ssh(self,cmd):
pass
def salt(self,cmd):
pass
def agent(self,cmd):
pass
shell_cmd 方法通过判断用户配置文件设置的属性,来执行对应方法,并返回对应cmd查回的指令
def shell_cmd(self,cmd):
# 执行判断平台
if self.mode == "SSH":
ret = self.ssh(cmd)
elif self.mode == "Salt":
ret = self.salt(cmd)
else:
ret = self.agent(cmd)
return ret
execute,判断指令的系统,然后到对应的方法中去处理,因为处理是多方面的,可以通过指令来处理内存硬盘多方面的方法,所以通过写继承类,来额外执行构成插拔的模式
def execute(self):
ret = self.shell_cmd("查看 命令的犯法")
if ret == 'win':
return self.windows()
elif ret == "linux":
return self.linux()
else:
raise Exception('只支持linux,windows')
撰写继承类,用来查硬盘信息,继承时要记住,父类的self,对应的是创建子类对象,子类中没有去父类查找,父类中,子类重写父类对应方法
class DiskPlugin(BasePlugin):
def windows(self):
return '硬盘'
def linux(self):
return '硬盘'
三、整体代码
from conf import setting
class BasePlugin(object):
def __init__(self):
mode_list = ['SSH','Salt','Agent']
if setting.MODE in mode_list:
self.mode = setting.MODE
else:
raise Exception('配置文件错误')
def ssh(self,cmd):
pass
def salt(self,cmd):
pass
def agent(self,cmd):
pass
def shell_cmd(self,cmd):
# 执行判断平台
if self.mode == "SSH":
ret = self.ssh(cmd)
elif self.mode == "Salt":
ret = self.salt(cmd)
else:
ret = self.agent(cmd)
return ret
def execute(self):
ret = self.shell_cmd("查看 命令的犯法")
if ret == 'win':
return self.windows()
elif ret == "linux":
return self.linux()
else:
raise Exception('只支持linux,windows')
def linux(self):
raise Exception('....')
def windows(self):
raise Exception('....')
class DiskPlugin(BasePlugin):
def windows(self):
output = self.shell_cmd('as')
return output
def linux(self):
output = self.shell_cmd('as')
return output
网友评论