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 小程序,对文件操作及其它
以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行 ...
随机推荐
- 系统学习Docker 践行DevOps理念
Docker代表的容器技术是近两年的大热技术,和人工智能.区块链等热点不同,容器技术的门槛并不高,每一个开发.测试.运维人员都能在日常工作中掌握和使用,是当今IT从业人员的必备技能之一.本课程会带大家 ...
- Spring Boot 学习随记
微架构的思想在各大互联网公司越来越普及,特此记录Spring Boot的一些细节问题! 网上spring-boot的教程一堆一堆,就没有必要再详细记录了 1:建议通过Idea 来创建spring-bo ...
- %matplotlib inline
整理摘自 https://zhidao.baidu.com/question/1387744870700677180.html %matplotlib inline是jupyter notebook里 ...
- 并查集——poj1182(带权并查集高阶)
题目链接:食物链 题解:点击 说一声:这题关系推导值得学习.
- EasyUI 布局 - 动态添加标签页(Tabs)
首先导入js <link rel="stylesheet" href="../js/easyui/themes/default/easyui.css"&g ...
- 利用calibre抓取新闻
Adding your favorite news website calibre has a powerful, flexible and easy-to-use framework for dow ...
- Linux的常用目录学习笔记
首先,先查看一下Linuxi的一级目录结构: ls: /:表示根目录,文件系统的入口,最高一级目录. bin和sbin:命令保存目录,bin是普通用户能,sbin是root用户用的:/bin存放着系统 ...
- 【bzoj3196】Tyvj 1730 二逼平衡树 线段树套Treap
题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在区间内的前驱(前驱定义 ...
- [HDU3710] Battle Over Cities [树链剖分+线段树+并查集+kruskal+思维]
题面 一句话题意: 给定一张 N 个点, M 条边的无向连通图, 每条边上有边权 w . 求删去任意一个点后的最小生成树的边权之和. 思路 首先肯定要$kruskal$一下 考虑$MST$里面去掉一个 ...
- 从零开始实现Vue简单的Toast插件
在前端项目中,有时会需要通知.提示一些信息给用户,尤其是在后台系统中,操作的正确与否,都需要给与用户一些信息. 1. 实例 在Vue组件的methods内,调用如下代码 `this``.$toast( ...