HAproxy配置文件操作

Posted on 2018-03-14 18:55  甜心卜乙  阅读(129)  评论(0)    收藏  举报

1. 根据用户输入输出对应的backend下的server信息

2. 可添加backend 和sever信息

3. 可修改backend 和sever信息

4. 可删除backend 和sever信息

5. 操作配置文件前进行备份

6 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建;若信息与已有信息重复则不操作

# -*- coding: UTF-8 -*-
# Author: hanly

import sys,time

#查询函数
def func_search(index,file):
    list_list = []
    with open(file) as file_search:
        for line in file_search:
            if 'backend ' in line and line.startswith('b'):
                list_backend = line.partition(' ')
                list_list.append(list_backend[2])
        file_search.seek(0)
        for line in file_search:
            if list_list[index-1] in line and line.startswith('b'):
                print line,file_search.next()
    return list_list[index-1]

#添加信息
def func_add(file):
    add_son_type = 0
    backend_add = raw_input('请输入需要添加的backend信息:')
    server_add = raw_input('请输入需要添加的server信息:')
    #user_add = eval(user_add)
    with open(file) as file_old,open('file.bak','w') as file_new:
        for line in file_old:
            file_new.write(line)
            if backend_add in line and line.startswith('b'):
                file_new.write('\n \t')
                file_new.write('server\t')
                file_new.write(server_add)
                file_new.write('\n')
                add_son_type = 1
            elif server_add in line:
                print '该条信息已存在,请勿重复添加'
                return False
        if add_son_type ==0:
            file_new.write('\n')
            file_new.write('backend ')
            file_new.write(backend_add)
            file_new.write('\n\t\t')
            file_new.write('server\t')
            file_new.write(server_add)
        return True

def func_change(file):
    pass

def func_delete(delete_type,file):
    delete_type = 0
    server_contect = func_search(delete_type, file)
    with open(file) as f,open('file_delete.bak','w') as fb:

        for line in f:
            if server_contect in line:
                delete_type = 1
                continue
            if delete_type == 1 and (not line.startswith('b')):
                continue
            fb.write(line)
        if delete_type == 0:
            return False
        return  True

#退出
def func_exit():
    for i in range(10):
        sys.stdout.write('#')
        sys.stdout.flush()
        time.sleep(0.1)



#判断输入是否为数字
def func_isdigit(usrinput):
    if usrinput.isdigit():
        return int(usrinput)
    else:
        return False

#主函数

file = 'haproxy2'
print '欢迎来到Haproxy文件配置平台'.center(50,'*')
print 'backend编码信息如下:'
list_main = []
with open(file) as file_old:

    for line in file_old:
        if 'backend' in line and line.startswith('b'):
            list_part = line.partition(' ')
            list_main.append(list_part[2])
for index,context in enumerate(list_main):
    print index,context
print '''操作清单如下:
    # 1、查询backend和server信息
    # 2、添加backend和server信息
    # 3、修改backend和server信息
    # 4、删除backend和server信息
    # 5、退出'''

while True:

   user_input = raw_input('请输入需要操作的数字编号:')
   yes_type = func_isdigit(user_input)
   if yes_type == 1:
       user_search = raw_input('请输入需要查询的backend编号:')
       yes_search_type = func_isdigit(user_search)
       if not yes_search_type or yes_search_type>len(list_main):
           print '输入有误,请重新输入!'
       else:
           func_search(yes_search_type, file)  # 查询函数
   elif yes_type == 2:
       add_type = func_add(file) #添加函数
       if add_type:
           print '添加成功'
       else:
           print '添加失败'
   elif yes_type == 3:
       func_change(file) #修改函数
   elif yes_type == 4:
       user_delete = raw_input('请输入需要删除的backend编号:')
       delete_type= func_isdigit(user_delete)
       if not delete_type or delete_type>len(list_main):
           print '输入有误,请重新输入!'
       else:
           if func_delete(delete_type,file): #删除函数
               print '删除成功'
           else:
               print '删除失败'

   elif yes_type == 5:
       print '即将退出程序'
       func_exit() #退出进度条
       exit()
   else:
       print '输入编码有误,请重新输入!'
       continue