第三周作業:修改haproxy配置文件
阿新 • • 發佈:2018-06-30
div 作業 元素 oos with 取出 rate please 信息
修改haproxy配置文件 只需要寫刪除 增加 查詢,修改暫時不寫 需求: 1、查 輸入:www.oldboy.org 獲取當前backend下的所有記錄 2、新建 輸入: arg = { ‘bakend‘: ‘www.oldboy.org‘, ‘record‘:{ ‘server‘: ‘100.1.7.9‘, ‘weight‘: 20, ‘maxconn‘: 30 } }3、刪除 輸入: arg = { ‘bakend‘: ‘www.oldboy.org‘, ‘record‘:{ ‘server‘: ‘100.1.7.9‘, ‘weight‘: 20, ‘maxconn‘: 30 } } 原配置文件 global log 127.0.0.1 local2 daemon maxconn 256 log127.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 bind0.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
#代碼部分: print("1. Search \n2. Add \n3. Delete") choose = input("Please choose:") if choose == "1": search = input("search:") search = "backend " + search # 只需要輸入網址,後面做完全匹配 with open("haproxy","r",encoding="utf-8") as f: for line in f: # 叠代器中循環 if search == line.strip(): print(line.strip()) print(f.readline().strip()) # 讀取符合搜索條件的下一行,即配置信息,完成搜索功能 elif choose == "2": add_server = eval(input("Please add new server config:")) # 這裏在輸入配置的時候,不能換行,所以弄成一行. eval()函數將字符串轉換成字典數據類型。{‘backend‘:‘www.oldboy.org‘,‘record‘:{‘server‘:‘100.1.7.9‘,‘weight‘:20,‘maxconn‘:30}} #print(add_server) with open("haproxy","a",encoding="utf-8") as f: f.write("backend {backend}\n".format(backend = add_server[‘backend‘])) f.write(" server {server} {server} weight {weight} maxconn {maxconn}\n".format(server = add_server[‘record‘][‘server‘],weight = add_server[‘record‘][‘weight‘],maxconn = add_server[‘record‘][‘maxconn‘])) print("Add, ok.") elif choose == "3": #print("delete") delete_server = eval(input("Please delete server config:")) # 輸入:{‘backend‘:‘www.oldboy.org‘,‘record‘:{‘server‘:‘100.1.7.9‘,‘weight‘:20,‘maxconn‘:30}} backend_delete = delete_server[‘backend‘] # 逐個取出需要匹配的元素 server_delete = delete_server[‘record‘][‘server‘] weight_delete = delete_server[‘record‘][‘weight‘] maxconn_delete = delete_server[‘record‘][‘maxconn‘] with open("haproxy","r",encoding="utf-8") as f: haproxy_lines = f.readlines() # 將配置文件直接全部讀入到列表,因為配置文件比較小,就這樣幹了 backend_delete_backend = "backend "+backend_delete # 拼接後是這樣的:backend www.oldboy.org delete_index = list() # 定義一個空列表,用來裝即將要刪除的元素下標 for index,line in enumerate(haproxy_lines): if backend_delete_backend == line.strip(): # 先用backend www.oldboy.org來查找,後面再進行配置文件的完全匹配 delete_record = haproxy_lines[index+1].strip().split(" ") # server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000 轉化成了列表 #print(delete_record) [‘server‘, ‘100.1.7.9‘, ‘100.1.7.9‘, ‘weight‘, ‘20‘, ‘maxconn‘, ‘3000‘] if delete_record[1] == server_delete and int(delete_record[4]) == weight_delete and int(delete_record[6]) == maxconn_delete: # 進行配置文件的完全匹配,符合條件的行索引加入delete_index列表 #print(index,line) delete_index.append(index) delete_index.append(index+1) #print(delete_index) # 得到待刪除行索引的列表[29, 30, 39, 40, 41, 42] count = 0 with open(‘haproxy‘,‘w‘,encoding=‘utf-8‘) as f: # 重寫配置文件,需要刪除的不寫入文件 for line in haproxy_lines: if count not in delete_index: #print(count, line) f.write(line) count += 1 print("Delete, OK.") else: print("Wrong choice.") exit()
第三周作業:修改haproxy配置文件