修改haproxy配置文件 基本功能:1.獲取記錄2.添加記錄3.刪除記錄 代碼結構:三個函數一個主函數 知識點:1.python簡單數據結構的使用:列表、字典等 2.python兩個模塊的使用:os和json a.os.rename('文件1','文件2') b.json完成自動識別字典、列表,並
修改haproxy配置文件
基本功能:
1.獲取記錄
2.添加記錄
3.刪除記錄
代碼結構:
三個函數一個主函數
知識點:
1.python簡單數據結構的使用:列表、字典等
2.python兩個模塊的使用:os和json
a.os.rename('文件1','文件2')
b.json完成自動識別字典、列表,並識別後進行自動轉換
3.python函數的定義和調用
4.標誌位的靈活運用:flag和haswrite分別用於找backend的record和判斷是否已經將記錄寫入到文件
5.python基本語法的使用:for迴圈、if...else....判斷
6.python文件的操作的基本使用:with open('文件1','模式') as obj1,open('文件2','模式') as obj2
流程圖:
代碼:
#!/usr/bin/env python3 #antuor:Alan import os import json """ 把文件按從上到下的順序分為上部分,要處理部分,下部分; step1: 上部分從原配置文件寫入-->新配置文件 step2: 遇到要處理部分則寫入-->fetch_list step3: 下部分從原配置文件寫入-->新配置文件 step4: fetch_list入-->新配置文件 """ def fetch(backend): ###定義fetch函數,並同時傳入我們指定backend參數,此參數代表backend名 flag = False ###定義flag為False,目的是為了後面是否取可用的backend fetch_list=[] ###定義空列表,目的是為了後面將取出的backend信息存儲在此列表裡面 with open('配置文件.txt') as obj: ###打開配置文件 for line in obj: ###一行行讀取 if line.strip() == "backend %s" %(backend): ###line.stri()去掉空格和換行符 flag = True ###讀到要取的記錄flage改為True continue ###結束本次迴圈,下麵代碼不執行,開始新的迴圈 if flag and line.strip().startswith('backend'): ###如果已經取到記錄,則又讀到backend開頭的數據則不取 flag=False if flag and line.strip(): ###判斷flag為True,且不是空行(布爾值非空是True) fetch_list.append(line.strip()) ###把數據加入列表 return fetch_list ###返回值 def add1(dict_info): ###定義add1函數,同時傳入參數dict_info,字典參數裡面包含要傳入的server信息 backend_title = dict_info.get("backend") ###插入的backend的名稱(變數初始化) context_title = "backend %s" %(backend_title) ###插入backend整個欄位(變數初始化) record_title = dict_info["record"] ###要插入的記錄(變數初始化) context_record = "server %s %s weight %s maxconn %s" %(record_title["server"],record_title["server"],record_title["weight"],record_title["maxconn"]) fetch_list=fetch(backend_title) ###把讀取的記錄放入列表(變數初始化) if fetch_list: ###判斷列表是否為空 flag=False ###標誌位 has_write = False ###標誌位 with open('配置文件.txt','r') as read_obj,open('新配置文件.txt','w') as write_obj: for line in read_obj: if line.strip() == context_title: write_obj.write("\n"+line) flag=True continue if flag and line.startswith('backend'): ###flag為True,如果在讀到backend信息,則不處理 flag = False if flag: for new_line in fetch_list: if not has_write: temp = "%s%s" %(" "*8,new_line) ###把列表的記錄賦值給temp write_obj.write(temp) has_write=True else: write_obj.write(line) else: ###如果fetch_list為空 with open('配置文件.txt') as read_obj,open('新配置文件.txt','w') as write_obj: for line in read_obj: write_obj.write(line) write_obj.write("\n"+context_title+"\n") temp=" "*8+context_record+"\n" write_obj.write(temp) os.rename('配置文件.txt','配置文件.txt') ###將原文件配置文件改名備用文件為配置文件b os.rename('新配置文件.txt','配置文件.txt') ###將新配置文件改名為配置文件 def delete(dict_info): ###刪除函數 del_backend = dict_info["backend"] del_record = dict_info["record"] context_title = "backend %s" %(del_backend) context_record = "server %s %s weight %s maxconn %s" %(del_record["server"],del_record["server"],del_record["weight"],del_record["maxconn"]) fetch_list = fetch(del_backend) if not fetch_list: return else: if context_record not in fetch_list: print ("your server message is not exists") return else: fetch_list.remove(context_record) with open('配置文件.txt','r') as read_obj,open('新配置文件.txt','w') as write_obj: flag = False has_write = False for line in read_obj: if line.strip() == context_title: write_obj.write(line) flag = True continue if flag and line.startswith('backend'): flag = False if flag: if not has_write: print (fetch_list) for new_line in fetch_list: temp = "%s%s\n" %(" "*8,new_line) write_obj.write(temp) has_write = True else: write_obj.write(line) os.rename('配置文件.txt','配置文件.txt') os.rename('新配置文件.txt','配置文件.txt') s='{"backend":"ttt.oldboy.org","record":{"server":"100.1.7.9","weight":"20","maxconn":"3000"}}' ###要添加的記錄信息 if __name__ == "__main__": ###主函數,入口 print (u"1.獲取記錄\n2.添加記錄\n3.刪除記錄\n") ###獲取用戶的操作選擇 select_num=input("請輸入需要進行的操作編號:") if select_num == "1": ###根據用戶的選擇,進行調用函數 backend = input("請輸入backend信息:") fetch_list = fetch(backend) for i in fetch_list: print ("配置信息:%s" % i) else: print ("請按以下格式輸入:") print ('{"backend":"ttt.oldboy.org","record":{"server":"100.1.7.9","weight":"20","maxconn":"3000"}}') data_str = input("請輸入信息>>>") data_dict = json.loads(data_str) if select_num == "2": add1(data_dict) elif select_num == "3": delete(data_dict) else: print ("輸入有誤!!!!!")