修改haproxy配置文件
需求:
1、查
输入:www.oldboy.org
获取当前backend下的所有记录 2、新建
输入:
arg = {
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
} 3、删除
输入:
arg = {
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
}
分析:
1、输入是字典模式的字符串,需要把字符串转换为字典,对字典进行处理
2、对文件进行copy,读取,覆盖写操作,还要设置标志,进行区分处理
3、函数的调用 功能查:
def fetch(backend):
#取出backend相关的server信息
result = [] #定义结果列表
with open("haproxy","r",encoding="utf-8") as f: #循环读取文件
flag = False #标记为假
for line in f :
#以backend开头
line = line.strip()
if line.startswith("backend") and line == "backend %s" %backend:
flag = True #读取到backend开头的信息,标记为真
continue #直接返回到for语句
#如果遇到下一个backend开头的语句,直接break跳出for语句,因为数据拿完了
if flag and line.startswith("backend"):
flag = False
break
#server信息添加到result列表
if flag and line.strip():
result.append(line)
return result
实现代码:
import shutil
import json def list_function():
print("Please choice the ID of a action.".center(50,"#"))# 50g个字符,提示在中间,不够的#补足
print("【1】.Fetch haproxy backend infomation.")
print("【2】.Add haproxy backend infomation.")
print("【3】.Delete haproxy backend infomation.")
print("【q】.Delete haproxy backend infomation.")
def fetch(backend):
#取出backend相关的server信息
result = [] #定义结果列表
with open("haproxy","r",encoding="utf-8") as f: #循环读取文件
flag = False #标记为假
for line in f :
#以backend开头
line = line.strip()
if line.startswith("backend") and line == "backend %s" %backend:
flag = True #读取到backend开头的信息,标记为真
continue #直接返回到for语句
#如果遇到下一个backend开头的语句,直接break跳出for语句,因为数据拿完了
if flag and line.startswith("backend"):
flag = False
break
#server信息添加到result列表
if flag and line.strip():
result.append(line)
return result def writer(backend,record_list):
with open("haproxy","r") as old,open("haproxy_new","w") as new:
flag = False
for line in old:
if line == "backend %s\n" %backend:
flag = True
new.write(line)
for new_line in record_list:
new.write(""*4 + new_line + "\n")
continue
if flag and line.strip().startswith("backend"):
flag = False
new.write(line)
continue #跳到下一次循环,防止backend写两次
if line.strip() and not flag:
new.write(line) def add(backend, record):
global change_flag
record_list = fetch(backend) #查找是否存在backend
if not record_list and record_list != []: #backend不存在同时record_list是空列表
with open('haproxy','r') as old, open("haproxy_new",'w') as new:
for line in old:
new.write(line)
new.write("\nbackend " + backend + "\n")
new.write(" "*4 + record + "\n")
print("\033[32;1mAdd done\033[0m")
change_flag = True
else: #backend存在
if record in record_list:
print("Record already in it,Nothing to do!")
change_flag = False
else: #backend存在,record不存在
record_list.append(record)
writer(backend,record_list)
print("\033[32;1mAdd done\033[0m")
change_flag = True def delete(backend, record):
global change_flag
record_list = fetch(backend)
if not record_list:
print("Not match the backend,no need delete!".center(50,"#"))
else:
if record in record_list:
record_list.remove(record)
writer(backend,record_list) #写入
print("\033[31;1mDelete done\033[0m")
change_flag = True
else: #backend存在,record不存在
print("Only math backend,no need delete!".center(50,"#"))
change_flag = False
return change_flag def output(servers):
#输出指定backend的server信息
print("Match the server info:".center(50,"#"))
for server in servers:
print("\033[32;1m%s\033[0m" % server)
print("#".center(50,"#")) def operate(action):
global change_flag
if action == "fetch":
backend_info = input("Input backend info:")
result = fetch(backend_info) #取出backend信息
if result:
output(result) #输出获取到的server信息
else:
print("\033[31;1mNot a match is found!\033[0m")
elif action is None:
print("\033[31;1mNothing to do!\033[0m")
else:
backend_record = input("Input backend info(dict):") # 输入的是字符串,
backend_record_dict = eval(backend_record)
backend = backend_record_dict['backend']
record = backend_record_dict['record']
record = "server %s %s weight %s maxconn %s" % (record['server'], record['server'],
record['weight'], record['maxconn'])
if action == "add":
add(backend,record)
elif action == "delete":
delete(backend,record)
if change_flag is True: #文件有修改,才进行文件更新
shutil.copy("haproxy","haproxy_old")
shutil.copy("haproxy_new","haproxy")
result = fetch(backend)
output(result) #输出获取到的server信息 def judge_input():
#判断输入功能编号,执行相应步骤
input_info = input("Your input number:").strip()
if input_info == "1": #查询指定backend记录
action = "fetch"
elif input_info == "2":
action = "add"
elif input_info == "3":
action = "delete"
elif input_info == "q" or input_info == "quit":
exit("Bye,thanks!".center(50,"#"))
else:
print("\033[31;1mInput error!\033[0m")
action = None
return action def main():
exit_flag = False
while exit_flag is not True:
global change_flag
change_flag = False
list_function()
action = judge_input()
operate(action) if __name__ == '__main__':
main()
修改haproxy配置文件的更多相关文章
- s12-day03-work01 python修改haproxy配置文件(初级版本)
#!/usr/local/env python3 ''' Author:@南非波波 Blog:http://www.cnblogs.com/songqingbo/ E-mail:qingbo.song ...
- Python3.5 day3作业二:修改haproxy配置文件。
需求: 1.使python具体增删查的功能. haproxy的配置文件. global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 lo ...
- python基础-修改haproxy配置文件
需要掌握的知识: 1.函数 2.文件处理 3.tag的用法 4.程序的解耦 需求: 1:查询 2:添加 3:删除 4:修改 5:退出 haproxy.conf 配置文件内容: global log 1 ...
- 用python修改haproxy配置文件
需求: 当用户输入域名的时候,显示出来下面的记录 当用户需要输入添加纪录的时候,添加到你需要的那个域名下面 global log 127.0.0.1 local2 daemon maxconn 256 ...
- Python3学习之路~2.10 修改haproxy配置文件
需求: .查 输入:www.oldboy.org 获取当前backend下的所有记录 .新建 输入: arg = { 'bakend': 'www.oldboy.org', 'record':{ 's ...
- 5.修改haproxy配置文件
需求: 1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: arg = { 'backend': 'www.oldboy.org', 'record':{ ...
- python基础-4.1 open 打开文件练习:修改haproxy配置文件
1.如何在线上环境优雅的修改配置文件? 配置文件名称ini global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 in ...
- 作业---修改haproxy配置文件
#查询 f=open("C:\\aaaaaaaaaaaaa\\haproxy.txt", "r", encoding="utf-8") ha ...
- python编辑修改haproxy配置文件--文件基础操作
一.需求分析 有查询,删除,添加的功能 查询功能:查询则打印查询内容,如果不存在也要打印相应的信息 删除功能:查询到要删除内容则删除,打印信息. 添加功能:同上. 二.流程图 三.代码实现 本程序主要 ...
随机推荐
- Java Mybatis实现主从同步
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDat ...
- RxJS操作符(一)
一.创建类操作符 创建类操作符是连接传统编程和响应式编程的强梁 from: 可以把数组.Promise.以及Iterable转化为Observable. fromEvent: 可以把事件转化为Obse ...
- .net core 2.x - 日志 - to elasiticsearch
记录日志到elasticsearch(es),下面简写es,然后我们可以通过kibana可视化的观察日志信息以及统计分析等. 1.起源 年中旬时候,公司有个需求是需要分析用户的地址,需要先分词处理然后 ...
- Noj - 在线强化训练3
状态 题号 竞赛题号 标题 1091 A 求解逆波兰表达式(Calculate the reverse Polish notation) 1017 B 数列 1323 C 穷举n位二进制数 ...
- python yield 和 yield from用法总结
#例1. 简单输出斐波那契數列前 N 个数#缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列#要提高 fab 函数的可复用性,最好不要直接打印出数列,而是返 ...
- BBS+Blog项目开发
BBS+Blog项目开发 目前本项目已经上线,可以直接在GEEK浏览本项目效果:GEEK 1.项目需求 基于ajax和用户认证组件实现登录验证 基于ajax和form组件实现注册功能 系统首页文章列表 ...
- Fragment概述
1 Fragment Fragment是什么? Fragment允许将Activity拆分成多个完全独立封装的可重用的组件,每个组件有它自己的生命周期和UI布局. 每个Fragment都是独立的模块, ...
- python ironicclient源码分析
ironicclient是一个cli工具,用来和用户交互的. 首先写一个简单的例子,获取ironic所有的node节点: from ironicclient import client if __na ...
- Jmeter应用-接口测试
1.BS架构应用性能 2.HTTP协议接口功能与性能 3.FTP协议接口功能与性能 4.Mysql数据库性能 5.MongoDB数据库性能 6.支持自定义Java组件开发 测试计划-右键-添加线程组 ...
- ol图层支持的数据源
ol.source.BingMaps,必应地图的数据: ol.source.Cluster,聚族矢量数据: ol.source.ImageCanvas,数据来源是一个canvas元素,其中数据是图片: ...