Python小程序之动态修改Haproxy配置文件
需求如下:
1、动态的查询添加删除haproxy节点信息
2、程序功能:add(添加)、Del(删除)、Query(查询)
3、添加时实例字符串为: {'backend': 'www.oldboy.com','record': {'server': '100.1.7.9','weight': 20,'maxconn': 30}}
代码:
# Author:Lee Sir
import sys haproxyconf = r"E:\Python练习脚本\day3\haproxy.txt"
haproxyconf_temp = r"E:\Python练习脚本\day3\haproxy_temp.txt" def openconf(file,mode):
fd = open(file,'%s' % mode)
return fd def closeconf(fd):
fd.close() def user_choice():
choice = ['Query','Add','Delete','Update']
for index,key in enumerate(choice):
print(index,key)
while True:
userchoice = input('Please number for your Choice: ')
if userchoice.isdigit() and int(userchoice) >= 0 and int(userchoice) < 3:
return userchoice
elif userchoice == 'q' or userchoice == 'Q':
sys.exit('Bye Bye')
else:
print('Input Error,Please try again') def listnode():
conf = openconf(haproxyconf,'r')
key = input('Please Input Your Query Node Name: ')
count = 0
for line in conf:
if key in line and line.strip().startswith('backend'):
result = True
nodenumber = 1
while result:
nodeinfo = conf.readline()
if nodeinfo.strip().startswith('server'):
print('节点 %s:%s ' % (nodenumber,nodeinfo.strip()))
count += 1
nodenumber += 1
else:
result = False
if count == 0:
print('\033[31;1mNo Node for %s\033[0m' % key)
closeconf(conf) def delenode():
conf = openconf(haproxyconf,'r')
key = input('Please input Delete Node: ')
conf_list = []
for line in conf:
if line.strip().startswith('backend'):
if key in line:
conf_list.append(line)
while True:
nodeinfo = conf.readline()
if nodeinfo.strip().startswith('server'):
conf_list.append(nodeinfo)
else:
break
else:
if len(conf_list) > 0:
old_conf = openconf(haproxyconf,'r')
write_conf = openconf(haproxyconf_temp,'w')
for info in old_conf:
if info in conf_list:
continue
else:
write_conf.write(info)
else:
closeconf(old_conf)
closeconf(write_conf)
print('Delete Node:%s Successful!' % key )
else:
sys.exit('No Node info for %s' % key) def addnode():
conf = openconf(haproxyconf_temp,'r')
# nodeinfo = '''{'backend': 'www.oldboy.com','record': {'server': '100.1.7.9','weight': 20,'maxconn': 30}}'''
nodeinfo = input('Please input Your Add node info:')
nodeinfo = eval(nodeinfo)
if isinstance(nodeinfo,dict):
backend = nodeinfo['backend']
for line in conf:
if line.strip().startswith('backend'):
if backend in line:
sys.exit('The node are exist!')
else:
add_wirte = openconf(haproxyconf_temp,'a')
backend = nodeinfo['backend']
record = nodeinfo['record']
server = record['server']
weight = record['weight']
maxconn = record['maxconn']
node_info = '''\nbackend %s\n\t\tserver %s %s weight %s maxconn %s
''' % (backend,server,server,weight,maxconn)
add_wirte.write(node_info)
print('The Node:%s Add Successful!' % backend )
else:
sys.exit('Input Error,bye bye!') def main():
userchoice = user_choice()
if userchoice == '':
listnode()
elif userchoice == '':
addnode()
elif userchoice == '':
delenode() if __name__ == '__main__':
main()
Python小程序之动态修改Haproxy配置文件的更多相关文章
- 微信小程序 JS动态修改样式
微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...
- 微信小程序 setData动态修改数据数组的值
1.问题说明 有一组数据,用来存储图片路径,动态修改图片的路径来上传图片,而小程序JS只能通过事件获取时机和setData方法修改数据来改变view. 而用这样写的方式明显是错误的 2.解决办法 字符 ...
- 小程序如何动态修改标题navigationBarTitleText
首先我们先设置标题.进入页面所在的json文件加入以下代码即可成功设置: "navigationBarTitleText": "我是标题啊!", 然后修改这个标 ...
- 怎么样通过编写Python小程序来统计测试脚本的关键字
怎么样通过编写Python小程序来统计测试脚本的关键字 通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数.业务函数需要修改,那么势必要找出那些引 ...
- 微信小程序-04-详解介绍.json 配置文件
致我自己:小程序开发不是简单一两天的事,一两天只能算是了解,有时候看多了会烦,感觉很熟悉了,其实只是对表面进行了解,对编程却知之甚少,小程序开发不是简单的改模板,一两天很多部分改模板可能都做不到,坚持 ...
- 微信小程序,动态改变样式
小程序目前没有修改样式api,但是可以利用数据绑定实现动态改变样式,可以用view标签模拟page然后改变view标签的样式,以下案例演示了如果改变page背景颜色: <view class=& ...
- Day1:第一个python小程序
Day1:第一个python小程序与开发工具Pycharm 一.Hello World C:\Users\wenxh>python Python 3.6.2 (v3.6.2:5fd33b5, J ...
- 微信小程序之动态获取元素宽高
我以前一直以为微信小程序不能动态获取view元素的宽高.但是自从看到: wx.createSelectorQuery() 这个api接口,以前的某些问题就能得到解决了... 那么,这个api接口怎么用 ...
- Python 小程序,对文件操作及其它
以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行 ...
随机推荐
- Vue学习(二):class与style绑定
<!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml&q ...
- MyEclipse主题设置
1. 打开网页: http://eclipsecolorthemes.org/ 选择自己喜欢的主题,并下载(下载epf文件) 我下载的是 Vibrant Ink 2. 下载完成后,打开myeclips ...
- sqlserver 找出字符第N次出现的位置
[1编写函数]CREATE FUNCTION IndexOf(@str VARCHAR(500),@value VARCHAR(50),@posIndex INT)RETURNS int AS BEG ...
- [译]如何撤销git仓库里的所有修改?
原文来源:https://stackoverflow.com/questions/29007821/git-checkout-all-the-files 问: 如何撤销我在我git仓库所做的所有修改? ...
- select2赋值需要注意
$('#mySelect2').val(data.id).trigger('change'); 需要在赋值后,调用下change事件,不然的话展示值的span不会显示select最新的选中值.
- 【Linux】Linux修改openfile和max user processes?
#当时测试虚机为centos7.4版本: # 在/etc/security/limits.conf文件末尾添加如下命令: * soft nproc 1314 * hard ...
- [C/C++] static在C和C++中的用法和区别
转自:http://blog.csdn.NET/skyereeee/article/details/8000512 static的三个作用: (1)局部静态变量 (2)外部静态变量/函数 (3)静态数 ...
- 创建一个doc对象时候 如果读取了一个已存在的xml对象时候 该xml对象的结构已存在doc中 当改变该doc结构时候 不需要创建新的doc对象
创建一个doc对象时候 如果读取了一个已存在的xml对象时候 该xml对象的结构已存在doc中 当改变该doc结构时候不 需要创建新的doc对象 直接添加即可 他会同步过去
- 2017 Multi-University Training Contest - Team 3 RXD and functions(NTT)
题解: 我是参考的 http://blog.csdn.net/qq_32570675/article/details/76571666 这一篇 orz 原来可以这么变换,涨姿势 代码: #includ ...
- SPOJ Distinct Substrings(后缀数组求不同子串个数,好题)
DISUBSTR - Distinct Substrings no tags Given a string, we need to find the total number of its dist ...