def file_handle(backend_data,res = None,type = 'fetch'):if type == 'fetch':
ret=[]
with open('haproxy','r') asread_f :
tag=Falsefor read_line inread_f:if read_line.strip() ==backend_data:
tag=Truecontinue
if tag and read_line.startswith('backend'):break#server读完,读到下一个backend时,关闭for循环,否则就会将 backend www.oldboy1.org后面的内容全部读出来iftag :
print('\033[1;45m%s\033[0m'%read_line,end = '') #把读到的哪一行server打印出来
ret.append(read_line) #将满足条件的哪一行server添加到列表中returnret #函数返回该列表,及返回查询结果
elif type== 'change':
import os
with open ('haproxy','r') as read_f, open('haproxy_new','w') aswrite_f:
tag=False
has_write= False #设置has_write 阀门 是为了防止每一次server都运行一遍 for record in res: 如果这样,新文件中就会有四条修改过的backend www.oldboy1.org的相关内容for read_line inread_f:if read_line.strip() ==backend_data:
tag=Truecontinue
if tag and read_line.startswith('backend'):
tag=False #如果此处不对tag进行关闭,那么在新文件中写完backend www.oldboy1.org内的server就会停止ifnot tag:
write_f.write(read_line)else:ifnot has_write:for record inres: #把新纪录写在新文件中
write_f.write(record)
has_write=True
os.rename('haproxy','haproxy.bak') #此三步操作是使新文件覆盖老文件,先将老文件换名,再将新文件换成老文件原来的名,在删除老文件
os.rename('haproxy_new','haproxy')
os.remove('haproxy.bak')
def fetch(data):
print('\033[1;43m这是查询功能\033[0m')
print('\033[1;43m用户数据是\033[0m',data)
backend_data= 'backend %s' %datareturnfile_handle(backend_data)
def add():
pass
def change(data):
print('这是修改功能')
print('用户输入的数据是',data)
backend= data[0]['backend'] #文件当中的一条记录 如 www.oldboy1.org
backend_data= 'backend %s' %backend
old_server_record= '%sserver %s weight %s maxconn %s\n' % (' '*8,data[0]['record']['server'],data[0]['record']['weight'],data[0]['record']['maxconn']) #因为传进来的参数是列表(内包含两个字典),通过此语句将要修改的数据拼接成完整的字符串
new_server_record= '%sserver %s weight %s maxconn %s\n' % (' '*8,data[1]['record']['server'],data[1]['record']['weight'],data[1]['record']['maxconn'])
print('用户想要修改的记录是',old_server_record)
res=fetch(backend) #获取backend 后的server内容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_data) #此处不能用append,因为调用此方法会将 backend_data 数据,将其添加到开头,因此应用insert方法添加到列表末尾,此语句的作用是避免新文件没有backend...,因为在此之前,res的列表种不包含backend...
file_handle(backend_data,res= res,type = 'change')
def delete():
passif __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)
# 修改信息:[{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4 2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5 2.2.2.5','weight':30,'maxconn':4000}}]