1. 程式人生 > >第三周作業:修改haproxy配置文件

第三周作業:修改haproxy配置文件

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 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

#代碼部分:
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配置文件