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("\n" * 2 + "backend " + backend + "\n")
new.write(" " * 8 + record + "\n")
#在文件最后追加写入想要写入的内容
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 + "\n")
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