python 处理haproxy 添加backend 备忘
2018-11-30 17:29
218 查看
# -*- 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()
相关文章推荐
- Python中敏感信息(用户名、密码等)处理方法――添加到环境变量
- ViewModel中C# Property自动添加OnPropertyChanged处理的小工具, 以及相应Python知识点
- 用python简单处理图片(3):添加水印
- 用python简单处理图片(3):添加水印
- 用python简单处理图片(3):添加水印
- ViewModel中C# Property自动添加OnPropertyChanged处理的小工具, 以及相应Python知识点
- ViewModel中C# Property自动添加OnPropertyChanged处理的小工具, 以及相应Python知识点
- 【python图像处理】给图像添加透明度(alpha通道)
- python抓取网页时字符集转换问题处理方案分享
- python添加tab键自动补全功能
- SSM框架_4(添加log日志管理(aop)+Exception异常统一处理(aop))
- Js脚本:动态添加HTML自定义属性以及处理html元素的自定义属性(兼容Firefox和IE)
- python的文本处理(一)
- Python的中文编码处理
- Python:threading模块用于多线程控制和处理
- python selenium --滚动条处理
- python处理数据
- Python处理PDF及生成多层PDF
- Python开发技术详解-笔记_第07章-文件的处理
- python元组处理