需求:

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. Javascript我学之六对象工厂函数与构造函数

    本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘. 概述 使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法. 然而,除了这两种常用的对象创建方式,JavaScript ...

  2. gflags_static.lib 无法解析的外部符号 __imp__PathMatchSpec

    在用gflags库时生成提示 无法解析的外部符号 __imp__PathMatchSpec   解决办法:Add "shlwapi.lib" to "Project - ...

  3. cmake教程

    1 教程 cmake界的hello world[2] 进阶的入门教程参考[3] 2 引用 [1] cmake官网 [2] 在 linux 下使用 CMake 构建应用程序 [3] Valgrind官网

  4. 配置ubuntu的超管账号密码

    1 在搭建ubuntu 之后 只有自己的账号 2 root 用户是没有配置好的 需要重新配置 3 passwd root 4 输入新密码即可

  5. Hibernate 双向一对多映射

    附代码: public class Order { private Integer id; private String OrderName; private Customer customer; p ...

  6. Windows server 服务器的端口突然远程连不上了,但是可以远程连接,怎么回事?

    ①:先ping一下,查看网络是否正常:正常的话.telnet IP 端口,查看端口是否开启了. 可以ping,不能telnet就可能是做了端口限制,可以参考以下的步骤: ②:若是不能ping,则可能是 ...

  7. (55)Wangdao.com第八天_JavaScript 字符串中使用 \u 输出Unicode字符

    JavaScript中,使用Unicode 需要 \u 进行转义,格式 "\u十六进制" console.log(\u0031); console.log(\u0041); // ...

  8. (85)Wangdao.com第十八天_JavaScript NodeList 接口,HTMLCollection 接口

    NodeList 接口        HTMLCollection 接口 节点都是单个对象,有时需要一种数据结构,能够容纳多个节点 DOM 提供两种节点集合,用于容纳多个节点:NodeList 和 H ...

  9. jsp 自定义标签解决jsp页面中int时间戳的时间格式化问题

    jsp 自定义标签解决jsp页面中int时间戳的时间格式化问题 之前在项目中根据需求,需要自定义标签,经过查询w3c文档,自己也踩了一些坑,特此记录自定义标签的步骤,下面就以我之前的一个例子中的定义一 ...

  10. 使用 JProbe 调试 Linux 内核(转)

    https://liam.page/2018/04/28/debug-in-Linux-kernel-jprobe/