对指定文件haproxy.conf的backend www.oldboy1.org进行增删改查。文件内容如下
global
log 127.0.0.1 local2
daemon
maxconn 256
log 127.0.0.1 local2 info
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull
listen stats :8888
stats enable
stats uri /admin
stats auth admin:1234
frontend oldboy.org
bind 0.0.0.0:80
option httplog
option httpclose
option forwardfor
log global
acl www hdr_reg(host) -i www.oldboy.org
use_backend www.oldboy.org if www
backend www.oldboy1.org
server 101.1000.7.9 101.1000.7.9 weight 20 maxconn 30
server 2.2.2.7 2.2.2.7 weight 30 maxconn 4000
server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000
server 2.2.2.4 2.2.2.4 weight 30 maxconn 4000
backend www.oldboy2.org
server 3.3.3.3 3.3.3.3 weight 20 maxconn 3000
backend www.oldboy20.org
server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
用户输入的修改信息为
#[{'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}}]
元素【0】为修改前,元素【1】为修改后
importosdeffetch(data):print('这是查询功能')print('用户查询的数据是%s'%data)
backend_data='backend %s'%data
with open('haproxy.conf','r',encoding='utf-8') as f1:
tag=False
ret=[]for read_line inf1:if backend_data==read_line.strip():#行末有换行符\n
tag =Truecontinue#跳入下一行
if tag and read_line.strip().startswith('backend'):#遇到下一个backend
break
iftag:
ret.append(read_line)print(read_line)returnretdefadd(data):print('添加')defchange(data):print('这是修改功能')
backend=data[0]['backend']#用户输入数据的0个元素是字典,key是backend
backend_data = 'backend %s' % backend #backend www.oldboy1.org
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'])
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'])
res=fetch(backend)print(res)if notres:return '你要修改的记录不存在'
if old_server_record not inres:return '你要修改的记录不存在'
else:
index=res.index(old_server_record) #通过value获取index
res[index]=new_server_record#修改的是fetch返回的res,还需要重新写入文件
res.insert(0,'%s\n'%backend_data) #fetch返回的res没有backend www.oldboy1.org头部
with open('haproxy.conf','r') as read_f,\
open('haproxy.conf_new','w') as write_f:
tag=False
has_write=False#是否改写
for read_line inread_f:if read_line.strip()==backend_data :#backend www.oldboy1.org
tag=Truecontinue #跳到下一行
if tag and read_line.startswith('backend'):
tag=Falseif not tag:#不是#backend www.oldboy1.org
write_f.write(read_line) #按照读的来写
iftag:if nothas_write:for recond in res:#把修改后的fetch返回的res写入新文件
write_f.write(recond)#把res写入
has_write=True#改写完了
os.rename('haproxy.conf','haproxy.conf.bak')
os.rename('haproxy.conf_new','haproxy.conf')defdelete(data):pass
if __name__=="__main__":
msg='''1:查询
2:添加
3:修改
4:删除
5:退出'''
print(msg)
msg_dict={'1':fetch,'2':add,'3':change,'4':delete,
}whileTrue:
choice=input('请输入你的选项:').strip()if not choice:continue
if choice=='5':breakdata=input('请输入你的数据:')if choice !=1:
data=eval(data)if int(choice)<6:
res=msg_dict[choice](data)print(res)else:print('请输入正确的选项')