〖Demo〗-- HAproxy配置文件操作

【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()

 

转载于:https://www.cnblogs.com/SHENGXIN/p/8088726.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos调整页面大小_这2种方法都能调整PDF文档的纸张大小

PDF文件大家都很熟悉了,在工作中是经常会遇到的,但是想对PDF文件进行修改和编辑的可能很多人都觉得为难。比如当你在阅读PDF文件时,发现PDF文档的页面尺寸不是自己想要的尺寸,要如何修改PDF的纸张大小呢?以下介绍2种简…

罗小黑用flash做的_中影星美好看罗小黑战记正式定档!

《罗小黑战记》定档的消息一发出,原微博已被转发45000次,大家真是太激动啦~罗小黑官博下热闹非凡在B站也同样壮观原是猫妖的小黑,在盗取宝珠后逃走,但被发现,而化为了一只猫,在街头流浪时,被小白…

An Overview of Cisco IOS Versions and Naming

An Overview of Cisco IOS Versions and Naming http://www.ciscopress.com/articles/article.asp?p2106547 By Sean Wilkins.Article is provided courtesy of Cisco Press.Date: Jun 28, 2013.SaveDiggDel.icio.usPrint Article Information Article Description   Versio…

ubuntu 查找qt是否安装_Ubuntu Qt 安装教程--快速下载连接(网盘)

做个笔记以便忘了(这个笔记我用到三次了,现在都能记住步骤了,Ubuntu也装了四五次了。折腾。。。)先下载Qt的安装包 .run文件 (三个途径下载)1官方: http://download.qt.io/archive/qt/5.12/5.12…

微信iOS收款到账语音提醒开发总结

本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/yYCaPMxHGT9LyRyAPewVWQ 作者:littleliang 一、背景 为了解决小商户老板们在频繁交易中不…

Jmeter连接Mysql

1、将mysql-connector-java-5.1.7-bin.jar放入Jmeter安装目录的bin文件夹中 2、在顶层目录<测试计划>中加载驱动 3、添加JDBC Connection Configuration 4、配置数据库信息 1&#xff09;Variable Name不能为空 2&#xff09;DataBase URL 格式为&#xff1a;jdbc:mysql:…

胃net的放大内镜_李锐:内镜下的早癌诊断

写在前面&#xff1a;这是一篇很专业的文章&#xff0c;因为很多术语对于大多数朋友来说看的不是很明白。简单讲&#xff0c;这是让消化内镜医生看的&#xff0c;说的是怎么样才能发现更多的早癌。这里需要说明一下&#xff0c;很容易造成误解&#xff1a;早癌就在那里&#xf…

单线程多线程_面试系列 redis为什么快amp;单线程amp;多线程

redis为什么这么快C语言实现&#xff0c;执行速度快纯内存操作&#xff0c;数据读写在内存中&#xff0c;异步持久化到磁盘丰富和高效的数据结构基于非阻塞的I/O多路复用机制单线程避免了上下文切换Redis单线程redis单线程的核心就是它基于一个假设&#xff1a;它在内存中执行的…

c语言float二进制输出代码_C语言学习笔记——学前知识概述

将我大一学习C语言时做的笔记拿来与大家分享&#xff0c;内容比较浅显&#xff0c;比较适合初学者&#xff0c;如有错误还请见谅&#xff0c;提出改正&#xff0c;谢谢&#xff01;前言&#xff1a;此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误&#xff0c;希望…

[Codevs] 1081 线段树练习 2 ----“分块!”

1081 线段树练习 2 时间限制: 1 s空间限制: 128000 KB题目等级 : 大师 Master题目描述 Description给你N个数&#xff0c;有两种操作 1&#xff1a;给区间[a,b]的所有数都增加X 2&#xff1a;询问第i个数是什么&#xff1f; 输入描述 Input Description第一行一个正整数n&#…

[Codevs] 1082 线段树练习3

1082 线段树练习 3 时间限制: 3 s空间限制: 128000 KB题目等级 : 大师 Master题目描述 Description给你N个数&#xff0c;有两种操作&#xff1a; 1&#xff1a;给区间[a,b]的所有数增加X 2&#xff1a;询问区间[a,b]的数的和。 输入描述 Input Description第一行一个正整数n&a…

双摄测距原理_双摄像头系列原理深度剖析

http://www.dzsc.com/data/2016-7-13/110171.html如之前文章介绍&#xff0c;双摄像头的应用主要分为&#xff1a;距离相关的应用&#xff0c;光学变焦&#xff0c;暗光补偿以及3D拍摄和建模。每种应用的原理都有些不同&#xff0c;我们就分别介绍一下相关的原理&#xff1a;从…

利用Maven快速创建一个简单的spring boot 实例

Spring Boot的好处&#xff1a;spring boot 大大减少了 使用spring的配置 和大量 xml 文件&#xff0c;并有效解决的项目之间的依赖问题&#xff0c;为想使用 spring项目 大大减轻的工作量 1.先创建一个Maven项目 2.配置pom.xml <project xmlns"http://maven.apache.or…

mysql主从同步原理_mysql主从同步以及原理

mysql主从复制介绍当前的生产工作中&#xff0c;大多数应用的mysql主从同步都是异步的复制方式&#xff0c;即不是严格实时的数据同步。实时和异步&#xff1a;同步复制: 指的是客户端连接到MySQL主服务器写入一段数据,MySQL主服务器同步给MySQL从服务器需要等待从服务器发出同…

mysql不兼容_mysql5.7 不兼容问题

通过navicat工具导入psc数据库备份文件&#xff0c;报错如下&#xff0c;mysql版本5.7执行如下语句不通过DROP TABLE IF EXISTS guard_user;CREATE TABLE guard_user (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 操作员编号,login_account varchar(16) NOT NULL …

MSSQL 如何采用sql语句 获取建表字段说明、字段备注、字段类型、字段长度

转自: http://www.maomao365.com/?p4983 <span style"color:red;font-weight:bold;">下文讲述-采用sql脚本获取指定表中所有列对应的说明信息,脚本如下所示:</span> SELECT (case when a.colorder1 then d.name else end) [数据表名称], a.colorder […

mysql数据库层次结构_MySQL逻辑分层介绍

上一篇文章主要介绍了MySQL在Ubuntu18.04系统上的安装&#xff0c;以及安装过程中可能会遇到的一些问题的解决方案。在这篇文章里&#xff0c;开始介绍MySQL数据库的逻辑分层。通过本文的介绍&#xff0c;可以大致了解到MySQL的语句从客户端发出请求后&#xff0c;在服务器经历…

python 只去除英文_如何使用 Python 制作词云(Word Cloud)-英文词云篇

wordcloud 安装报错与解决虽然网络上也有各种工具可以一键生成词云&#xff0c;但是使用Python制作词云感觉是一件很酷的事情。作为一个 Python 小白&#xff0c;使用 Python 的过程并不那么轻松。比如最最基础的&#xff0c;用Python 制作词云需要安装第三方库 wordcloud&…

webstrom中打包的详细_webpack打包体积优化

webpackwebpack打包体积优化webpack官方定义webpack 是一个模块打包器。webpack 的主要目标是将 JavaScript 文件打包在一起&#xff0c;打包后的文件用于在浏览器中使用&#xff0c;但它也能够胜任转换(transform)、打包(bundle)或包裹(package)任何资源(resource or asset)。…

201621123003《Java程序设计》第一周学习总结

#1. 本周学习总结 本周主要学习了Java的jdk、jvm、jre等基本概念&#xff0c;Java的发展史&#xff0c;知道Java语言的跨平台、面向对象等主要特点&#xff0c;简单了解了Java程序的编译和运行过程。对于学习Java&#xff0c;我的学习和编程能力还是很吃力的&#xff0c;但还是…