需求:

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

  1. s12-day03-work01 python修改haproxy配置文件(初级版本)

    #!/usr/local/env python3 ''' Author:@南非波波 Blog:http://www.cnblogs.com/songqingbo/ E-mail:qingbo.song ...

  2. Python3.5 day3作业二:修改haproxy配置文件。

    需求: 1.使python具体增删查的功能. haproxy的配置文件. global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 lo ...

  3. python基础-修改haproxy配置文件

    需要掌握的知识: 1.函数 2.文件处理 3.tag的用法 4.程序的解耦 需求: 1:查询 2:添加 3:删除 4:修改 5:退出 haproxy.conf 配置文件内容: global log 1 ...

  4. 用python修改haproxy配置文件

    需求: 当用户输入域名的时候,显示出来下面的记录 当用户需要输入添加纪录的时候,添加到你需要的那个域名下面 global log 127.0.0.1 local2 daemon maxconn 256 ...

  5. Python3学习之路~2.10 修改haproxy配置文件

    需求: .查 输入:www.oldboy.org 获取当前backend下的所有记录 .新建 输入: arg = { 'bakend': 'www.oldboy.org', 'record':{ 's ...

  6. 5.修改haproxy配置文件

    需求: 1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: arg = { 'backend': 'www.oldboy.org', 'record':{ ...

  7. python基础-4.1 open 打开文件练习:修改haproxy配置文件

    1.如何在线上环境优雅的修改配置文件? 配置文件名称ini global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 in ...

  8. 作业---修改haproxy配置文件

    #查询 f=open("C:\\aaaaaaaaaaaaa\\haproxy.txt", "r", encoding="utf-8") ha ...

  9. python编辑修改haproxy配置文件--文件基础操作

    一.需求分析 有查询,删除,添加的功能 查询功能:查询则打印查询内容,如果不存在也要打印相应的信息 删除功能:查询到要删除内容则删除,打印信息. 添加功能:同上. 二.流程图 三.代码实现 本程序主要 ...

随机推荐

  1. 金蝶K/3 审批相关SQL语句

    金蝶K/3 审批相关SQL语句 --http://127.0.0.1/lightApp/todocheckTask.aspx?AccID=84&&FClasstypeID=1071&a ...

  2. scrapy 通过FormRequest模拟登录再继续

    1.参考 https://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider.start_requests 自动提交 ...

  3. vmware虚拟机使用静态IP上网的方法

    本文转自:https://www.cnblogs.com/flyfish919/p/7083523.html 作者:云里有棵树 我的物理机使用的是路由wifi,然后虚拟机使用静态IP上网的方法总结如下 ...

  4. Valgrind与内存问题

    1 简介 "Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具.Valgrind这个名字取自北欧神话中英灵殿的入口. Valgrind的最初作者是Julian Sew ...

  5. SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题——Jason niu

    %SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题——Jason niu X = [16.4700 96.1000 16.4700 94.4400 20.0900 92.5400 2 ...

  6. 堡垒机jumpserver测试记录--使用

    快速入门 截图就不放了,官网都有,这里只是就遇到的一些问题做下记录 必备条件 一台安装好 Jumpserver 系统的可用主机(堡垒机) 一台或多台可用的 Linux.Windows资产设备(被管理的 ...

  7. BZOJ 4763

    有毒 第一开始一直RE,我就把dfs改成了bfs 结果一直TLE,自己造的数据要跑8s 因为 lxl 等人讲随机 $\sqrt{n}$ 个点作为关键点就可以了 但是我把随机改成深度有关就AC了,而且那 ...

  8. (83)Wangdao.com第十七天_JavaScript 定时器

    JavaScript 提供定时执行代码的功能,叫做 定时器(timer). 主要由 setTimeout() 和 setInterval() 这两个函数来完成.它们向任务队列添加定时任务 setTim ...

  9. [LeetCode] Bricks Falling When Hit 碰撞时砖头掉落

    We have a grid of 1s and 0s; the 1s in a cell represent bricks.  A brick will not drop if and only i ...

  10. HttpClient学习--HttpClient的POST请求过程源码解读

    众所周知,HttpClient是对JDK net包下网络相关操作的一个封装,所以阅读的前提待知道HttpClient底层肯定是通过Socket来进行网络通信的. 下面来简单的捋一下代码,在进入繁杂.深 ...