学习完成第三阶段,我们来写一个功能:也就是实现对配置文件的backend字段进行增删改查
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 1、查 2 输入:www.oldboy.org 3 获取当前backend下的所有记录 4 2、新建 5 输入: 6 arg = { 'bakend': 'www.oldboy.org', 'record':{ 'server': '100.1.7.9', 'weight': 20, 'maxconn': 30 7 } 8 } 9 3、删除 10 输入: 11 arg = { 'bakend': 'www.oldboy.org', 'record':{ 'server': '100.1.7.9', 'weight': 20, 'maxconn': 30 12 } 13 }
配置文件:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 global 2 log 127.0.0.1 local2 3 daemon 4 maxconn 256 5 log 127.0.0.1 local2 info 6 defaults 7 log global 8 mode http 9 timeout connect 5000ms 10 timeout client 50000ms 11 timeout server 50000ms 12 option dontlognull 13 14 listen stats :8888 15 stats enable 16 stats uri /admin 17 stats auth admin:1234 18 19 frontend oldboy.org 20 bind 0.0.0.0:80 21 option httplog 22 option httpclose 23 option forwardfor 24 log global 25 acl www hdr_reg(host) -i www.oldboy.org 26 use_backend www.oldboy.org if www 27 28 backend www.oldboy.org 29 server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
我的实现思路:
一、流程图:
二、功能实现思路
查询操作:
(1)首先捕获用户输入的域名,并定义一个空的列表用于存放查询域名下方的server内容,生成一个控制器flag = False
(2)开始打开配置文件并按行读取配置文件,开始按行循环判断,直到读取到当前行与用户输入匹配是,将flag变成=True这样就可以出发下面的代码,把server写入到列表中
(3)为了保证不输入多余的所以当匹配下一个以backend开头时将flag=False这样就不会触发下面的代码来写入了
(4)我将获取值得列表return了出来这样就可以使用ccc()自定义函数来格式化输出也可以判断当前域名是否查询到了结果
添加模块:
(1)使用循环可以让用户无需再次匹配关键字进入添加自定义函数中来添加
(2)首先设置几个全局列表用于保存backend信息,和server中的ip以及weight,maxconn的值因为这里可以循环添加所以一开始就将这几个列表清空保证正常添加
(3)首先判断用户输入的域名存在不存在,不存在直接在文件后面添加即可,存在则需要找到匹配的位置然后将所有server信息跟新添加的server信息加入到列表中,在写入,这里用到了老师的方法
(4) 因为使用了os.remove在windows下会出现问题,主要原因是文件以及存在所有我考虑到当添加的时候当前 file.bak文件也就是备份文件就没有必要存在所有我就先将他删除,在把file配置文件改成备份,
最后将新的文件改成配置文件的文件名这样就避免了windows下的错误
删除模块:
删除的原理跟添加差不多,考虑到有两种情况一种是删除整个域名的所有内容,还有的是删除域名下的server,对于整个域名来说只需要匹配成功的地方不写入新的配置文件就好了
至于删除server,只需要先将匹配项读出来写入列表然后,从列表中删除匹配删除的server项,在根据添加的模块进行写入就完成了
回滚功能:
存粹的更改文件名,没啥好说的
三、代码模块
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import flow 5 6 if __name__ == '__main__': 7 print(''' 8 ******************************************************************************* 9 * -欢迎使用自动化修改工具- * 10 * 33[31m !请谨慎修改! 33[0m * 11 * * 12 * F 33[35m<查询>