#_*_coding:utf-8_*_
importosdef file_handle(filename,backend_data,record_list=None,type='fetch'): #type:fetch append change
new_file=filename+'_new'bak_file=filename+'_bak'
if type == 'fetch':
r_list=[]
with open(filename,'r') as f:
tag=Falsefor line inf:if line.strip() ==backend_data:
tag=Truecontinue
if tag and line.startswith('backend'):break
if tag andline:
r_list.append(line.strip())for line inr_list:print(line)returnr_listelif type == 'append':
with open(filename,'r') as read_file, \
open(new_file,'w') as write_file:for r_line inread_file:
write_file.write(r_line)for new_line inrecord_list:if new_line.startswith('backend'):
write_file.write(new_line+ '\n')else:
write_file.write("%s%s\n" % (' ' * 8, new_line))
os.rename(filename, bak_file)
os.rename(new_file, filename)
os.remove(bak_file)elif type == 'change':
with open(filename,'r') as read_file, \
open(new_file,'w') as write_file:
tag=False
has_write=Falsefor r_line inread_file:if r_line.strip() ==backend_data:
tag=Truecontinue
if tag and r_line.startswith('backend'):
tag=Falseif nottag:
write_file.write(r_line)else:if nothas_write:for new_line inrecord_list:if new_line.startswith('backend'):
write_file.write(new_line+'\n')else:
write_file.write('%s%s\n' %(' '*8,new_line))
has_write=True
os.rename(filename, bak_file)
os.rename(new_file, filename)
os.remove(bak_file)deffetch(data):
backend_data="backend %s" %datareturn file_handle('haproxy.conf',backend_data,type='fetch')defadd(data):
backend=data['backend']
record_list=fetch(backend)
current_record="server %s %s weight %s maxconn %s" %(data['record']['server'],\
data['record']['server'],\
data['record']['weight'],\
data['record']['maxconn'])
backend_data="backend %s" %backendif notrecord_list:
record_list.append(backend_data)
record_list.append(current_record)
file_handle('haproxy.conf',backend_data,record_list,type='append')else:
record_list.insert(0,backend_data)if current_record not inrecord_list:
record_list.append(current_record)
file_handle('haproxy.conf',backend_data,record_list,type='change')defremove(data):
backend=data['backend']
record_list=fetch(backend)
current_record="server %s %s weight %s maxconn %s" %(data['record']['server'],\
data['record']['server'],\
data['record']['weight'],\
data['record']['maxconn'])
backend_data= "backend %s" %backendif not record_list or current_record not inrecord_list:print('\033[33;1m无此条记录\033[0m')return
else:#处理record_list
record_list.insert(0,backend_data)
record_list.remove(current_record)
file_handle('haproxy.conf',backend_data,record_list,type='change')defchange(data):
backend=data[0]['backend']
record_list=fetch(backend)
old_record="server %s %s weight %s maxconn %s" %(data[0]['record']['server'],\
data[0]['record']['server'],\
data[0]['record']['weight'],\
data[0]['record']['maxconn'])
new_record= "server %s %s weight %s maxconn %s" % (data[1]['record']['server'], \
data[1]['record']['server'], \
data[1]['record']['weight'], \
data[1]['record']['maxconn'])
backend_data="backend %s" %backendif not record_list or old_record not inrecord_list:print('\033[33;1m无此内容\033[0m')return
else:
record_list.insert(0,backend_data)
index=record_list.index(old_record)
record_list[index]=new_record
file_handle('haproxy.conf',backend_data,record_list,type='change')defqita(data):pass
if __name__ == '__main__':
msg='''1:查询
2:添加
3:删除
4:修改
5:退出
6:其他操作'''menu_dic={'1':fetch,'2':add,'3':remove,'4':change,'5':exit,'6':qita,
}whileTrue:print(msg)
choice=input("操作>>:").strip()if len(choice) == 0 or choice not in menu_dic:continue
if choice == '5':breakdata=input("数据>>:").strip()#menu_dic[choice](data)==fetch(data)
if choice != '1':
data=eval(data)
menu_dic[choice](data)#add(data)
#[{'backend':'www.oldboy20.org','record':{'server':'2.2.2.3','weight':20,'maxconn':3000}},{'backend':'www.oldboy10.org','record':{'server':'10.10.0.10','weight':9999,'maxconn':33333333333}}]