一缚柳、conf 文件
-
在conf文件夾創(chuàng)建settings.py 的配置文件
例如這次的運(yùn)維管理系統(tǒng)梁棠,我們將主要會(huì)用的模塊做好配置封裝
MODE = "Agent" #Salt,SSH
二惨缆、在src業(yè)務(wù)邏輯
-
在src文件夾創(chuàng)建script.py 的腳本文件
(1) 考慮用戶配置時(shí)芯义,會(huì)出現(xiàn)在settings.py 限定的MODE變量中輸入空嵌洼,或者出現(xiàn)拼寫(xiě)錯(cuò)誤和超出預(yù)期配置,解決方法在腳本文件中祝沸,__init__
做好判斷
def __init__(self):
#創(chuàng)建一個(gè)限定的集合
mode_list = ['SSH','Salt','Agent']
# 判斷用戶輸入的是否在我們的限定集合中
if setting.MODE in mode_list:
self.mode = setting.MODE
else:
raise Exception('配置文件錯(cuò)誤')
(2) 分析矮烹,首先判斷配置文件執(zhí)行的對(duì)應(yīng)方法 ,通過(guò)方法返回值判斷平臺(tái)罩锐,接受平臺(tái)返回的內(nèi)容
# 只有這三種方式
def ssh(self,cmd):
pass
def salt(self,cmd):
pass
def agent(self,cmd):
pass
shell_cmd 方法通過(guò)判斷用戶配置文件設(shè)置的屬性奉狈,來(lái)執(zhí)行對(duì)應(yīng)方法,并返回對(duì)應(yīng)cmd查回的指令
def shell_cmd(self,cmd):
# 執(zhí)行判斷平臺(tái)
if self.mode == "SSH":
ret = self.ssh(cmd)
elif self.mode == "Salt":
ret = self.salt(cmd)
else:
ret = self.agent(cmd)
return ret
execute,判斷指令的系統(tǒng)涩惑,然后到對(duì)應(yīng)的方法中去處理仁期,因?yàn)樘幚硎嵌喾矫娴模梢酝ㄟ^(guò)指令來(lái)處理內(nèi)存硬盤(pán)多方面的方法竭恬,所以通過(guò)寫(xiě)繼承類跛蛋,來(lái)額外執(zhí)行構(gòu)成插拔的模式
def execute(self):
ret = self.shell_cmd("查看 命令的犯法")
if ret == 'win':
return self.windows()
elif ret == "linux":
return self.linux()
else:
raise Exception('只支持linux,windows')
撰寫(xiě)繼承類,用來(lái)查硬盤(pán)信息,繼承時(shí)要記住痊硕,父類的self赊级,對(duì)應(yīng)的是創(chuàng)建子類對(duì)象,子類中沒(méi)有去父類查找岔绸,父類中理逊,子類重寫(xiě)父類對(duì)應(yīng)方法
class DiskPlugin(BasePlugin):
def windows(self):
return '硬盤(pán)'
def linux(self):
return '硬盤(pán)'
三、整體代碼
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('配置文件錯(cuò)誤')
def ssh(self,cmd):
pass
def salt(self,cmd):
pass
def agent(self,cmd):
pass
def shell_cmd(self,cmd):
# 執(zhí)行判斷平臺(tái)
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