第三周:HAproxy配置文件操作

作业

HAproxy配置文件操作:

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

2. 可添加backend 和sever信息

3. 可修改backend 和sever信息

4. 可删除backend 和sever信息

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

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

#Author xq
import os
import shutil
import time

def f_new(f_src):
    print(" 开始执行新建函数".center(60,‘*‘))
    f_input = open(‘../db/HAproxyNew‘, ‘w‘)
    with open(f_src,‘r‘,encoding=‘utf-8‘) as f_output:
        for line in f_output:
            if  line.lstrip().startswith(‘backend‘) == True:
                continue
            elif  line.lstrip().startswith(‘server‘) == True:
                continue
            else:
                f_input.write(line)
    f_input.close()
    return None

def f_dic(filename):
    backend_dic={}
    server_dic={}
    server_list=[]
    with open(filename,‘r+‘,encoding=‘utf-8‘) as f_src:
        for line in f_src:
            line=line.strip()
            if line.startswith(‘backend‘) == True:
                backend_name = line.split()[1]
            #    backend_list.append(backend_name)
                server_list = []
            elif line.startswith(‘server‘) == True:
                server_dic[‘server‘] = line.split()[1]
                server_dic[‘weight‘] = line.split()[3]
                server_dic[‘maxconn‘] = line.split()[5]
                server_list.append(server_dic.copy())
                backend_dic[backend_name] = server_list
    return backend_dic

def f_backend_list(backend_dic):
    backend_list=[]
    for k in backend_dic.keys():
        backend_name=k
        backend_list.append(backend_name)
    return  backend_list

def backend_list_show(backend_list,backend_dic):
    print("backend列表如下".center(60,‘*‘))
    backend_show_dict = {}
    for k,v in enumerate(backend_list):
        print(k,v)
        backend_show_dict[k] = v
    return backend_show_dict

def server_show(backend_show_dict,backend_dic,choice):
    print("查询结果如下".center(60,‘*‘))
    show_name=backend_show_dict[int(choice)]
    #print(backend_dic.values())
    print("backend",show_name)
    print(‘\tserver‘,backend_dic[show_name][0][‘server‘],end=‘ ‘)
    print(‘\tweight‘,backend_dic[show_name][0][‘weight‘],end=‘ ‘)
    print(‘\tmaxconn‘,backend_dic[show_name][0][‘maxconn‘],end=‘ ‘)
    print("\n",end=‘ ‘)

def backend_insert(backend_dic):
    print("增加结果如下".center(60,‘*‘))
    while True:
        i_choice=input("继续增加backend节点:y;  退出:q;")
        if i_choice == ‘y‘:
            backend_new={}
            server_list=[]
            backend_name_new=input("请输入增加的backend名称:")
            backend_new[‘server‘]=input("请输入%s下新增server值:"%backend_name_new)
            backend_new[‘weight‘]=input("请输入%s下新增weight值:"%backend_name_new)
            backend_new[‘maxconn‘]=input("请输入%s下新增maxconn值:"%backend_name_new)
            if backend_name_new in backend_dic.keys():
                print("节点已存在")
                #if backend_new[‘server‘] in backend_dic.values():
                    #print(backend_dic[backend_name_new][0][k])
                if backend_new[‘server‘] == backend_dic[backend_name_new][0][‘server‘]:
                    print(‘IP已存在,只修改weight、maxconn的值‘)
                    backend_dic[backend_name_new][0][‘weight‘]=backend_new[‘weight‘]
                    backend_dic[backend_name_new][0][‘maxconn‘]=backend_new[‘maxconn‘]
            else:
                print("新增的server信息如下:\n%s"%backend_new)
                server_list.append(backend_new.copy())
                backend_dic[backend_name_new]=server_list
        elif i_choice == ‘q‘:
            break
        else :
            print("输入错误,请重新输入")
            continue
    print("新增操作后,字典内容",backend_dic)
    return

def backend_del(backend_show_dict,backend_dic,choice):
    print("删除结果如下".center(60,‘*‘))
    show_name=backend_show_dict[int(choice)]
    while True:
        del_choice=input("删除此backend名称:y;  删除此backend下的server信息:s; 退出:q;")
        if del_choice == ‘y‘:
            del backend_dic[show_name]
            break
        elif del_choice == ‘s‘:
            for k in backend_dic[show_name][0].keys():
                print(k, backend_dic[show_name][0][k])
                option=input("进行选择,删除:y; 跳过:p;退出:q;")
                if option == ‘y‘:
                    print(backend_dic[show_name][0])
                    backend_dic[show_name][0][k]=‘‘
                    continue
                elif option == ‘p‘:
                    continue
                elif option == ‘q‘:
                    break
                else:
                    print("输入错误,请重新输入")
                    continue
            break
        elif del_choice == ‘q‘:
            break
        else:
            print("输入错误,请重新输入")
            continue
    print("\n删除后,字典内容:",backend_dic)
    return backend_dic

def backend_update(backend_show_dict,backend_dic,choice):
    print("输入修改内容".center(60,‘*‘))
    show_name=backend_show_dict[int(choice)]
    old_name=backend_show_dict[int(choice)]
    print("backend",show_name)
    while True:
        g=input("修改此backend名称,修改:y;跳过:p;")
        if g == ‘y‘:
            backend_name_new=input("请输入新的backend名称:")
            print("修改backend名称前,字典内容",backend_dic)
            backend_dic[backend_name_new]=backend_dic.pop(old_name)# pop()如果为空则默认为-1最后一项。dict2.pop(‘name‘)删除并返回键为“name”的条目
            show_name=backend_name_new
            print("修改backend名称后,字典内容",backend_dic)
            break
        elif g == ‘p‘:
            break
        else:
            print("输入的选项格式错误,请重新输入")
            continue
    next=input("继续修改server的值,继续:y;返回:任意键;")
    if next == ‘y‘:
        for k in backend_dic[show_name][0].keys():
            print(k, backend_dic[show_name][0][k])
            option=input("进行选择,修改:y; 跳过:p;")
            if option == ‘y‘:
                backend_dic[show_name][0][k]=input("请输入新的值%s:"%k)
                continue
            elif option == ‘p‘:
                continue
            else:
                print("输入的选项格式错误,请重新输入")
                continue
    else:
        print("此backend:%s修改完成"%show_name)
    print("更新后的字典:",backend_dic)
    return

def  f_Writeback(backend_dic,f_target) :
    print(" 开始执行回写函数".center(60,‘*‘))
    print(‘打印配置文件backend节点内容‘.center(50,‘-‘))
    with open(f_target,‘a+‘,encoding=‘utf-8‘) as f_input:
        for key in backend_dic.keys():
            print("\nbackend",key,file=f_input)
            print(‘\tserver‘,backend_dic[key][0][‘server‘],end=‘ ‘,file=f_input)
            print(‘\tweight‘,backend_dic[key][0][‘weight‘],end=‘ ‘,file=f_input)
            print(‘\tmaxconn‘,backend_dic[key][0][‘maxconn‘],end=‘ ‘,file=f_input)
        print("\n",end=‘ ‘)
    return None

#主程序开始
print("主程序开始,请输入您要对配置文件进行的操作".center(60,‘*‘))
b=f_dic(‘../db/HAproxy‘)
while True:
    choice = input("i:查询;o:操作(增加、删除、修改);q:退出;请输入您的选择:")
    a=f_backend_list(b)
    if choice == ‘i‘:
        print("查询操作界面".center(100,‘#‘))
        c=backend_list_show(a,b)
        choice=input("展示此backend的server信息,请选择序号:")
        server_show(c,b,choice)
        continue
    elif choice == ‘q‘:
        f_new(‘../db/HAproxy‘)
        f_Writeback(b,‘../db/HAproxyNew‘)
        if (os.path.exists(‘../db/HAproxy‘)):
            print("文件存在,进行删除")
            os.remove(‘../db/HAproxy‘)
        os.rename(‘../db/HAproxyNew‘,‘../db/HAproxy‘)
        exit()
    elif choice == ‘o‘:
        shutil.copyfile(‘../db/HAproxy‘,‘../db/‘+‘HAproxy‘+time.strftime(‘%Y-%m-%d‘,time.localtime(time.time())))
        #输入选择
        print("请选择操作内容")
        while True:
            choice_operation = input("a:新增;u:更新;d:删除;请选择您要进行的操作:")
            if choice_operation == ‘a‘:
                print("新增操作界面".center(100,‘#‘))
                print("请输入新增内容")
                backend_insert(b)
                break
            elif choice_operation == ‘u‘:
                print("更新操作界面".center(100,‘#‘))
                c=backend_list_show(a,b)
                choice=input("请选择您要修改的backend节点:")
                backend_update(c,b,choice)
                break
            elif choice_operation == ‘d‘:
                print("删除操作界面".center(100,‘#‘))
                c=backend_list_show(a,b)#调用展示列表函数
                choice=input("请选择您要进行删除操作的backend序号:")
                backend_del(c,b,choice)
                break
            else:
                print("输入的选项格式错误,请重新输入")
                continue
        continue
    else:
        print("输入的选项格式错误,请重新输入")
        continue

时间: 2024-10-01 04:16:42

第三周:HAproxy配置文件操作的相关文章

python之haproxy配置文件操作(第三天)

作业: 对haproxy配置文件进行操作 要求: 对haproxy配置文件中backend下的server实现增删改查的功能 一.这个程序有二个版本 1. python2.7版本见haproxy_python27.py 2. python3.4版本见haproxy_python34.py 二.具体实现了如下功能: 1.输入1,进入backend菜单,查询server信息 2.输入2,进入backend菜单,添加server条目 3.输入3,进入backend菜单,选择server条目,进入修改环

初学 python 之 HAproxy配置文件操作

HAproxy配置文件操作: 1. 根据用户输入输出对应的backend下的server信息 2. 可添加backend 和sever信息 3. 可修改backend 和sever信息 4. 可删除backend 和sever信息 5. 操作配置文件前进行备份 6 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建:若信息与已有信息重复则不操作 配置文件 参考 http://www.cnblogs.com/alex3714/articles/5717620.html

HAproxy配置文件操作

要求 1. 根据用户输入输出对应的backend下的server信息2. 可添加backend 和sever信息3. 可修改backend 和sever信息4. 可删除backend 和sever信息5. 操作配置文件前进行备份6 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建:若信息与已有信息重复则不操作 1 def find(backend): 2 ''' 3 查看backend下sever信息 4 :param backend: 5 :return: 6 '

python系统学习:第三周之文件操作

# ***********第一部分***********# 1.读文件,首先利用一个变量承装文件 最主要注意的是encoding的问题,看看是否是格式问题f = open(file='D:\study\少妇白洁.txt', mode='r', encoding='GBK') # file等关键字可以直接省略 mode 指模式# 对变量使用方法read进行读取data = f.read()# 输出print(data)# 关闭f.close()# ***********第二部分**********

第三周作业 修改配置文件

HAproxy配置文件操作 1. 根据用户输入输出对应的backend下的server信息 2. 可添加backend 和sever信息 3. 可修改backend 和sever信息 4. 可删除backend 和sever信息 5. 操作配置文件前进行备份 6 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建:若信息与已有信息重复则不操作 流程图: 配置文件信息如下 global log 127.0.0.1 local2 daemon maxconn 256 lo

修改haproxy配置文件

HAproxy配置文件操作: 1. 根据用户输入输出对应的backend下的server信息 2. 可添加backend 和sever信息,如果存在则不添加,不修改 4. 可删除backend 和sever信息 5. 首先选择要进入哪种模式(查询,增加,删除),按q退出整个操作,在某种模式内时按b退出重新选择,不退出则 一直处于某种模式内 #Auther:He Jianhan #查def hanshu(names,fliens): print(fliens[names].rstrip()) if

python练习_module01-3-haproxy配置文件操作

haproxy配置文件操作 haproxy 配置文件示例: global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 infodefaults log global mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms option dontlognull listen stats :8888 stats enabl

三周第一次课 2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2

三周第一次课2.27linux和windows互传文件3.1 用户配置文件和密码配置文件3.2 用户组管理3.3 用户管理 2.27linux和windows互传文件首先要安装lrzsz 这个包 sz 文件名 把文件传送到win系统上 可以在win中指定目录 rz 把win系统上的文件传送到linux系统上面 传到当前目录里 具体安装步骤安装前提必须使用 xshell或者 securecrt putty不可以 3.1 用户配置文件和密码配置文件 用户配置文件 专门用来控制用户密码的 ls /et

Linux 三周第一次课(4月2日)Linux,windows 互传文件 用户配置文件密码 组管理

三周第一次课(4月2日) 2.27linux和windows互传文件3.1 用户配置文件和密码配置文件3.2 用户组管理3.3 用户管理 Linux和windows文件互传 我通常使用的是ftp或者是其他文件管理方式 这里介绍一个办法,但是只能在xshell下使用, 安装 lrzsz工具包 安装好了之后就可以使用sz命令 +要传输的文件 如果是想从windows往linux传就可以使用 rz命令 overall 总结 可以使用xshell securecrt 不能使用putty 安装lrzsz工