热门IT资讯网

python 处理haproxy 添加backend 备忘

发表于:2024-11-29 作者:热门IT资讯网编辑
编辑最后更新 2024年11月29日,# -*- coding:utf-8 -*-import re,osfrom io import BytesIOfrom saltapiauth import SaltApifrom jinja2 i
# -*- coding:utf-8 -*-import re,osfrom io import BytesIOfrom saltapiauth import SaltApifrom jinja2 import Templatesalta = SaltApi()# contents is dictdef 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()
0