需求如下:

  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. PHP将两个数组相加

    $arr_a=[1=>1,2=>2,3=>3];$arr_b=[1=>'a',4=>4];print_r($arr_a+$arr_b);返回结果:Array ( [1] ...

  2. Fiddler 4 实现手机App的抓包

    Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求. Fiddler能捕获IOS设备发出的请求,比如IPhone, IPad, MacBook ...

  3. Assetbundle2

    Assetbundle可以将Prefab封装起来,这是多么方便啊! 而且我也强烈建议大家将Prefab封装成Assetbundle,因为Prefab可以将游戏对象身上带的游戏游戏组件.游戏脚本.材质都 ...

  4. 软工实践Beta冲刺(6/7)

    队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...

  5. org.json.Json Object的put和append方法比较

    json.append(key,value) 会把 value 包装成一个数组 JSONObject append = new JSONObject().append("a", & ...

  6. sessionStorage & URL Origin

    sessionStorage & URL Origin same origin https://developer.mozilla.org/en-US/docs/Web/API/Window/ ...

  7. Docker实战系列一:初识Docker for Windows

    windows下安装Docker官网教程Install Docker for Windows Docker配置官网教程Get started with Docker for Windows

  8. oracle补充

    索引 索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据的I/O次数,因此可以显著的提高性能 创建索引的SQL 把下面表中的na ...

  9. css 给body设置背景图片

  10. 先查出已知的 然后将未知的当做 having里面的条件

    先查出已知的 然后将未知的当做 having里面的条件