import os #os包含改名和删除文件函数
def file_handler(backend_data,res = None,type='fetch'):if type == 'fetch':
with open('haproxy.conf', 'r') as read_f:
tag= False #找到标志
ret =[]for read_line inread_f:if read_line.strip() == backend_data: #匹配到数据
tag =Truecontinue
if tag and read_line.startswith('backend'): #到下一个backend停止
break
if tag: #找到后读出后面的数据
print('%s' % read_line, end='')
ret.append(read_line)returnretelif type == 'change':
with open('haproxy.conf', 'r') as read_f, \
open('haproxy.conf_new', 'w') as write_f:
tag=False
has_write=Falsefor read_line inread_f:if read_line.strip() ==backend_data:
tag=Truecontinue
if tag and read_line.startswith('backend'):
tag=Falseif nottag:
write_f.write(read_line)else:if nothas_write:for record inres:
write_f.write(record)
has_write=True
os.rename('haproxy.conf', 'haproxy.conf.bak')
os.rename('haproxy.conf_new', 'haproxy.conf')
os.remove('haproxy.conf.bak')deffetch(data):#print('这是查询功能')
#print('用户数据是',data)
backend_data ='backend %s' %datareturnfile_handler(backend_data)defadd():pass
#[{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]
defchange(data):#print('这是修改功能')
#print('用户输入数据是:',data)
backend = data[0]['backend'] #从用户传参提取www.oldboy1.org
backend_line = 'backend %s' %data[0]['backend']#内容:backend www.oldboy1.org
#拼接字符串old_server_record,把用户传参的源server信息整理出来
old_server_record = '%sserver %s %s weight %s maxconn %s\n' %(' '*8,data[0]['record']['server'],
data[0]['record']['server'],
data[0]['record']['weight'],
data[0]['record']['maxconn'])#用户传参的目标server信息
new_server_record = '%sserver %s %s weight %s maxconn %s\n' %(' '*8,data[1]['record']['server'],
data[1]['record']['server'],
data[1]['record']['weight'],
data[1]['record']['maxconn'])print('用户想要修改的记录是:',old_server_record)
res=fetch(backend)print('来自change函数结果--》',res)if not res or old_server_record not inres:return '你要修改的记录不存在'
else:
index=res.index(old_server_record)
res[index]=new_server_record
res.insert(0,'%s\n' %backend_line)
file_handler(backend_line,res=res,type='change')defdelete():pass
#Python文件里面只写不会运行的功能,测试代码在下面写
if __name__ == '__main__':
msg='''1:查询
2:添加
3:修改
4:删除
5:退出'''msg_dic={'1':fetch,'2':add,'3':change,'4':delete,
}whileTrue:print(msg)
choice= input('请输入你的选项:').strip()if not choice:continue
if choice == '5':breakdata= input('请输入你的数据:').strip()if choice != '1': #查询输入的是字符串,其他需要处理格式化数据
data =eval(data)
res=msg_dic[choice](data)print('最终结果是————》',res)