zoukankan      html  css  js  c++  java
  • 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}}]
  • 相关阅读:
    v-model的实现原理
    面试技巧
    Vue中使用mui的tab-top-webview-main完成分类滑动栏出现兼容问题如何解决
    前端jquery面试题个人总结
    下拉复选框
    什么是BFC
    CSS控制文本自动换行
    CSS+DIV布局中absolute和relative区别
    2种方式解决vue路由跳转未匹配相应路由避免出现空白页面或者指定404页面
    vue页面无操作10分钟内调转到登录页面
  • 原文地址:https://www.cnblogs.com/hackerer/p/10736007.html
Copyright © 2011-2022 走看看