• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
nikitapp
博客园    首页    新随笔    联系   管理    订阅  订阅
HAproxy配置文件操作

要求

1. 根据用户输入输出对应的backend下的server信息
2. 可添加backend 和sever信息
3. 可修改backend 和sever信息
4. 可删除backend 和sever信息
5. 操作配置文件前进行备份
6 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建;若信息与已有信息重复则不操作

 

  1 def find(backend):
  2     '''
  3     查看backend下sever信息
  4     :param backend:
  5     :return:
  6     '''
  7     ls = []
  8     with open('HA.txt', 'r') as f:
  9         T = True
 10         for line in f:
 11             # 找到第一个backend,做记录 T = False
 12             if line.strip() == 'backend %s' % (backend):
 13                 T = False
 14                 continue
 15             # 找到第二个backend,做记录 T = True
 16             if T == False and line.strip().startswith('backend'):
 17                 T = True
 18                 break
 19             # 把关于False的加入到列表中
 20             if T == False and line.strip():
 21                 ls.append(line.strip())
 22     return ls
 23 
 24 
 25 def check_bk():
 26     '''
 27     列出backend的信息
 28     :return: 选中的backend
 29     '''
 30     ls = []
 31     T = True
 32     with open('HA.txt', 'r') as f1:
 33          for line in f1:
 34             if line.strip().startswith('backend') == True:
 35                 to = line.split(' ')
 36                 ls.append(to[1])
 37          for i, v in enumerate(ls,1):
 38             print (i, v)
 39          while T:
 40              t1 = input('请输入查看的server的 backend信息')
 41              if t1.isdecimal() and int(t1) in range(0,len(ls)+1):
 42                 a = ls[int(t1)-1]
 43                 break
 44              else:
 45                 print('输入有误,重新输入')
 46     return a
 47 
 48 def backup():
 49     '''
 50     备份
 51     :return:
 52     '''
 53     with open('HA.txt', 'r') as f1, open('HA_old.txt', 'w') as f2:
 54         for line in f1:
 55             f2.write(line)
 56 
 57 
 58 def add(bk, sr):
 59     '''
 60     添加记录
 61     :param bk:
 62     :param sr:
 63     :return:
 64     '''
 65     r_list = find(bk)
 66     # 没有关于bk的记录,直接添加内容
 67     T = True
 68     a = 'backend %s' % bk
 69     backup()
 70     if not r_list:
 71         with open('HA.txt', 'a') as f1:
 72             f1.write('\n%s\n'% a)
 73             f1.write("        %s\n" % sr)
 74     # 有关于bk的记录
 75     else:
 76         # 没有sever记录
 77         backup()
 78         if sr not in r_list:
 79             with open('HA_old.txt', 'r') as f1, open('HA.txt', 'w') as f2:
 80                 for line in f1:
 81                     if line.strip() == 'backend %s' % (bk):
 82                         T = False
 83                         f2.write(line)
 84                         continue
 85                     if T == False and line.strip().startswith('backend'):
 86                         T = True
 87                     if T == True:
 88                         f2.write(line)
 89                     else:
 90                         if sr not in r_list:
 91                             r_list.append(sr)
 92                             t = '\n        '.join(r_list)
 93                             f2.write(' '* 8 + t + '\n\n')
 94     # 有sever记录,直接复制
 95         else:
 96             print('记录已存在,请重新选择')
 97             caidan()
 98 
 99 
100 def update_bk ():
101     '''
102     需要修改或删除backend
103     :return:
104     '''
105     backup()
106     T = True
107     bk = check_bk()
108     ls =[]
109     with open('HA.txt', 'r') as f1:
110          for line in f1:
111             if line.strip().startswith('backend') == True:
112                 to = line.split(' ')
113                 ls.append(to[1].strip())
114     c = input('''
115     请选择需要选项:
116     1 修改backend
117     2 删除backend
118     ''')
119     while T:
120         #修改backend信息
121         if c == '1':
122             bk1 = input('请输入修改后的backend信息')
123             t3 = input('信息确认请按 y, 重新输入请按其他键')
124             if bk1 in ls:
125                 print('信息已存在,请重新选择')
126                 break
127             else:
128                 if t3.lower() == 'y':
129                     with open('HA_old.txt', 'r') as f1, open('HA.txt', 'w') as f2:
130                         for line in f1:
131                             #需要修改的backend
132                             if line.strip() == 'backend %s' % (bk.strip()):
133                                 f2.write('backend %s \n' % (bk1))
134                             else:
135                                 f2.write(line)
136                         print('修改成功')
137                         break
138                 else:
139                     continue
140             #删除backend信息
141         elif c == '2':
142             t = find(bk.strip())
143             while T:
144                 with open('HA_old.txt', 'r') as f1, open('HA.txt', 'w') as f2:
145                     for line in f1:
146                         if line.strip() == 'backend %s' % (bk.strip()):
147                             continue
148                         if line.strip() in t:
149                             continue
150                         else:
151                             f2.write(line)
152                     print('删除成功')
153                     break
154             break
155 
156 def check_sr():
157     T1 = True
158     while T1:
159         cont = 0
160         a1 = input('sever:')
161         ti = a1.split('.')
162         for ii in ti:
163             if ii.isdecimal() and int(ii) in range(0, 255) and len(ti) == 4:
164                 cont = cont + 1
165                 continue
166             else:
167                 print('输入有误,请输入由四组0-255组成的IP地址')
168                 break
169         if cont == 4:
170             break
171     return a1
172 
173 
174 def update_sr():
175     '''
176     修改或删除sever
177     :return:
178     '''
179     t = check_bk()
180     backup()
181     T = True
182     T1 = True
183     ls = find(t.strip())
184     cc = 0
185     with open('HA_old.txt', 'r') as f1, open('HA.txt', 'w') as f2:
186         for line in f1:
187             if line.strip() == 'backend %s' %(t.strip()):
188                 T = False
189                 f2.write(line)
190                 continue
191             if T == False and line.strip().startswith('backend'):
192                 T = True
193             if T == True:
194                 if line.strip() != cc and line.strip() not in ls:
195                     f2.write(line)
196 
197             else:
198                 for i, v in enumerate(ls, 1):
199                     print ('%s: %s' % (i, v))
200                 while T1:
201                     v1 = input('请输入要修改或删除的编号')
202                     if v1.isdecimal() and int(v1) in range(len(ls)+1):
203                         break
204                     else:
205                         print('输入有误,请重新输入')
206                         continue
207                 x = input('请选择 1 = 修改 其他键 = 删除')
208                 if x == '1':
209                     while T1:
210                         a1 = check_sr()
211                         a2 = input('weight:')
212                         a3 = input('maxconn:')
213                         if a2.isdecimal() and a3.isdecimal():
214                             t1 = 'server %s %s weight %s maxconn %s' % (a1, a1, a2, a3)
215                             print('backend: %s \n%s' % (t, t1))
216                         else:
217                             print('所输入weight 和 maxconn 必须为数字,请重新输入')
218                             continue
219                         li_sr = 'server %s %s weight %s maxconn %s' % (a1, a1, a2, a3)
220                         # server
221                         if li_sr in ls:
222                             tt = input('server已存在,请按 y = 重新输入,或按 other key = 返回')
223                             if tt == 'y':
224                                 continue
225                             else:
226                                 break
227                         else:
228                             a4 = input('请确认信息正确,y = 确认, other key  = 重新输入')
229 
230                             if a4 == 'y':
231                                 f2.write(' '*8 + li_sr +'\n')
232                             else:
233                                 continue
234                             print('修改成功')
235                             break
236                     cc = ls[int(v1)-1]
237                     del ls[int(v1)-1]
238                     for tt in ls:
239                         f2.write(' '*8 + tt +'\n')
240                     T = True
241                 else:
242                     print('删除成功')
243                     cc = ls[int(v1)-1]
244                     del ls[int(v1)-1]
245                     for tt in ls:
246                         f2.write(' '*8 + tt +'\n')
247                     T = True
248 
249 
250 def caidan ():
251     T = True
252     while T:
253         ls = input('''请输入所需编号:
254         1 查看backend下sever信息
255         2 添加记录
256         3 修改或删除backend
257         4 修改或删除sever
258         5 退出
259         ''')
260         if ls == '1':
261             i = check_bk()
262             l1 = find(i.strip())
263             for a in l1:
264                 print (a)
265         elif ls == '2':
266             while T:
267                 t = input('请输入backend信息')
268                 print('请输入sever信息')
269                 cont = 0
270                 while T:
271                     a1 = input('sever:')
272                     ti = a1.split('.')
273                     for ii in ti:
274                         if ii.isdecimal() and int(ii) in range(0, 255) and len(ti) == 4:
275                             cont = cont + 1
276                             continue
277                         else:
278                             print('输入有误,请输入由四组0-255组成的IP地址')
279                             break
280                     if cont == 4:
281                         break
282                 while T:
283                     a2 = input('weight:')
284                     a3 = input('maxconn:')
285                     if a2.isdecimal() and a3.isdecimal():
286                         t1 = 'server %s %s weight %s maxconn %s' % (a1, a1, a2, a3)
287                         print('backend: %s \n%s' % (t, t1))
288                         break
289                     else:
290                         print('所输入weight 和 maxconn 必须为数字,请重新输入')
291                         continue
292                 t3 = input('信息确认请按 y, 重新输入请按其他键')
293                 if t3.lower() == 'y':
294                     add (t, t1)
295                     print('添加成功')
296                     break
297                 else:
298                     continue
299         elif ls == '3':
300             update_bk()
301         elif ls == '4':
302             update_sr()
303         elif ls == '5':
304             exit()
305         else:
306             print('输入有误,请重新输入')
307 
308 caidan()

 

def find(backend):
'''
查看backend下sever信息
:param backend:
:return:
'''
ls = []
with open('HA.txt', 'r') as f:
T = True
for line in f:
# 找到第一个backend,做记录 T = False
if line.strip() == 'backend %s' % (backend):
T = False
continue
# 找到第二个backend,做记录 T = True
if T == False and line.strip().startswith('backend'):
T = True
break
# 把关于False的加入到列表中
if T == False and line.strip():
ls.append(line.strip())
return ls


def check_bk():
'''
列出backend的信息
:return: 选中的backend
'''
ls = []
T = True
with open('HA.txt', 'r') as f1:
for line in f1:
if line.strip().startswith('backend') == True:
to = line.split(' ')
ls.append(to[1])
for i, v in enumerate(ls,1):
print (i, v)
while T:
t1 = input('请输入查看的server的 backend信息')
if t1.isdecimal() and int(t1) in range(0,len(ls)+1):
a = ls[int(t1)-1]
break
else:
print('输入有误,重新输入')
return a

def backup():
'''
备份
:return:
'''
with open('HA.txt', 'r') as f1, open('HA_old.txt', 'w') as f2:
for line in f1:
f2.write(line)


def add(bk, sr):
'''
添加记录
:param bk:
:param sr:
:return:
'''
r_list = find(bk)
# 没有关于bk的记录,直接添加内容
T = True
a = 'backend %s' % bk
backup()
if not r_list:
with open('HA.txt', 'a') as f1:
f1.write('\n%s\n'% a)
f1.write(" %s\n" % sr)
# 有关于bk的记录
else:
# 没有sever记录
backup()
if sr not in r_list:
with open('HA_old.txt', 'r') as f1, open('HA.txt', 'w') as f2:
for line in f1:
if line.strip() == 'backend %s' % (bk):
T = False
f2.write(line)
continue
if T == False and line.strip().startswith('backend'):
T = True
if T == True:
f2.write(line)
else:
if sr not in r_list:
r_list.append(sr)
t = '\n '.join(r_list)
f2.write(' '* 8 + t + '\n\n')
# 有sever记录,直接复制
else:
print('记录已存在,请重新选择')
caidan()


def update_bk ():
'''
需要修改或删除backend
:return:
'''
backup()
T = True
bk = check_bk()
ls =[]
with open('HA.txt', 'r') as f1:
for line in f1:
if line.strip().startswith('backend') == True:
to = line.split(' ')
ls.append(to[1].strip())
c = input('''
请选择需要选项:
1 修改backend
2 删除backend
''')
while T:
#修改backend信息
if c == '1':
bk1 = input('请输入修改后的backend信息')
t3 = input('信息确认请按 y, 重新输入请按其他键')
if bk1 in ls:
print('信息已存在,请重新选择')
break
else:
if t3.lower() == 'y':
with open('HA_old.txt', 'r') as f1, open('HA.txt', 'w') as f2:
for line in f1:
#需要修改的backend
if line.strip() == 'backend %s' % (bk.strip()):
f2.write('backend %s \n' % (bk1))
else:
f2.write(line)
print('修改成功')
break
else:
continue
#删除backend信息
elif c == '2':
t = find(bk.strip())
while T:
with open('HA_old.txt', 'r') as f1, open('HA.txt', 'w') as f2:
for line in f1:
if line.strip() == 'backend %s' % (bk.strip()):
continue
if line.strip() in t:
continue
else:
f2.write(line)
print('删除成功')
break
break

def check_sr():
T1 = True
while T1:
cont = 0
a1 = input('sever:')
ti = a1.split('.')
for ii in ti:
if ii.isdecimal() and int(ii) in range(0, 255) and len(ti) == 4:
cont = cont + 1
continue
else:
print('输入有误,请输入由四组0-255组成的IP地址')
break
if cont == 4:
break
return a1


def update_sr():
'''
修改或删除sever
:return:
'''
t = check_bk()
backup()
T = True
T1 = True
ls = find(t.strip())
cc = 0
with open('HA_old.txt', 'r') as f1, open('HA.txt', 'w') as f2:
for line in f1:
if line.strip() == 'backend %s' %(t.strip()):
T = False
f2.write(line)
continue
if T == False and line.strip().startswith('backend'):
T = True
if T == True:
if line.strip() != cc and line.strip() not in ls:
f2.write(line)

else:
for i, v in enumerate(ls, 1):
print ('%s: %s' % (i, v))
while T1:
v1 = input('请输入要修改或删除的编号')
if v1.isdecimal() and int(v1) in range(len(ls)+1):
break
else:
print('输入有误,请重新输入')
continue
x = input('请选择 1 = 修改 其他键 = 删除')
if x == '1':
while T1:
a1 = check_sr()
a2 = input('weight:')
a3 = input('maxconn:')
if a2.isdecimal() and a3.isdecimal():
t1 = 'server %s %s weight %s maxconn %s' % (a1, a1, a2, a3)
print('backend: %s \n%s' % (t, t1))
else:
print('所输入weight 和 maxconn 必须为数字,请重新输入')
continue
li_sr = 'server %s %s weight %s maxconn %s' % (a1, a1, a2, a3)
# server
if li_sr in ls:
tt = input('server已存在,请按 y = 重新输入,或按 other key = 返回')
if tt == 'y':
continue
else:
break
else:
a4 = input('请确认信息正确,y = 确认, other key = 重新输入')

if a4 == 'y':
f2.write(' '*8 + li_sr +'\n')
else:
continue
print('修改成功')
break
cc = ls[int(v1)-1]
del ls[int(v1)-1]
for tt in ls:
f2.write(' '*8 + tt +'\n')
T = True
else:
print('删除成功')
cc = ls[int(v1)-1]
del ls[int(v1)-1]
for tt in ls:
f2.write(' '*8 + tt +'\n')
T = True


def caidan ():
T = True
while T:
ls = input('''请输入所需编号:
1 查看backend下sever信息
2 添加记录
3 修改或删除backend
4 修改或删除sever
5 退出
''')
if ls == '1':
i = check_bk()
l1 = find(i.strip())
for a in l1:
print (a)
elif ls == '2':
while T:
t = input('请输入backend信息')
print('请输入sever信息')
cont = 0
while T:
a1 = input('sever:')
ti = a1.split('.')
for ii in ti:
if ii.isdecimal() and int(ii) in range(0, 255) and len(ti) == 4:
cont = cont + 1
continue
else:
print('输入有误,请输入由四组0-255组成的IP地址')
break
if cont == 4:
break
while T:
a2 = input('weight:')
a3 = input('maxconn:')
if a2.isdecimal() and a3.isdecimal():
t1 = 'server %s %s weight %s maxconn %s' % (a1, a1, a2, a3)
print('backend: %s \n%s' % (t, t1))
break
else:
print('所输入weight 和 maxconn 必须为数字,请重新输入')
continue
t3 = input('信息确认请按 y, 重新输入请按其他键')
if t3.lower() == 'y':
add (t, t1)
print('添加成功')
break
else:
continue
elif ls == '3':
update_bk()
elif ls == '4':
update_sr()
elif ls == '5':
exit()
else:
print('输入有误,请重新输入')

caidan()
posted on 2016-11-03 17:59  nikitapp  阅读(430)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3