1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#!/usr/bin/env python
# -*- coding:utf8 -*-
import
os
import
json
def
fetch(backend):
fetch_list
=
[]
with
open
(
'ha'
) as obj:
flag
=
False
for
line
in
obj:
# line 每一行,
if
line.strip()
=
=
"backend %s"
%
backend:
flag
=
True
continue
# 判断,如果当前是 backend开头,不再放
if
flag
and
line.strip().startswith(
'backend'
):
break
if
flag
and
line.strip():
fetch_list.append(line.strip())
return
fetch_list
#result = fetch("buy.oldboy.org")
#print result
def
adds(dict_info):
#s = '{"backend": "www.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}'
backend_title
=
dict_info.get(
'backend'
)
current_title
=
"backend %s"
%
backend_title
current_record
=
"server %s %s weight %s maxconn %s"
%
(dict_info[
'record'
][
'server'
],dict_info[
'record'
][
'server'
],dict_info[
'record'
][
'weight'
],dict_info[
'record'
][
'maxconn'
])
# 获取制定backend下的所有记录
fetch_list
=
fetch(backend_title)
#print fetch_list
# backend是否存在
if
fetch_list:
#pass # 存在backend,则只需再添加记录
# 1,要插入的记录,存在
# 2,要插入的记录,不存在
if
current_record
in
fetch_list:
pass
else
:
fetch_list.append(current_record)
#如果不存在直接将current_record追加到fetch_list中
# 此时fetch_list为处理完的新列表
with
open
(
'ha'
) as read_obj,
open
(
'ha.new'
,
'w'
) as write_obj:
flag
=
False
has_write
=
False
for
line
in
read_obj:
#读取原配置文件
if
line.strip()
=
=
current_title:
#如果读取的行内容与current_title相等,则把current_title写入到文件中,然后就跳出本次循环,
write_obj.write(line)
flag
=
True
continue
if
flag
and
line.strip().startswith(
'backend'
):
#如果flag为真并且读取的line.strip内容是以"backend开头",则将flag置False
flag
=
False
if
flag:
#如果flag为True新的列表fetch_list所有数据一行一行的写入到新配置文件,即当遍历原配置文件中current_title标签下的current_record记录,如果curent_record有三条,则循环三次,每循环一次就将fetch_list完整遍历一次的然后一条一条地写入到新配置文件,所以这里要用一个标识符has_write作为判断是否写入,如果已经写入了就不再继续往新配置文件中写入
if
not
has_write:
for
new_line
in
fetch_list:
temp
=
"%s %s \n"
%
(
" "
*
8
, new_line)
write_obj.write(temp)
has_write
=
True
else
:
# 不满足以上的各种情况则直接将内容写入新配置文件
write_obj.write(line)
else
:
#pass,如果不存在backend,则添加backend和current_record
# current_title,current_record
# 直接打开文件
with
open
(
'ha'
) as read_obj,
open
(
'ha.new'
,
'w'
) as write_obj:
for
line
in
read_obj:
write_obj.write(line)
write_obj.write(
'\n'
+
current_title
+
'\n'
)
#将要插入的current_title和两条current_record记录再写到新配置文件末尾
temp
=
"%s %s \n"
%
(
" "
*
8
, current_record)
#把current_record两条记录写到新配置文件中
write_obj.write(temp)
#s = '{"backend": "test.oldboy.org","record":{"server": "10.10.10.9","weight": 20,"maxconn": 3000}}'
#data_dict = json.loads(s)
#adds(data_dict)
def
remove(dict_info):
backend_title
=
dict_info.get(
'backend'
)
current_title
=
"backend %s"
%
backend_title
current_record
=
"server %s %s weight %s maxconn %s"
%
(dict_info[
'record'
][
'server'
],dict_info[
'record'
][
'server'
],dict_info[
'record'
][
'weight'
],dict_info[
'record'
][
'maxconn'
])
# 获取制定backend下的所有记录
fetch_list
=
fetch(backend_title)
if
fetch_list:
pass
else
:
if
current_record
not
in
fetch_list:
pass
else
:
fetch_list[fetch_list.index(current_record)]
if
len
(fetch_list) >
0
:
fetch_list.insert(
0
, backend_title)
with
open
(
'ha'
) as read_file,
open
(
'ha.new'
,
'w'
) as write_file:
flag
=
False
has_write
=
False
for
line
in
read_file:
line_strip
=
line.strip()
if
line_strip
=
=
backend_title:
flag
=
True
continue
if
flag
and
line_strip.startswith(
'backend'
):
flag
=
False
if
not
flag:
write_file.write(line)
else
:
if
not
has_write:
for
i
in
fetch_list:
if
i.startswith(
'backend'
):
write_file.write(i
+
'\n'
)
else
:
write_file.write(
"%s%s\n"
%
(
8
*
" "
, i))
has_write
=
True
os.rename(
"ha"
,
'ha.bak'
)
os.rename(
"ha.new"
,
'ha'
)
if
__name__
=
=
'__main__'
:
print
'1、获取;2、添加;3、删除'
num
=
raw_input
(
'请输入序号:'
)
data
=
raw_input
(
'请输入内容:'
)
if
num
=
=
'1'
:
fetch(data)
else
:
dict_data
=
json.loads(data)
if
num
=
=
'2'
:
add(dict_data)
elif
num
=
=
'3'
:
remove(dict_data)
else
:
pass
|
本文转自027ryan 51CTO博客,原文链接:,http://blog.51cto.com/ucode/1726862
如需转载请自行联系原作者