小試牛刀

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
def file_handle(filename,backend_data,record_list=None,type='fetch'):
    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 l in r_list:
                print(l)
            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.startwith('backend'):
                    write_file.write(new_line + '\n')
                else:
                    write_file.write('%s%s\n'%(" "*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+'\n')
                            else:
                                write_file.write('%s%s\n' %(' '*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('\033[33;1m您刪除的數據不存在\033[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('\033[33;1m您需要修改的數據不存在 \033[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')


if __name__=="__main__":
    msg = '''
        1:查詢
        2:添加
        3:刪除
        4:修改
        5:退出
        '''
    menu_dic={
        '1':fetch,
        '2':add,
        '3':remove,
        '4':change,
        '5':exit,
    }
    while True:
        print(msg)
        choice = input('操作>> :').strip()
        if len(choice) == 0 or choice not in menu_dic:
            continue

        data = input('數據>>:').strip()
        if choice == '5':
            break
        if choice != '1':
            data = eval(data)
        menu_dic[choice](data)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章