python 處理haproxy 新增backend 備忘
阿新 • • 發佈:2018-11-30
# -*- coding:utf-8 -*- import re,os from io import BytesIO from saltapiauth import SaltApi from jinja2 import Template salta = SaltApi() # contents is dict def Tempdrawing(contents, flag='proxy'): try: if flag == 'proxy': tempfile = os.path.join('static','nginx_models','nginx_proxy_model') elif flag == 'sshcon': tempfile = os.path.join('static','nginx_models','nginx_ssh_model') else: raise Exception() with open(tempfile) as f: temp_str = f.read() template = Template(temp_str) result = template.render(contents) return result except Exception as e: print(str(e)) return str(e) class OptHaproxy(): def __init__(self): self.filename = '/etc/haproxy/haproxy.cfg.ori' self.hostname = 'Min-Centos1' self.statename = 'haproxy' self.pre_modelfile = 'haproxy_model_pre' self.after_modelfile = 'haproxy_model_after' def getinfo(self): command = 'cat %s' %self.filename res = salta.host_remote_execution_module(self.hostname,'cmd.run',command) # try: # os.remove(self.pre_modelfile) # except Exception as e: # pass with open(self.pre_modelfile,'w') as f: f.write(res[self.hostname]) return res[self.hostname] def showinfo(self): sh = self.getinfo() print(sh) def modify(self,itname,*value): flag = 1 preflag = 1 finflag = 1 server_set = [] # 將需要修改的部分提取出,並去重 with open(self.pre_modelfile,'r') as pre: for line in pre: if line.startswith('backend'): preflag = 1 if preflag == 2: if line.strip() != '': server_set.append(line) if re.search(itname,line) and line.startswith('backend'): preflag = 2 continue for i in value: fina = '%s%s%s'%('\t',i,'\n') if fina not in server_set: server_set.append(fina) print(server_set) ## 將需要修改的部分新增到配置檔案中 with open(self.pre_modelfile,'r') as pref ,open(self.after_modelfile,'w') as afterf: for line in pref: if flag == 1 and finflag == 1: afterf.write(line) if re.search(itname,line) and line.startswith('backend'): flag = 2 continue if flag == 2 and finflag == 1: for unit in server_set: afterf.write(unit) finflag = 2 flag = 1 continue if line.startswith('backend'): nline = '%s%s'%('\n',line) afterf.write(nline) finflag = 1 def deploy(self): fio = BytesIO() with open(self.after_modelfile,'r') as af: for chunk in af: fio.write(chunk) depres = salta.server_hosts_pillar(self.hostname,self.statename,pillar={'config' : fio.getvalue()}) print(depres) def check(self): chkres = salta.host_remote_execution_module(self.hostname,'service.status',self.statename) print(chkres) if __name__ == '__main__': ha = OptHaproxy() ha.getinfo() # ha.showinfo() val = 'server web-node4 192.168.44.40:80 check weight 80' val2 = 'server web-node3 192.168.44.30:88 check weight 50' ha.modify('backend_www_example_com',val,val2) ha.deploy()