• python查询修改配置文件功能


    阅读目录

    一、python查询功能代码

    1、查询修改配置文件

    global
            log 127.0.0.1 local2
            daemon
            maxconn 256
            log 127.0.0.1 local2 info
    defaults
            log global
            mode http
            timeout connect 5000ms
            timeout client 50000ms
            timeout server 50000ms
            option  dontlognull
    
    listen stats :8888
            stats enable
            stats uri       /admin
            stats auth      admin:1234
    
    frontend simon.org
            bind 0.0.0.0:80
            option httplog
            option httpclose
            option  forwardfor
            log global
            acl www hdr_reg(host) -i www.simon.org
            use_backend www.simon.org if www
    
    backend www.simon1.org
            server 101.1000.7.9 101.1000.7.9 weight 20 maxconn 30
            server 2.2.2.7 2.2.2.7 weight 30 maxconn 4000
            server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000
            server 2.2.2.5 2.2.2.5 weight 30 maxconn 4000
    
    backend www.simon2.org
            server 3.3.3.3 3.3.3.3 weight 20 maxconn 3000
    backend www.simon20.org
            server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
    haproxy.conf

    二、实现代码如下

    #_*_coding:utf-8_*_
    import os
    def file_handle(filename,backend_data,record_list=None,type='fetch'): #type:fetch append change
        new_file=filename+'_new'
        bak_file=filename+'_bak'
        if type == 'fetch':
            r_list = []
            with open(filename, 'r') as f:
                tag = False
                for line in f:
                    if line.strip() == backend_data:
                        tag = True
                        continue
                    if tag and line.startswith('backend'):
                        break
                    if tag and line:
                        r_list.append(line.strip())
                for line in r_list:
                    print(line)
                return r_list
        elif type == 'append':
            with open(filename, 'r') as read_file, 
                    open(new_file, 'w') as write_file:
                for r_line in read_file:
                    write_file.write(r_line)
    
                for new_line in record_list:
                    if new_line.startswith('backend'):
                        write_file.write(new_line + '
    ')
                    else:
                        write_file.write("%s%s
    " % (' ' * 8, new_line))
            os.rename(filename, bak_file)
            os.rename(new_file, filename)
            os.remove(bak_file)
        elif type == 'change':
            with open(filename, 'r') as read_file, 
                    open(new_file, 'w') as write_file:
                tag=False
                has_write=False
                for r_line in read_file:
                    if r_line.strip() == backend_data:
                        tag=True
                        continue
                    if tag and r_line.startswith('backend'):
                        tag=False
                    if not tag:
                        write_file.write(r_line)
                    else:
                        if not has_write:
                            for new_line in record_list:
                                if new_line.startswith('backend'):
                                    write_file.write(new_line+'
    ')
                                else:
                                    write_file.write('%s%s
    ' %(' '*8,new_line))
                            has_write=True
            os.rename(filename, bak_file)
            os.rename(new_file, filename)
            os.remove(bak_file)
    
    def fetch(data):
        backend_data="backend %s" %data
        return file_handle('haproxy.conf',backend_data,type='fetch')
    def add(data):
        backend=data['backend']
        record_list=fetch(backend)
        current_record="server %s %s weight %s maxconn %s" %(data['record']['server'],
                                                             data['record']['server'],
                                                             data['record']['weight'],
                                                             data['record']['maxconn'])
        backend_data="backend %s" %backend
    
        if not record_list:
            record_list.append(backend_data)
            record_list.append(current_record)
            file_handle('haproxy.conf',backend_data,record_list,type='append')
        else:
            record_list.insert(0,backend_data)
            if current_record not in record_list:
                record_list.append(current_record)
            file_handle('haproxy.conf',backend_data,record_list,type='change')
    def remove(data):
        backend=data['backend']
        record_list=fetch(backend)
        current_record="server %s %s weight %s maxconn %s" %(data['record']['server'],
                                                             data['record']['server'],
                                                             data['record']['weight'],
                                                             data['record']['maxconn'])
        backend_data = "backend %s" % backend
        if not record_list or current_record not in record_list:
            print('33[33;1m无此条记录33[0m')
            return
        else:
            #处理record_list
            record_list.insert(0,backend_data)
            record_list.remove(current_record)
            file_handle('haproxy.conf',backend_data,record_list,type='change')
    def change(data):
        backend=data[0]['backend']
        record_list=fetch(backend)
    
        old_record="server %s %s weight %s maxconn %s" %(data[0]['record']['server'],
                                                             data[0]['record']['server'],
                                                             data[0]['record']['weight'],
                                                             data[0]['record']['maxconn'])
    
        new_record = "server %s %s weight %s maxconn %s" % (data[1]['record']['server'], 
                                                            data[1]['record']['server'], 
                                                            data[1]['record']['weight'], 
                                                            data[1]['record']['maxconn'])
        backend_data="backend %s" %backend
    
        if not record_list or old_record not in record_list:
            print('33[33;1m无此内容33[0m')
            return
        else:
            record_list.insert(0,backend_data)
            index=record_list.index(old_record)
            record_list[index]=new_record
            file_handle('haproxy.conf',backend_data,record_list,type='change')
    def qita(data):
        pass
    
    
    if __name__ == '__main__':
        msg='''
        1:查询
        2:添加
        3:删除
        4:修改
        5:退出
        6:其他操作
        '''
        menu_dic={
            '1':fetch,
            '2':add,
            '3':remove,
            '4':change,
            '5':exit,
            '6':qita,
        }
        while True:
            print(msg)
            choice=input("操作>>: ").strip()
            if len(choice) == 0 or choice not in menu_dic:continue
            if choice == '5':break
    
            data=input("数据>>: ").strip()
    
            #menu_dic[choice](data)==fetch(data)
            if choice != '1':
                data=eval(data)
            menu_dic[choice](data) #add(data)
    
    
    
    
    # [{'backend':'www.simon20.org','record':{'server':'2.2.2.3','weight':20,'maxconn':3000}},{'backend':'www.simon10.org','record':{'server':'10.10.0.10','weight':9999,'maxconn':33333333333}}]
  • 相关阅读:
    参数默认值
    调用外部 DLL 中的函数(1. 早绑定)
    Delphi 运行时错误信息表
    分享:PyPyODBC 0.9.2发布 纯Python实现的pyodbc替代库
    我的书单
    我的书单
    Philip Guo googler
    我的书单
    isbn2title
    我的书单
  • 原文地址:https://www.cnblogs.com/hackerer/p/10736007.html
Copyright © 2020-2023  润新知