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 ...
随机推荐
- [原]Android Studio查询SHA1的方法
前提:C:\Users\Administrator\AndroidStudioProjects文件夹中存在xxx.jks秘钥文件,比如: 进入Android Studio的Terminal: Micr ...
- js的url中传递中文参数乱码,如何获取url中参数问题
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript ...
- ASCII Table - ASCII码对照表
ASCII控制字符 二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义 0000 0000 0 00 NUL ␀ 空字符(Null) 0000 0001 1 01 SOH ␁ 标题开始 00 ...
- ASPX版菜刀一句话,留后门专用
首先解释一下为什么要做这个玩意:众所周知.net一句话是不能插入到文件之中的,除非那个页面使用Jscript编写,但是现在看来 Jscript市场很低,遇到的.net站基本都是C#.新建一个SHELL ...
- NodeJs - 序列化
https://nodejs.org/dist/latest-v5.x/docs/api/querystring.html 序列化: querystring.stringify({name:'Lee' ...
- [转]Efficiently Paging Through Large Amounts of Data
本文转自:http://msdn.microsoft.com/en-us/library/bb445504.aspx Scott Mitchell April 2007 Summary: This i ...
- 红,X-Japan
ktv如果唱这首应该很爽,慢慢学. 红(くれない) 歌手:X JAPAN作词:YOSHIKI作曲:YOSHIKI I could not look back you'd gone away from ...
- Use a PowerShell Module to Easily Export Excel Data to CSV
http://blogs.technet.com/b/heyscriptingguy/archive/2011/07/21/use-a-powershell-module-to-easily-expo ...
- hadoop MapReduce 笔记
1. MapReduce程序开发步骤 编写map 和 reduce 程序–> 单元测试 -> 编写驱动程序进行验证-> 本地数据集调试 -> 部署到集群运行 用 ...
- maven资源文件的相关配置
构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件. src/main/java和src/test/java 这两个目录中的所有*.java文件会 ...