1.文件
global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms option dontlognull listen stats :8888 stats enable stats uri /admin stats auth admin:1234 frontend oldboy.org bind 0.0.0.0:80 option httplog option httpclose option forwardfor log global acl www hdr_reg(host) -i www.oldboy.org use_backend www.oldboy.org if www backend www.oldboy.org server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
2.需求
复制代码 1、查 输入:frontend oldboy.org 获取当前配置下的所有记录 2、新建 输入: arg = { ‘bakend‘: ‘www.oldboy.org‘, ‘record‘:{ ‘server‘: ‘100.1.7.9‘, ‘weight‘: 20, ‘maxconn‘: 30 } } 传入的格式:字典 {"bakend": "ww.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}} 3、删除 输入:frontend oldboy.org 删除该配置下所有记录 4、修改 输入修改的配置名称:frontend oldboy.org 输入修改后配置:格式(字典) 复制代码
3.实现
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import json 4 #查询配置文件 5 def Fetch(context): 6 contextli=[] 7 with open(‘text.txt‘,‘r‘) as f: 8 flag=False 9 for i in f.readlines(): 10 line=(i).strip(‘\n‘) 11 if line.find(context) != -1:#找输入字符串的下标,如果不等于-1,说明找到了,flag=True,开始往列表写入 12 flag=True 13 continue 14 if flag: #找到下标,flag=True后进入这里 15 if line.startswith(‘ ‘)==False: #如果找到开头不是空格的行,输出flag=False,不在写入 16 flag=False 17 if flag==True: 18 contextli.append(line) #把符合要求的值写入列表 19 return contextli 20 #添加配置文件 21 def Add(dicdic): 22 #dicdic=eval(dicdic) #把传入的字符串转换成字典 23 for k, v in dicdic.items(): 24 if type(dicdic[k])==dict: #如果传入的key对应的value是字典则把k,v的值给列表li 25 li=[k,v] 26 else: #如果对应的value不是字典 27 with open(‘text.txt‘,‘r+‘) as f: 28 for i in f.readlines(): 29 line=(i).strip(‘\n‘) 30 if line.find(k+" "+v) != -1:#查看循环读出的行是否有传入的key,value,#如果有,则提示已存在,退出程序 31 print("已存在,不能添加") 32 exit() 33 li1=[k,v] #把key和key对应的字典赋值给列表li1 34 f.write(‘\n‘+li1[0]+‘ ‘+li1[1]) 35 for k1,v1 in li[1].items(): 36 f.write(‘\n‘+"".center(8)+str(k1)+‘ ‘+str(v1)) 37 return "添加成功" 38 #修改配置文件 39 def Amend(oldcontext,newcontext): 40 with open(‘text.txt‘,‘r‘) as f: 41 li=[] 42 cost=0 43 flag=True 44 for line in f.readlines(): 45 if flag==True: 46 if line.find(oldcontext) == -1: #没找到要修改的内容之前把每行加入列表li 47 li.append(line) 48 else: 49 flag=False #找到呀修改的内容之后返回flag=False,不在加入列表 50 cost=1 #找到修改的内容后进入下面的if else 51 continue 52 if cost==1: 53 #newcontext=eval(newcontext) 54 for k, v in newcontext.items(): 55 if type(newcontext[k])==dict: #如果传入的字典里的key对应的是字典,则把key,value给列表li1 56 li1=[k,v] 57 else: 58 li2=[k,v] #否则,赋给列表li2 59 aa=(‘\n‘+li2[0]+‘ ‘+li2[1]) #把配置文件的开头先append到列表 60 li.append(aa) 61 for k1,v1 in li1[1].items(): #对key对应的字典进行循环 62 bb=(‘\n‘+"".center(8)+str(k1)+‘ ‘+str(v1)) #按格式加到列表li 63 li.append(bb) 64 li.append(" ") 65 cost=cost+1 #不再进入这个if else 66 if line.startswith(‘ ‘)==False: #如果找到不是空格开头的行,flag=True,继续进入第一个if else 67 flag=True 68 o=open(‘text.txt‘,‘w‘) 69 for i in li: 70 o.write(i) #把新列表的值重新写入文件 71 o.close() 72 return "修改成功" 73 #移除配置文件 74 def Remove(context): 75 with open(‘text.txt‘,‘r+‘) as f: 76 flag=True 77 li=[] 78 for line in f.readlines(): 79 if flag==True: 80 if line.find(context) == -1:#如果没用匹配,append到列表 81 li.append(line) 82 else: #找到要删除的关键字符,flag=False 83 flag=False 84 continue 85 if flag==False: #flag=False后进入这里 86 if line.startswith(‘ ‘)==False: #如果找到开头不是空格的行,输出flag=True 87 flag=True #flag=True,跳会上面继续append到列表 88 o=open(‘text.txt‘,‘w‘) 89 for i in li: 90 o.write(i) #把列表的值重新写入文件 91 o.close() 92 return "删除成功" 93 #主程序 94 if __name__ == ‘__main__‘: 95 while True: 96 print ‘1、获取;2、添加;3、删除;4、修改;q、退出‘ 97 num = raw_input(‘请输入序号:‘) 98 if num == ‘1‘: 99 data = raw_input(‘请输入内容:‘) #最好输入配置文件全部开头,避免重复,比如:frontend oldboy.org 100 for i in Fetch(data): 101 print i 102 elif num == ‘2‘: 103 data = raw_input(‘请输入(字典):‘) 104 data=json.loads(data) #str转换成字典 105 ‘‘‘ 106 传入的格式:字典 107 {"bakend": "ww.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}} 108 ‘‘‘ 109 print Add(data) 110 elif num == ‘3‘: 111 data = raw_input(‘请输入内容:‘) 112 print Remove(data) 113 elif num == ‘4‘: 114 data = raw_input(‘请输入修改的内容:‘) #输入像查询一样的内容即可 115 data1 = raw_input(‘修改为(输入字典):‘) #输入字典 116 data1=json.loads(data1) 117 print Amend(data,data1) 118 elif num == ‘q‘: 119 break 120 else: 121 print("输入错误,请重新输入")
时间: 2024-10-16 22:10:01