修改haproxy配置文件
转载自:http://blog.csdn.net/ygqygq2/article/details/53343847
心得: 最开始的时候看对方的代码一脸蒙蔽。后面一行行的代码去做类似的操作,慢慢地想通了,
程序中出现了一个 global 的内部宣告全局的变量。这个是我觉得不好的地方。还有一个writer 函数可以和add 合并在一起,
最后那个写的确实让我想了很久。不过已经过去了,过程很美妙,没有编程基础的伙伴们,建议多抄一些代码。先抄一遍代码,
后面再去理解,这样记忆更深刻。
查 输入: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 } }
作业需求
HAproxy配置文件操作
1. 根据用户输入,输出对应的backend下的server信息
2. 可添加backend 和sever信息
3. 可修改backend 和sever信息
4. 可删除backend 和sever信息
5. 操作配置文件前进行备份
6. 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建;若信息与已有信息重复则不操作
- [x] 博客
- [x] 查询backend下的server信息
- [x] 添加backend和server信息
- [ ] 修改backend 和sever信息
- [x] 删除backend和server信息
思维导图
大佬写的
#!/usr/bin/env python # _*_coding:utf-8_*_ ''' * Created on 2016/11/7 21:24. * @author: Chinge_Yang. ''' import shutil import json def list_function(): print("Please choice the ID of a action.".center(50, "#")) print("[1] 查询 haproxy.cfg backend 信息.") print("[2] 添加 haproxy.cfg backend 信息") print("[3] 删除 haproxy.cfg backend 信息") print("End".center(50, "#")) def fetch(backend): # 取出backend相关server信息 result = [] # 定义结果列表 with open("haproxy.cfg", "r", encoding="utf-8") as f: # 循环读取文件 flag = False # 标记为假 for line in f: # 以backend开头 line = line.strip() if line.startswith("backend") and line == "backend " + backend: flag = True # 读取到backend开头的信息,标记为真 continue # 下一个backend开头 if flag and line.strip().startswith("backend"): flag = False break # server信息添加到result列表 if flag and line.strip(): result.append(line.strip()) return result def writer(backend, record_list): ##3条 with open("haproxy.cfg", "r") as old, open("new.cfg", "w") as new: flag = False for line in old: if line.strip().startswith('backend') and line.strip() == "backend " + backend: flag = True new.write(line) for new_line in record_list: new.write(" " * 4 + new_line + " ") continue # 跳到下一次循环,避免下一个backend写二次 if flag and line.strip().startswith("backend"): # 下一个backend flag = False new.write(line) continue # 退出此循环,避免server信息二次写入 if line.strip() and not flag: new.write(line) def add(backend, record): global change_flag record_list = fetch(backend) # 查找是否存在记录 这个是 fetch 返回值 print(record_list) if not record_list: # backend不存在, record不存在 with open('haproxy.cfg', 'r') as old, open('new.cfg', 'w') as new: for line in old: new.write(line) # 添加新记录 new.write(" backend " + backend + " ") new.write(" " * 4 + record + " ") print("