需求如下:

  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配置文件的更多相关文章

  1. 微信小程序 JS动态修改样式

    微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...

  2. 微信小程序 setData动态修改数据数组的值

    1.问题说明 有一组数据,用来存储图片路径,动态修改图片的路径来上传图片,而小程序JS只能通过事件获取时机和setData方法修改数据来改变view. 而用这样写的方式明显是错误的 2.解决办法 字符 ...

  3. 小程序如何动态修改标题navigationBarTitleText

    首先我们先设置标题.进入页面所在的json文件加入以下代码即可成功设置: "navigationBarTitleText": "我是标题啊!", 然后修改这个标 ...

  4. 怎么样通过编写Python小程序来统计测试脚本的关键字

    怎么样通过编写Python小程序来统计测试脚本的关键字 通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数.业务函数需要修改,那么势必要找出那些引 ...

  5. 微信小程序-04-详解介绍.json 配置文件

    致我自己:小程序开发不是简单一两天的事,一两天只能算是了解,有时候看多了会烦,感觉很熟悉了,其实只是对表面进行了解,对编程却知之甚少,小程序开发不是简单的改模板,一两天很多部分改模板可能都做不到,坚持 ...

  6. 微信小程序,动态改变样式

    小程序目前没有修改样式api,但是可以利用数据绑定实现动态改变样式,可以用view标签模拟page然后改变view标签的样式,以下案例演示了如果改变page背景颜色: <view class=& ...

  7. Day1:第一个python小程序

    Day1:第一个python小程序与开发工具Pycharm 一.Hello World C:\Users\wenxh>python Python 3.6.2 (v3.6.2:5fd33b5, J ...

  8. 微信小程序之动态获取元素宽高

    我以前一直以为微信小程序不能动态获取view元素的宽高.但是自从看到: wx.createSelectorQuery() 这个api接口,以前的某些问题就能得到解决了... 那么,这个api接口怎么用 ...

  9. Python 小程序,对文件操作及其它

    以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行 ...

随机推荐

  1. Qt irrlicht(鬼火)3D引擎 摄像机旋转问题

    点击打开链接Irrlicht中的摄像有一个函数 setUpVector() if (m_device != 0 ) { core::vector3df rotation(y,x,0.f); m_cam ...

  2. MySQL☞order by与distinct

    asc(升序,默认值)/desc(降序) 1.根据某一列的列值进行升序或者降序操作. select  列名 别名 from 表名 order by 列名 asc/desc 2.根据多个列值进行排序 s ...

  3. Python 中的容器 collections

    写在之前 我们都知道 Python 中内置了许多标准的数据结构,比如列表,元组,字典等.与此同时标准库还提供了一些额外的数据结构,我们可以基于它们创建所需的新数据结构. Python 附带了一个「容器 ...

  4. Java FTP下载文件以及编码问题小结

    问题 之前在开发过程中,遇到了一点问题,我要访问一个FTP服务器去下载文件详细情况如下: 1. 需要传入一个可能为中文的文件名: 2. 通过文件名去FTP上寻找该文件: 3. FTP服务器的命名编码为 ...

  5. PM所该学习的

     最近第二阶段实在大家都是大一大二,面临的考试很多也很难,很多时候就开始松懈了下来.可是做事情就是需要效率和时间,慢慢地,也开始懈怠了下来. 作为pm,首先自己必须比组员先了解云笔记的各种进程,做好沟 ...

  6. 简单理解DES加密算法

    数据加密标准(Data Encryption Standard,DES)是当前使用最广泛的加密体制,对于任意的加密方案,总有两个输入:明文和密钥. 明文是64bits,密钥是56bits 加密过程就是 ...

  7. lintcode-45-最大子数组差

    45-最大子数组差 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 注意事项 子数组最少包含一个数 样例 给出 ...

  8. HDU 2175 汉诺塔IX

    http://acm.hdu.edu.cn/showproblem.php?pid=2175 Problem Description 1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根 ...

  9. jetty maven插件

    <plugins>   <plugin>    <groupId>org.eclipse.jetty</groupId>    <artifact ...

  10. Chromium之文件类型

    .grp: Generate your project. 是由Json(JavaScript Object Notation)(or Python?)来解析,根据环境(OS,Compiler..)来生 ...