Python-S13作业-day3-之编辑ha.conf配置文件
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
流程图:

Python-S13作业-day3-之编辑ha.conf配置文件的更多相关文章
- Python基础篇-day3
主要内容:字典 集合 文件处理 字符编码 1.字典dict简介dict就是key value值,索引有意义,数据无序 key定义规则:a:不可变--数字.字符串.元组(可变--列表.字典)b:不能重复 ...
- JAVA 解析、编辑nginx.conf
最近工程开发遇到一个需求:用Java去解析并编辑nginx.conf 在github上找到nginx-java-parser工具,项目地址:https://github.com/odiszapc/ng ...
- 使用Python Shapefile Library创建和编辑Shapefile文件
介绍 shapefile是GIS中非常重要的一种数据类型,在ArcGIS中被称为要素类(Feature Classes),主要包括点(point).线(polyline)和多边形(polygon).P ...
- Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法
知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...
- [ python ] FTP作业进阶
作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...
- python学习笔记(conf配置文件)
在优化自己的框架中发现一个问题 有很多参数在很多类中都要使用.是否有什么功能可以帮助优化这些功能 这里我就想到 conf配置文件.整理了下资料 总结下内容如下 #!/usr/bin/env pytho ...
- Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件
Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件 朋友们,今天我对你们说,在此时此刻,我们虽然遭受种种困难和挫折,我仍然有一个梦 ...
- ubuntu 18.04配置静态ip,解决无法上网问题,解决resolv.conf配置文件被覆盖
Netplan 是 Ubuntu 17.10 中引入的一种新的命令行网络配置实用程序,用于在 Ubuntu 系统中轻松管理和配置网络设置. 它允许您使用 YAML 格式的描述文件来抽像化定义网络接口的 ...
- ganglia-gmond.conf配置文件
运行下列命令可以生成gmond默认配置文件: User@host:$ gmond -t 配置文件由大括弧括起来的几个section组成.这些section可以粗略划分为两个逻辑分类.第一类中的sect ...
随机推荐
- linux下查看一个进程的启动时间和运行时间
使用 ps命令 :#ps -A -opid,stime,etime,args ps -A -opid,stime,etime,args 结果: root:src# ps -A -opid,stime, ...
- SQL server 表中如何创建索引?
SQL server 表中如何创建索引?看个示例,你就会了 use master goif db_id(N'zhangxu')is not nulldrop database zhangxugocre ...
- HTML中为何P标签内不可包含块元素?
起因:在做项目时发现原本在DW中无误的代码到了MyEclipse6.0里面却提示N多错误,甚是诧异.于是究其原因,发现块级元素P内是不能嵌套DIV的. 深究:我们先来认识in-line内联元素和blo ...
- sizeToFit()使用心得
sizeToFit()使用心得: 很多的初学者,包括我在内,当初在学习的时候,特别纠结什么时候用这个sizeToFit(). 下面我就来分享一下我的一些使用心得. 一.我们先来看看官方文档对sizeT ...
- 李洪强-C语言3-数组
一.数组的概念 用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. 二.数组的定义 格式: 类型 数组名[元素个数]: 举例:存 ...
- FLTK 1.1.10 VS2010 Configuration 配置
Download FLTK 1.1.10 at here. Download VS2010 Download CMake 2.8.12 I assume you've already installe ...
- [转].net中的认证(authentication)与授权(authorization)
本文转自:http://www.cnblogs.com/yjmyzz/archive/2010/08/29/1812038.html 注:这篇文章主要给新手看的,老手们可能会觉得没啥营养,就请绕过吧. ...
- graph | Max flow
最大流算法,解决的是从一个起点到一个终点,通过任何条路径能够得到的最大流量. 有个Edmond-Karp算法: 1. BFS找到一条增广路径:算出这条路径的最小流量(所有边的最小值)increase: ...
- error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
今天在执行一个protobuf程序时,提示error while loading shared libraries: libprotobuf.so.8: cannot open shared obje ...
- 使用FROM确认按钮(键盘13号键)提交特性并使用ajax.POST提交.
如果又想使用FROM确认按钮(键盘13号键)提交特性 还能继续用AJAX.POST提交.就需要使用return false 来阻止FROM默认提交 代码如下: HTML页面 这里最关键就是用了ret ...