Python-S13作业-day3-之编辑ha.conf配置文件
需求:
让用户输入字符串类型的字典,实现对配置文件指定,backend www.oldboy.org下的内容进行
* 查询
* 增加:backend record
* 增加record:backend存在,只增加record
思路:
总共分二个函数,三个大功能:
fetch : 查询操作,把指定backend www.oldboy.com 下的内容取出来;
add : 1.连backend都不存在,new_ha_.conf文件末尾添加要加入的backend;
2.backend存在,record也存在,把ha.conf复制一份new_ha_.conf后退出程序;
3.backend存在,record不存在,则在backend下添加record值;
Readme:
这个程序包含两个函数;
这个程序共3个文件:
* 主程序文件
* ha.conf配置文件
*执行程序后会产生新的new_ha_.conf配置文件
主程序:
#!/usr/bin/python env #_*_coding:utf-8 _*_ def fetch(backend): result = [] #存放取出来的结果 with open('ha.conf','r') as f: flag = False for line in f: #一行一行的读取文件里面的内容 if line.strip().startswith("backend") and line.strip() == "backend " + backend: #如果找到的不是空行,开头是backend 并且内容为backend www.oldboy.org,注意:上面backend后面 #有个空格 flag = True #找到了backend continue #跳过这次循环,因为backend不是我们想要的 if flag and line.strip().startswith("backend"): #如果flag为True,并且不是空行,开头是backend,说 #找到了第二行的backend flag = False break #就可以退出程序了 if flag and line.strip(): #如果flag是True,并且不是空行,就把内容全部写入到result中 result.append(line.strip()) return result # res = fetch("buy.oldboy.org") # print(res) def add(backend,record): record_list = fetch(backend) #把上面查找的结果赋值给record_list if not record_list: #空为False,如果record_list不是Ture, #就是看record_list里面有没有结果 with open('ha.conf','r') as old,open("new.conf",'w') as new: for line in old: new.write(line) #把老文件的内容写入到新文件中 new.write(" " * 2 + "backend " + backend + " ") new.write(" " * 8 + record + " ") #在文件最后追加写入想要写入的内容 else: if record in record_list: import shutil shutil.copy("ha.conf","new.conf") #如果在在record_list能够找到record的值,就把ha.conf复制一份 else: record_list.append(record) #在record_list列表中没有想要加入的record的值,就先把record值,加入到record_list中 with open('ha.conf','r') as old,open('new.conf','w') as new: flag = False for line in old: if line.strip().startswith('backend') and line.strip() == "backend " + backend: flag = True #找到想要加入backend,record的行 new.write(line) #就把backend,record写入到新的ha配置文件中 for new_list in record_list: new.write(" " * 8 + new_list + " ")
continue #循环把record_list中的值写入到新的ha配置文件中 if flag and line.strip().startswith("backend"): flag = False #这里是找到了第二个backend,record行; # new.write(line) # continue if line.strip() and not flag: new.write(line) #如果不是空行,并且flag是False,就把内容写入到新ha文件中 #flag是False,说明内容就是buy.oldboy.org块以外的内容 ''' 调用函数方法-: bk = "buy.oldboy.org" rd = "server 100.1.7.90 100.1.7.90 weight 20 maxconn 30000" add(bk,rd) ''' #调用函数方法二: import json r = input("input dic:") dic = json.loads(r) bk = dic['backend'] rd = "server %s %s weight %d maxconn %d"%(dic['record']['server'], dic['record']['server'], dic['record']['weight'], dic['record']['maxconn']) #print(bk) #print(rd) add(bk,rd) #传入的字典类型的字符串格式: #{"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}
ha.conf配置文件:
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 backend buy.oldboy.org server 100.1.7.90 100.1.7.90 weight 20 maxconn 3000