import os
def file_handle(filename,backend_data,record_list=None,type='fetch'):
new_file = filename+'_new'
bak_file = filename+'_bak'
if type == 'fetch':
r_list = []
with open(filename,'r') as f:
tag = False
for line in f:
if line.strip() == backend_data:
tag = True
continue
if tag and line.startswith('backend'):
break
if tag and line:
r_list.append(line.strip())
for l in r_list:
print(l)
return r_list
elif type == 'append':
with open(filename,'r') as read_file, open(new_file,'w') as write_file:
for r_line in read_file:
write_file.write(r_line)
for new_line in record_list:
if new_line.startwith('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 = False
for r_line in read_file:
if r_line.strip() == backend_data:
tag =True
continue
if tag and r_line.startswith('backend'):
tag = False
if not tag:
write_file.write(r_line)
else:
if not has_write:
for new_line in record_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)
def fetch(data):
backend_data = 'backend %s'%data
return file_handle('haproxy.conf',backend_data,type='fetch')
def add(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" % backend
if not record_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 in record_list:
record_list.append(current_record)
file_handle('haproxy.conf',backend_data,record_list,type='change')
def remove(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" % backend
if not record_list or current_record not in record_list:
print('\033[33;1m您删除的数据不存在\033[0m')
return
else:
record_list.insert(0,backend_data)
record_list.remove(current_record)
file_handle('haproxy.conf',backend_data,record_list,type='change')
def change(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" % backend
if not record_list or old_record not in record_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')
if __name__=="__main__":
msg = '''
1:查询
2:添加
3:删除
4:修改
5:退出
'''
menu_dic={
'1':fetch,
'2':add,
'3':remove,
'4':change,
'5':exit,
}
while True:
print(msg)
choice = input('操作>> :').strip()
if len(choice) == 0 or choice not in menu_dic:
continue
data = input('数据>>:').strip()
if choice == '5':
break
if choice != '1':
data = eval(data)
menu_dic[choice](data)