需求:python
1.使python具体增删查的功能。git
haproxy的配置文件。app
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 oldboy.org bind 0.0.0.0:80 option httplog option httpclose option forwardfor log global acl www hdr_reg(host) -i www.oldboy.org use_backend www.oldboy.org if www backend www.oldboy.org server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
import os,re,sys from collections import defaultdict,OrderedDict conf = "haproxy.cfg" conf_new = "haproxy.cfg.new" backend_list = [] server_dict= {} show_dict = {} backend_name_dict = {} server_info= [] server_flag = False ###初始化server判断标志位### with open(conf,'r') as ha: ###打开haproxy配置文件### for line in ha: line = line.strip('\n') if re.match('backend',line): ###匹配配置文件以backend开头的行### backend_name = re.split('\s+',line)[1] backend_list.append(backend_name) server_info1 = [] server_flag = True ###赋值标志位为真,用来与server关联### elif server_flag and re.match('\s+server',line): ###匹配配置文件以server开头的行### server_info = re.split('\s+',line) server_info.remove('') server_info1.append(server_info) server_dict['server'] = server_info[1] server_dict['weight'] = server_info[4] server_dict['maxconn'] = server_info[5] backend_name_dict[backend_name] = "name" backend_name_dict[backend_name] = server_info1 else: server_flag = False #循环 options_list = ["1.查询backend","2.删除backend","3.新增backend","5.退出"] while True: for i in options_list: print(i) find = (input("\033[94m请选择操做条目序号:\033[0m")) if find.isdigit(): find = int((find)) #1是查询 if find == 1: for i, ele in enumerate(backend_list): print(i, ele) find1 = input("请输入您要查询的backend的序号:") find1 = int(find1) for j in range(1): print("==========%s============" %backend_list[find1]) for i in backend_name_dict[backend_list[find1]]: print("server %s weigt %s maxconn %s" %(i[1],i[3],i[5])) #2是删除 elif find == 2: for i, ele in enumerate(backend_list): print(i, ele) find3 = int(input("请选择您要删除backend的序号:")) server_show = [] for i, ele in enumerate(backend_name_dict[backend_list[find3]]): server_show.append("server %s weight %s maxconn %s" % (ele[1], ele[3], ele[5])) print(i, "server %s weight %s maxconn %s" % (ele[1], ele[3], ele[5])) server_show1= str(server_show[0]) print(server_show1) f = open(conf, "r") f1 = open(conf_new, "a+") for i in f: if server_show1 in i: i = i.replace(server_show1, "") f1.write(i) f1.flush() f.close() f1.close() os.remove(conf) os.rename(conf_new, conf) backend_list1 = [] backend_list1.append("backend %s" %(backend_list[find3])) backend_list2 = str(backend_list1[0]) f = open(conf, "r") f1 = open(conf_new, "a+") for i in f: if backend_list2 in i: i = i.replace(backend_list2, "") f1.write(i) f1.flush() f.close() f1.close() os.remove(conf) os.rename(conf_new, conf) print("删除成功!!!") #3是增长 elif find == 3: arg = [] backend_name1 = [] backend_list3 = [] input_back = input("\033[94m请输入backend(www.orgboy.org):\033[0m") arg.append("backend %s" %input_back) input_server = input("\033[94m请输入server(127.0.0.1):\033[0m") input_weight = input("\033[94m请输入weight(20):\033[0m") # arg["weight"] = input_weight input_maxconn = input("\033[94m请输入maxconn(3000):\033[0m") arg.append(" server %s weight %s maxconn %s" %(input_server,input_weight,input_maxconn)) backend_name1 = str(arg[0]) f = open(conf, "a+") f.write("%s \n" %backend_name1) f.flush() f.close() backend_list3 = arg[1] backend_list3 = str(backend_list3) f = open(conf, "a+") f.write("%s \n" %backend_list3) f.close() print("添加成功!!!") #5是退出 elif find == 5: exit() else: print("\033[91m请输入正确的序号\033[0m") continue