原配置文件:
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.oldboy.org
server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
需求:1、查
輸入:www.oldboy.org
獲取當前backend下的所有記錄
2、新建
輸入:
arg = {
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
}
3、刪除
輸入:
arg = {
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
}
實現:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json
import os
#根據標題獲取配置信息
def fetch(backend):
backend_title = 'backend %s' % backend
record_list = []
with open('ha') as obj:
flag = False
for line in obj:
line = line.strip()
if line == backend_title:
flag = True
continue
if flag and line.startswith('backend'):
flag = False
break
if flag and line:
record_list.append(line)
return record_list
return record_list
#在指定標題下插入配置信息
def insert(dict_data):
backend = dict_data.get('backend')
backend_title = "backend %s" % backend
content = "server %s %s weight %d maxconn %d" % (dict_data['record']['server'], dict_data['record']['server'], dict_data['record']['weight'], dict_data['record']['maxconn'])
record_list = fetch(backend)
flag = True
count = 0
if not record_list:
record_list.append(backend_title)
record_list.append(content)
with open('conf.txt','r') as read_file, open('conf.txt.bak','w') as write_file:
for line in read_file:
write_file.write(line)
for l in record_list:
if l.startswith("backend"):
write_file.write(l+'\n')
else:
write_file.write(" "*8 + l)
else:
record_list.append(content)
with open('conf.txt','r') as read_file, open('conf.txt.bak','w') as write_file:
for line in read_file:
if flag:
write_file.write(line)
if line.startswith(backend_title):
for l in record_list:
write_file.write(" "*8 + l+'\n')
flag = False
else:
count = count + 1
if(count == record_list.__len__() -1):
flag = True
os.rename('conf.txt.bak','conf.bak')
os.rename('conf.bak','conf.txt')
#刪除指定標題的信息
def delete(dict_data):
backend = dict_data.get('backend')
backend_title = "backend %s" % backend
content = "server %s %s weight %d maxconn %d" % (dict_data['record']['server'], dict_data['record']['server'], dict_data['record']['weight'], dict_data['record']['maxconn'])
record_list = fetch(backend)
content = content.strip()
print(content)
if not record_list:
return
else:
if record_list.__contains__(content):
return
else:
print(record_list)
record_list.__delattr__(record_list.index(content))
with open('conf.txt','r') as read_file, open('conf.txt.bak','w') as write_file:
for line in read_file:
if flag:
write_file.write(line)
if line.startswith(backend_title):
for l in record_list:
write_file.write(" "*8 + l+'\n')
flag = False
else:
count = count + 1
if(count == record_list.__len__() +1):
flag = True
os.rename('conf.txt.bak','conf.bak')
os.rename('conf.bak','conf.txt')
if __name__ == '__main__':
print '1、獲取;2、添加;3、刪除'
num = raw_input('請輸入序號:')
data = raw_input('請輸入內容:')
if num == '1':
print(fetch(data))
else:
dict_data = json.loads(data)
if num == '2':
insert(dict_data)
elif num == '3':
delete(dict_data)
else:
pass
#data = "www.oldboy.org"
#fetch(data)
#data = '{"backend": "www.oldboy.com","record":{"server": "100.1.7.90","weight": 20,"maxconn": 31}}'
#dict_data = json.loads(data)
#add(dict_data)
#remove(dict_data)