Day3-HAproxy

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day3-HAproxy相关的知识,希望对你有一定的参考价值。

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

 

技术分享
  1 import json
  2 import os
  3 
  4 
  5 def show_all_backend(filename):
  6     try:
  7         l_backend = []
  8         with open(filename, r, encoding=utf-8) as f:
  9             lines = f.readlines()
 10             for line in lines:
 11                 if line.strip().startswith(backend):
 12                     l_backend.append(line)
 13         if l_backend:
 14             for i,j in enumerate(l_backend):
 15                 print (\\t%s % (i + 1), j)
 16             return True
 17 
 18         else:
 19             print(No actived backends!)
 20             return False
 21     except EOFError as msg:
 22         print(msg)
 23 
 24 
 25 def show_server_info_under_backend(url):
 26     l_backend = []
 27     f = open(HAproxy, r, encoding=utf-8)
 28     lines = f.readlines()
 29     for i in range(len(lines)):
 30         if lines[i].strip().startswith(backend):
 31             item = lines[i].strip().strip(\\n)
 32             new_item = item.strip(backend )
 33             #print (new_item)
 34             l_backend.append(new_item)
 35     #print (l_backend)
 36     if url in l_backend:
 37         for i in range(len(lines)):
 38             if lines[i].strip().startswith(backend %s%url):
 39                 j = lines.index(lines[i])
 40                 #print (lines[j])
 41         i = j+1
 42         l_base = []
 43         if url == l_backend[-1]:
 44             p = lines.index(backend %s\\n%l_backend[-1])
 45             for item in lines[p+1:]:
 46                 l_base.append(item.strip().strip(\\n))
 47         else:
 48             while True:
 49                 if lines[i].strip().startswith(server):
 50                     l_base.append(lines[i].strip().strip(\\n))
 51                     i +=1
 52                     if (lines[i].strip().startswith(backend)):
 53                         break
 54 
 55         for i, j in enumerate(l_base):
 56             print(\\t%s % (i + 1), j)
 57         return True
 58     else:
 59         return False
 60 
 61 def is_backend_exists(url):
 62     try:
 63         lbackend = []
 64         f = open(HAproxy, r, encoding=utf-8)
 65         lines = f.readlines()
 66         for i in range(len(lines)):
 67             if lines[i].startswith("backend"):
 68                 lbackend.append(lines[i][len("backend "):].strip(\\n))
 69         f.close()
 70 
 71         if url in lbackend:
 72             #print("backend %s exists!Please added server info directly"%url)
 73             return True
 74         else:
 75             return False
 76 
 77     except EOFError as msg:
 78         print(msg)
 79 
 80     finally:
 81         f.close()
 82 
 83 def add_backend(url):
 84     try:
 85         f = open(HAproxy, a+, encoding=utf-8)
 86         if not is_backend_exists(url):
 87             f.writelines("\\n\\rbackend %s" % url)
 88             print("Add backend %s successfully" % url)
 89         else:
 90             print("Fail to add backend %s since it already exists" % url)
 91 
 92     except EOFError as msg:
 93         print(msg)
 94 
 95     finally:
 96         f.close()
 97 
 98 
 99 def del_backend(url):
100     try:
101         if is_backend_exists(url):
102             f = open(HAproxy, r+, encoding=utf-8)
103             lines = f.readlines()
104             f.close()
105 
106             if url in lines[-1].strip():
107                 lines[-1]=""
108             else:
109                 for i in range(len(lines)):
110                     if lines[i].startswith(backend) and (url in lines[i]):
111                         lines[i] = ""
112                         j = i + 1
113                         while True:
114                             if lines[-1].strip().startswith(server):
115                                 break
116                             elif lines[j].strip().startswith(server):
117                                 lines[j] = ""
118                                 j += 1
119                             else:
120                                 break
121             f = open(HAproxy, w+, encoding=utf-8)
122             f.writelines(lines)
123             f.close()
124             print(Delete backend %s sucessfully!%url)
125             return True
126         else:
127             print(Delete Failed - No such backend sever exits)
128             return False
129 
130     except EOFError as msg:
131          print(msg)
132 
133 
134 def show_all_active_server_info(filename):
135     try:
136         l_server = []
137         with open(filename, r, encoding=utf-8) as f:
138             lines = f.readlines()
139             for line in lines:
140                 if line.strip().startswith(server):
141                     l_server.append(line)
142         if l_server:
143             str = "The active server info as below:"
144             print(str.center(60,*))
145             for i, j in enumerate(l_server):
146                 print(\\t%s % (i + 1), j)
147             return True
148 
149         else:
150             print(No actived servers!)
151             return False
152     except EOFError as msg:
153         print(msg)
154 
155 def add_server_info_under_backend(str):
156     # Tranfer inside str to dict
157     try:
158         dict = json.loads(str)
159         # print (dict)
160         item = "server {server} weight {weight} maxconn {maxconn}".format(**dict[record])
161         #print(type(item))
162         i = 0
163         if is_backend_exists(dict[backend]):
164             f = open(HAproxy, r+, encoding=utf-8)
165             lines = f.readlines()
166             f.close()
167             #print (lines)
168             l_backend = []
169             for line in lines:
170                 if dict[backend] in line.strip(\\n):
171                     index = lines.index(line)
172                     i = index
173                     # print(lines[i])
174                     break
175 
176             for line in lines:
177                 if line.strip().startswith(backend):
178                     l_backend.append(line)
179 
180             if dict[backend] in l_backend[-1]:
181                 l_set = []
182                 for line in lines[i:]:
183                     l_set.append(line.strip().strip(\\n))
184                 # print(l_set)
185                 # print(item)
186                 if item in l_set:
187                     return False
188 
189                 else:
190                     with open(HAproxy, r, encoding=utf-8) as f1:
191                         lines = f1.readlines()
192                     l_ip = []
193                     #print(dict[‘record‘][‘server‘])
194                     for n in range(len(lines)):
195                         if lines[n].startswith(\\t\\tserver %s  % dict[record][server]):
196                             l_ip.append(lines[n])
197                     if l_ip:
198                         dict = json.loads(str)
199                         item2 = "server {server} weight {weight} maxconn {maxconn}".format(**dict[record])
200                         with open(HAproxy, r+, encoding=utf-8) as f2:
201                             new_lines = f2.readlines()
202                             p = 0
203                             for line in new_lines:
204                                 if \\t\\tserver %s  % dict[record][server] in line:
205                                     p = new_lines.index(line)
206 
207                             new_lines[p] = \\t\\t%s\\n % item2
208                         with open(HAproxy, w+, encoding=utf-8) as f3:
209                             f3.writelines(new_lines)
210                             print(Update server info successfully!)
211                             return True
212 
213                     else:
214                         f = open(HAproxy, a+, encoding=utf-8)
215                         line = "\\n\\t\\tserver {server} weight {weight} maxconn {maxconn}".format(**dict[record])
216                         f.writelines(line)
217                         f.close()
218             else:
219                 j=i+1
220                 l_server = []
221                 while True:
222                     if lines[j].strip().startswith(server):
223                         l_server.append(lines[j].strip().strip(\\n))
224                         j +=1
225                         if lines[j].strip().startswith(backend):
226                             break
227                 if item in l_server:
228                     return False
229                 else:
230                     with open(HAproxy, r, encoding=utf-8) as f1:
231                         lines = f1.readlines()
232                     l_ip = []
233                     #print(dict[‘record‘][‘server‘])
234                     for n in range(len(lines)):
235                         if lines[n].startswith(\\t\\tserver %s %dict[record][server]):
236                             l_ip.append(lines[n])
237                     if l_ip:
238                         dict = json.loads(str)
239                         item2 = "server {server} weight {weight} maxconn {maxconn}".format(**dict[record])
240                         with open(HAproxy, r+, encoding=utf-8) as f2:
241                             new_lines = f2.readlines()
242                             p = 0
243                             for line in new_lines:
244                                 if \\t\\tserver %s %dict[record][server] in line:
245                                     p = new_lines.index(line)
246 
247                             new_lines[p] = \\t\\t%s\\n%item2
248                         with open(HAproxy, w+, encoding=utf-8) as f3:
249                             f3.writelines(new_lines)
250                             print(hello?)
251                             return True
252 
253                     else:
254                         lines.insert(j,"\\t\\tserver {server} weight {weight} maxconn {maxconn}\\n".format(**dict[record]))
255                         f = open(HAproxy, w+, encoding=utf-8)
256                         f.writelines(lines)
257                         f.close()
258                     return True
259 
260         else:
261             add_backend(dict[backend])
262             print(dict[record])
263             f = open(HAproxy, a+, encoding=utf-8)
264             line = "\\n\\t\\tserver {server} weight {weight} maxconn {maxconn}".format(**dict[record])
265             f.writelines(line)
266             f.close()
267 
268     except EOFError as msg:
269         print(msg)
270 
271 def del_server_info_under_backend(str):
272     try:
273         f = open(HAproxy, r+, encoding=utf-8)
274         lines = f.readlines()
275         l_backend = []
276         for line in lines:
277             if line.strip().startswith(backend):
278                 l_backend.append(line.strip())
279         f.close()
280 
281         for i in range(len(lines)):
282             if str in lines[i].strip():
283                 print(Delete server info: %s % str)
284                 p = lines.index(lines[i])
285                 if (lines[p-1].strip().startswith(backend)) and (lines[p].strip() in lines[-1]):
286                     lines.remove(lines[p])
287                     # print(‘No actived server under %s, remove backend‘%lines[p-1].strip().strip(‘\\n‘))
288                     lines.remove(lines[p - 1])
289                     break
290                 elif (lines[p-1].strip().startswith(backend))and (lines[p+1].strip().startswith(backend)):
291                     lines.remove(lines[p])
292                     # print(‘No actived server under %s, remove backend!‘%lines[p - 1].strip().strip(‘\\n‘))
293                     lines.remove(lines[p - 1])
294                     break
295                 else:
296                     lines.remove(lines[p])
297                     break
298         f = open(HAproxy, w+, encoding=utf-8)
299         f.writelines(lines)
300         return True
301 
302     except EOFError as msg:
303         print(msg)
304 
305 
306 def backup_server_file(original_file,new_file):
307     try:
308         with open(original_file,r,encoding=utf-8) as f1, open(new_file,w,encoding=utf-8) as f2:
309             lines = f1.readlines()
310             for line in lines:
311                 f2.writelines(line)
312         str = Backing up is Done!
313         print(str.center(40,*))
314     except EOFError as msg:
315         print(msg)
316 
317 
318 if __name__ == "__main__":
319     counter = 0
320     bValue = True
321     while True:
322         counter +=1
323         if counter == 3:
324             print(You`ve entered invalid info for 3 times, system quit!)
325             exit()
326 
327         else:
328 
329             row_input = input("Do you want to operate server file?(y/n) ")
330             if row_input in [n,N,q,Q]:
331                 print(Quit)
332                 exit()
333             elif row_input in [y,Y]:
334                 bValue = True
335                 while True:
336                     print(Backing up your server file as HAproxy_bak on your server..)
337                     backup_server_file(HAproxy, HAproxy_bak)
338                     # row_input = input("1.Show all backend  | 2.Add new backend | 3.Delete backend ")
339                     if bool(show_all_backend(HAproxy)) == True:
340                         while True:
341                             str = The active backends as below:
342                             print(str.center(60,*))
343                             show_all_backend(HAproxy)
344                             row_input = input(1.Add backend server info | 2.Delete backend | 3 View server info under backend | 4 Show all actived server info  )
345                             if row_input in [q,Q]:
346                                 print(Quit)
347                                 exit()
348                             elif row_input == "1":
349                             #     row_input = input(‘Enter the backend url you want to add here -> : ‘)
350                             #     if row_input in [‘q‘, ‘Q‘]:
351                             #         print(‘Quit‘)
352                             #     else:
353                             #         add_backend(row_input)
354                             #         continue
355                                 print(You should add sever info like {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}})
356                                 row_input = input(Enter your new server info here->: )
357                                 if row_input in [q, Q]:
358                                     print(Quit)
359                                     exit()
360                                 else:
361                                     backup_server_file(HAproxy, HAproxy_bak)
362                                     add_server_info_under_backend(row_input)
363                                     continue
364 
365                             elif row_input == "2":
366                                 row_input = input(Enter the backend url you want to delete here -> : )
367                                 if row_input in [q, Q]:
368                                     print(Quit)
369                                     exit()
370                                 else:
371                                     backup_server_file(HAproxy, HAproxy_bak)
372                                     del_backend(row_input)
373                                     continue
374 
375                             elif row_input == "3":
376                                 row_input = input(Enter the backend url under which you want to check server info here-> : )
377                                 if row_input in [q, Q]:
378                                     print(Quit)
379                                 else:
380                                     backup_server_file(HAproxy, HAproxy_bak)
381                                     while True:
382                                         if bool(show_server_info_under_backend(row_input)):
383                                             row_input = input(1.Add or Update sever info | 2. Delete server info | 3. Return to the previous menu)
384                                             if row_input in [q, Q]:
385                                                 print(Quit)
386                                                 exit()
387                                             elif row_input == 1:
388                                                 print(You should add sever info like {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}})
389                                                 row_input = input(Enter your new server info here->: )
390                                                 if row_input in [q, Q]:
391                                                     print(Quit)
392                                                     exit()
393                                                 else:
394                                                     backup_server_file(HAproxy, HAproxy_bak)
395                                                     add_server_info_under_backend(row_input)
396                                                     continue
397                                             # elif row_input == ‘2‘:
398                                             #     pass
399 
400                                             elif row_input == 2:
401 
402                                                 if row_input in [q, Q]:
403                                                     print(Quit)
404                                                     exit()
405                                                 else:
406 
407                                                     if row_input in [q, Q]:
408                                                         print(Quit)
409                                                         exit()
410 
411                                                     else:
412                                                         backup_server_file(HAproxy, HAproxy_bak)
413                                                         row_input = input(Please enter your server info you want to delete here->)
414                                                         del_server_info_under_backend(row_input)
415                                                         continue
416                                             elif row_input == 3:
417                                                 continue
418                                             else:
419                                                 print(Invalid input choice, please re-enter)
420                                                 continue
421 
422                                         else:
423                                             break
424 
425 
426                             elif  row_input == "4":
427                                 if bool(show_all_active_server_info(HAproxy)) == True:
428 
429                                      #show_all_active_server_info(‘HAproxy‘)
430                                      continue
431                                 else:
432                                     backup_server_file(HAproxy, HAproxy_bak)
433                                     row_input = input(There is no actived server info exists, want to add? (y/n))
434                                     if row_input in [q, Q]:
435                                         print(Quit)
436                                         exit()
437                                     elif row_input in [y, Y]:
438                                         print(You should add sever info like {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}})
439                                         row_input = input(Enter your new server info here->: )
440                                         if row_input in [q, Q]:
441                                             print(Quit)
442                                             exit()
443                                         else:
444                                             add_server_info_under_backend(row_input)
445                                             continue
446 
447                             else:
448                                 print(Not invalid choice, please re-enter again.)
449                                 continue
450 
451                     else:
452                         row_input = input(There is no actived server info exists, want to add? (y/n))
453                         if row_input in [q, Q]:
454                             print(Quit)
455                             exit()
456                         elif row_input in [y, Y]:
457                             print(
458                                 You should add sever info like {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}})
459                             row_input = input(Enter your new server info here->: )
460                             if row_input in [q, Q]:
461                                 print(Quit)
462                                 exit()
463                             else:
464                                 backup_server_file(HAproxy, HAproxy_bak)
465                                 add_server_info_under_backend(row_input)
466                                 continue
467                         else:
468                             continue
469 
470 
471 
472 
473             else:
474                 print(Not invalid choice , please re-enter again\\n)
475                 continue
View Code

技术分享

以上是关于Day3-HAproxy的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数