haproxy文件操作
阿新 • • 發佈:2017-05-25
record ddb 導入 sta eva 設置 nes 列表 rec
import os #導入os模塊
def search(): #定義查找函數
with open(‘haproxy.txt‘,‘r‘) as f: #只讀方式打開文件
value = input(‘請輸入您要查詢的信息:‘)
backend = ‘backend %s‘ % value #字符串拼接
records = [] #定義空列表
tag = False #將標簽設置為false
for line in f: #循環打開文件
if line.strip() == backend: #當line等於backend,將標簽改為true
tag = True
continue #跳出當前循環
if line.startswith(‘backend‘): #當line以backend開頭,跳出整個循環
break
if tag == True: #標簽為true,將line去除首尾空值,加入到records列表中
records.append(line.strip())
print(records) #打印列表
def add(): #定義add函數
adds = input(‘請輸入你要添加的內容:‘)
adds = eval(adds) #將adds轉換為集合
backend = ‘\nbackend %s \n‘ % adds[‘backend‘] #拼接字符串
record = ‘ server {server} {server} weight {weight} maxconn {maxconn}\n‘.format(
server = adds[‘record‘][‘server‘],
weight = adds[‘record‘][‘weight‘],
maxconn = adds[‘record‘][‘maxconn‘]
)
records =[] #定義records空列表
with open(‘haproxy.txt‘,‘r‘) as r_file,\
open(‘haproxy_add.txt‘,‘w+‘) as w_file: #只讀方式打開haproxy,生成新文件haproxy_add
tag = True #標簽設置為true
for r_line in r_file: #循環文件
if r_line.strip() == backend.strip(): #當兩個值相等,
tag = False #將標簽設為false
records = r_file.readlines() #並將這一行的後面所有值加入到records列表中
w_file.write(backend) #將backend寫入新文件
break #跳出for循環
w_file.write(r_line) #將r_line寫入新文件
if tag == True: #當tag為true時
w_file.write(backend) #寫入backend和record
w_file.write(record)
if tag == False: #當tag為false時
if record not in records: #如果record不在records列表內
records.insert(0,record) #把record的值加入到列表的第一個位置
for line in records: #遍歷records列表
w_file.write(line) #將列表的值寫入到新文件
os.rename(‘haproxy.txt‘,‘haproxy.addbak‘) #將文件備份
os.rename(‘haproxy_add.txt‘,‘haproxy.txt‘)
def remove(): #定義remove函數
removes = input(‘請輸入你要刪除的內容:‘)
removes = eval(removes) #將removes轉換為集合
backend = ‘\nbackend %s\n‘ % removes[‘backend‘] #拼接字符串
record = ‘ server {server} {server} weight {weight} maxconn {maxconn}\n‘.format(
server = removes[‘record‘][‘server‘],
weight = removes[‘record‘][‘weight‘],
maxconn = removes[‘record‘][‘maxconn‘]
)
with open(‘haproxy.txt‘,‘r‘) as r_file,\
open(‘haproxy_remove.txt‘,‘w+‘) as re_file: #只讀方式打開haproxy,生成新文件haproxy_remove
tag = True #定義標簽為True
for r_line in r_file: #遍歷文件
if backend.strip() == r_line.strip() or r_line.strip() == record.strip():
tag = False #當兩個字符串有一個等於r_line時,將標簽改為false
continue #跳出當前循環
if r_line.startswith(‘backend‘) or r_line.strip() != record.strip():
tag = True #當r_line開頭為backend或者record不等於r_line時,將標簽改為true
if tag == True: #當標簽為true,寫入新文件
re_file.write(r_line)
os.rename(‘haproxy.txt‘,‘haproxy.removbak‘) #備份文件
os.rename(‘haproxy_remove.txt‘,‘haproxy.txt‘)
def alter(): #定義alter函數
alters = input(‘請輸入你要修改的原的內容:‘)
alters_new = input(‘請輸入你要修改的新內容:‘)
alters = eval(alters) #將兩個值轉為字典
alters_new = eval(alters_new)
backend = ‘\nbackend %s\n‘ % alters[‘backend‘] #拼接字符串
record = ‘ server {server} {server} weight {weight} maxconn {maxconn}\n‘.format(
server=alters[‘record‘][‘server‘],
weight=alters[‘record‘][‘weight‘],
maxconn=alters[‘record‘][‘maxconn‘]
)
backends = ‘\nbackend %s\n‘ % alters_new[‘backend‘]
records = ‘ server {server} {server} weight {weight} maxconn {maxconn}\n‘.format(
server=alters_new[‘record‘][‘server‘],
weight=alters_new[‘record‘][‘weight‘],
maxconn=alters_new[‘record‘][‘maxconn‘]
)
with open(‘haproxy.txt‘, ‘r‘) as r_file, \
open(‘haproxy_alter.txt‘, ‘w+‘) as al_file: #只讀方式打開haproxy,生成新文件haproxy_alter
for r_line in r_file: #遍歷文件
if backend.strip() == r_line.strip(): #當原值為輸入的原值,修改為新值
r_line = r_line.replace(backend,backends)
if r_line.strip() == record.strip():
r_line = r_line.replace(record,records)
al_file.write(r_line) #寫入新文件
os.rename(‘haproxy.txt‘,‘haproxy.alterbak‘) #備份文件
os.rename(‘haproxy_alter.txt‘,‘haproxy.txt‘)
menu = [‘1.查找‘,‘2.新增‘,‘3.刪除‘,‘4.修改‘,‘q.退出‘] #定義菜單
menu_func = {‘1‘:search, #定義功能字典
‘2‘:add,
‘3‘:remove,
‘4‘:alter,
}
while True: #開始循環
print(‘-----------------------------------‘)
for i in menu: #打印菜單
print(i)
choise = input(‘請選擇您的操作方式(輸入對應編號):‘)
if choise.isdigit(): #判斷輸入是否為數字
if int(choise) <= len(menu_func) and int(choise) >0: #判斷輸入數字是否在菜單內
menu_func[choise]() #調用功能字典內對應數字的函數
else: #為數字但不再菜單內,提示
print(‘請輸入對應的編號!\n‘)
elif choise == ‘q‘: #輸入q退出
print(‘退出成功!‘)
break
else: #不為數字提示
print(‘請輸入對應的編號!\n‘)
作業有點亂,別噴我!!!!!我盡力了- -
haproxy文件操作