Python 03 基礎作業
阿新 • • 發佈:2017-05-26
配置文件 python return import
操作haproxy配置文件
#!/usr/bin/env python# -*- coding: utf-8 -*-import re,sys,os,time,platformfrom collections import defaultdict,OrderedDict conf = "haproxy.cfg"jgf = ‘‘def input_handle(s): if str.isdigit(s): s = int(s) return sdef backend_read(conf): show_dict = {} backend_list = [] backend_name_dict = defaultdict(list) with open(conf, "r") as ha_file: for line in ha_file: line = line.strip("\n") if re.match(‘backend‘, line): backend = line.split()[1] backend_list.append(backend) elif re.match(‘\s+server‘, line): server = line.split() server_dic = OrderedDict() server_dic["name"] = server[1] server_dic["address"] = server[2] server_dic["weight"] = server[4] server_dic["maxconn"] = server[6] backend_name_dict[backend].append(server_dic) for k,v in enumerate(backend_list, 1): show_dict[k] = v print(‘%d . %s‘ % (k, v)) return (show_dict,backend_name_dict)def backend_server_show(backend_show_value,server_show_dict): print(jgf.center(70,‘=‘)) print(‘\033[1m後端服務器信(%s)息如下:\033[0m‘ %backend_show_value) print(‘\033[31;1m%-20s %-20s %-20s %-20s\033[0m‘ % (‘name‘, ‘addres‘, ‘weight‘, ‘maxconn‘)) server_list = server_show_dict[backend_show_value] for v in server_list: n = list(v.values()) print(‘\033[32;1m%-20s %-20s %-20s %-20s\033[1m‘ % (n[0], n[1], n[2], n[3])) print(jgf.center(60, ‘=‘))def name_decide(): (name,name_flag) = (‘‘,True) while name_flag: name_input = input(‘\033[32m請輸入新服務器名(退出輸入q):\033[0m‘) if len(name_input) == 0: continue elif name_input == ‘q‘: name_flag = False sys.exit(‘\033[32m腳本已退出!\033[1m‘) elif re.match(‘[0-9a-zA-Z\_]+‘,name_input): name = name_input name_flag = False else: print(‘\033[31m名稱輸入錯誤,請重新輸入!!!\033[0m‘) return (name)def ipaddress_decide(): (address,address_flag) = (‘‘,True) while address_flag: address_input = input(‘\033[32m請輸入新IP(退出輸入q):\033[0m‘) if len(address_input) == 0: continue elif address_input == ‘q‘: address_flag = False sys.exit(‘\033[32;1m腳本已退出!\033[1m‘) elif re.match(‘(25[0-5]|2[0-4]\d|[0-1]?\d\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}(\:\d{1,5})?$‘,address_input): address = address_input address_flag = False else: print(‘\033[31m地址輸入錯誤,請重新輸入!!!\033[0m‘) return (address)def number_decide(name): (number,number_flag) = (‘‘,True) while number_flag: number_input = input(‘\033[32m請輸入%s(數字)(退出輸入q):\033[0m‘ % name) if len(number_input) == 0: continue elif number_input == ‘q‘: number_flag = False sys.exit(‘\033[32;1m腳本已退出!\033[32;1m‘) else: try: int(number_input) except: print(‘033[31;1m%s輸入類型錯誤,請重新輸入!!!\033[0m‘ % name) else: number = number_input number_flag = False return (number)def backend_input_if(input_index,input_dict): (input_name,input_flag) = (‘‘,True) if len(input_index) != 0: input_index = input_handle(input_index) if input_index == ‘b‘: input_flag = False elif input_index in input_dict.keys(): input_name = input_dict[input_index] elif input_index in input_dict.values(): input_name = input_index else: input_name = ‘‘ return (input_name,input_flag)def backend_server_handle(conf,handle_dict): newfile = ‘%s.new‘ % conf server_flag = False with open(conf,‘r‘) as read_file,open(newfile,‘w‘) as write_file: for line in read_file: if re.match(‘backend‘,line): write_file.write(line) backend_name = line.split()[1] for server_dict in handle_dict[backend_name]: server_line = ‘\tserver {name} {address} weight {weight} maxconn {maxconn} \n‘ write_file.write(server_line.format(**server_dict)) server_flag = True elif server_flag and re.match(‘\s+server‘,line): pass else: write_file.write(line) server_flag = False print(‘\033[33;1m server更新成功\033[0m‘) system = platform.system() if system == ‘Windows‘: os.system(‘move %s %s.bak‘ % (conf, conf)) os.system(‘move %s %s‘ % (newfile, conf)) elif system == ‘Linux‘: os.system(‘mv %s %s.bak‘ %(conf,conf)) os.system(‘mv %s %s‘ %(newfile,conf))if __name__ == ‘__main__‘: flag = True backend_name = ‘‘ haproxy_name_show_dict = {} haproxy_server_show_dict = {} while flag: print(jgf.center(60,‘=‘)) hy=‘\033[36m歡迎訪問haproxy配置文件管理腳本\033[0m‘ print(hy.center(60,‘*‘)) print(‘\033[1mbackend列表信息如下:‘) (haproxy_name_show_dict, haproxy_server_show_dict) = backend_read(conf) print(jgf.center(50,‘=‘)) time.sleep(1) print(‘‘‘ \033[35;1m1.查詢後端服務\033[0m \033[34;1m 2.添加後端服務\033[0m \033[33;1m 3.修改後端服務\033[0m \033[31;1m 4.刪除後端服務\033[0m \033[32;1m 5.退出\033[0m‘‘‘) print(jgf.center(60,‘=‘)) select_num = input(‘\033[35;1m請選擇操作條目:\033[0m‘) if select_num == ‘1‘: query_flag = True while query_flag: backend_index = input(‘\033[31;1m請輸入需要查詢的backend編號名稱(返回上級菜單輸入b,退出輸入q):\033[0m‘) (backend_name,query_flag) = backend_input_if(backend_index,haproxy_name_show_dict) if backend_name: backend_server_show(backend_name,haproxy_server_show_dict) elif backend_index == ‘b‘: break elif backend_index == ‘q‘: sys.exit(‘\033[35;1m退出腳本!\033[0m‘) else: query_flag = False print(‘\033[31;1m您輸入的節點不存在!請重新輸入!‘) time.sleep(1) if select_num == ‘2‘: add_flag = True while add_flag: backend_index = input(‘\033[32;1m請輸入添加的backend編號或者名稱(返回上級菜單請輸入b: \033[0m)‘) (backend_name,add_flag) = backend_input_if(backend_index,haproxy_name_show_dict) if backend_name: backend_server_show(backend_name,haproxy_server_show_dict) add_server_dict = OrderedDict() print(‘\033[34;1m請依次輸入後端服務信息(name,address,wight,maxconn):\033[0m‘) add_server_dict[‘name‘] = name_decide() add_server_dict[‘address‘] = ipaddress_decide() add_server_dict[‘weight‘] = number_decide(‘權重值‘) add_server_dict[‘maxconn‘] = number_decide(‘最大連接數‘) print(add_server_dict[‘name‘],add_server_dict[‘address‘],add_server_dict[‘weight‘],add_server_dict[‘maxconn‘]) if add_server_dict[‘name‘] and add_server_dict[‘address‘] and add_server_dict[‘weight‘] and add_server_dict[‘maxconn‘]: add_commit = input(‘\033[31;1m請確認是否添加此條目(y | n):\033[0m‘) if add_commit == ‘y‘: haproxy_server_show_dict[backend_name].append(add_server_dict) backend_server_handle(conf,haproxy_server_show_dict) else: add_flag = False else: print(‘\033[31;1m server信息輸入有誤,請重新輸入!!!\033[0m‘) time.sleep(2) if select_num == ‘3‘: backend_modify_flag = True while backend_modify_flag: backend_index = input(‘\033[32;1m請輸入修改的backend的編號或名稱(返回上級菜單,請輸入b): \033[0m‘) (backend_name,backend_modify_flag) = backend_input_if(backend_index,haproxy_name_show_dict) if backend_name: backend_server_show(backend_name,haproxy_server_show_dict) server_modify_flag = True while server_modify_flag: server_index = input(‘\033[32;1m請輸入修改的server的編號(返回上級菜單,請輸入b): \033[0m‘) if len(server_index) != 0: server_index = input_handle(server_index) if server_index ==‘b‘: server_modify_flag = False elif server_index >= 1 and server_index <= len(haproxy_server_show_dict[backend_name]): modify_server_dict = OrderedDict() print(‘\033[34;1m請以此輸入後端服務信息(name,address,weight,maxconn): \033[0m‘) modify_server_dict[‘name‘] = name_decide() modify_server_dict[‘address‘] = ipaddress_decide() modify_server_dict[‘weight‘] = number_decide(‘權重值‘) modify_server_dict[‘maxconn‘] = number_decide(‘最大連接數‘) print(modify_server_dict[‘name‘],modify_server_dict[‘address‘],modify_server_dict[‘weight‘],modify_server_dict[‘maxconn‘]) if modify_server_dict[‘name‘] and modify_server_dict[‘address‘] and modify_server_dict[‘weight‘] and modify_server_dict[‘maxconn‘]: modify_commit = input(‘\033[32;1m請確認是否修改此條目(y|n):\033[0m‘) if modify_commit == ‘y‘: haproxy_server_show_dict[backend_name][server_index - 1] = modify_server_dict backend_server_handle(conf,haproxy_server_show_dict) modify_server_flag = False else: modify_server_flag = False else: print(‘\033[31m server輸入信息有誤,請重新輸入!!!\033[0m‘) else: print(‘\033[31m server編號輸入錯誤,請重新輸入!!!\033[0m‘) if select_num == ‘4‘: backend_delete_flag = True while backend_delete_flag: backend_index = input(‘\033[32;1m請輸入刪除的backend下條目編號或名稱(返回上層菜單,請輸入b): \033[0m‘) (backend_name,backend_delete_flag) = backend_input_if(backend_index,haproxy_name_show_dict) if backend_name: backend_server_show(backend_name,haproxy_server_show_dict) server_delete_flag = True while server_delete_flag: server_index = input(‘\033[32;1m請輸入要刪除的server編號(返回上層菜單,請輸入b): \033[0m‘) if len(server_index) != 0: server_index = input_handle(server_index) if server_index == ‘b‘: server_delete_flag = False elif server_index >= 1 and server_index <= len(haproxy_server_show_dict[backend_name]): print(haproxy_server_show_dict[backend_name][server_index - 1]) delete_commit = input(‘請確認是否刪除此條目(y|n):‘) if delete_commit == ‘y‘: del haproxy_server_show_dict[backend_name][server_index -1] backend_server_handle(conf,haproxy_server_show_dict) delete_server_flag = False else: delete_server_flag = False else: print(‘\033[31m server編號輸入錯誤,請重新輸入!!!\033[0m‘) if select_num == ‘5‘: print(‘\033[31;1m程序將退出,歡迎再次使用,謝謝!\033[0m‘) time.sleep(1)print(‘\033[31;1m程序退出‘) sys.exit()
本文出自 “python改變世界” 博客,請務必保留此出處http://python88.blog.51cto.com/12933681/1929821
Python 03 基礎作業