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配置文件的更多相关文章

  1. Python基础篇-day3

    主要内容:字典 集合 文件处理 字符编码 1.字典dict简介dict就是key value值,索引有意义,数据无序 key定义规则:a:不可变--数字.字符串.元组(可变--列表.字典)b:不能重复 ...

  2. JAVA 解析、编辑nginx.conf

    最近工程开发遇到一个需求:用Java去解析并编辑nginx.conf 在github上找到nginx-java-parser工具,项目地址:https://github.com/odiszapc/ng ...

  3. 使用Python Shapefile Library创建和编辑Shapefile文件

    介绍 shapefile是GIS中非常重要的一种数据类型,在ArcGIS中被称为要素类(Feature Classes),主要包括点(point).线(polyline)和多边形(polygon).P ...

  4. Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法

    知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...

  5. [ python ] FTP作业进阶

    作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...

  6. python学习笔记(conf配置文件)

    在优化自己的框架中发现一个问题 有很多参数在很多类中都要使用.是否有什么功能可以帮助优化这些功能 这里我就想到 conf配置文件.整理了下资料 总结下内容如下 #!/usr/bin/env pytho ...

  7. Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件

    Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统  nsswitch.conf配置文件 朋友们,今天我对你们说,在此时此刻,我们虽然遭受种种困难和挫折,我仍然有一个梦 ...

  8. ubuntu 18.04配置静态ip,解决无法上网问题,解决resolv.conf配置文件被覆盖

    Netplan 是 Ubuntu 17.10 中引入的一种新的命令行网络配置实用程序,用于在 Ubuntu 系统中轻松管理和配置网络设置. 它允许您使用 YAML 格式的描述文件来抽像化定义网络接口的 ...

  9. ganglia-gmond.conf配置文件

    运行下列命令可以生成gmond默认配置文件: User@host:$ gmond -t 配置文件由大括弧括起来的几个section组成.这些section可以粗略划分为两个逻辑分类.第一类中的sect ...

随机推荐

  1. [原]Android Studio查询SHA1的方法

    前提:C:\Users\Administrator\AndroidStudioProjects文件夹中存在xxx.jks秘钥文件,比如: 进入Android Studio的Terminal: Micr ...

  2. js的url中传递中文参数乱码,如何获取url中参数问题

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript ...

  3. ASCII Table - ASCII码对照表

    ASCII控制字符 二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义 0000 0000 0 00 NUL ␀ 空字符(Null) 0000 0001 1 01 SOH ␁ 标题开始 00 ...

  4. ASPX版菜刀一句话,留后门专用

    首先解释一下为什么要做这个玩意:众所周知.net一句话是不能插入到文件之中的,除非那个页面使用Jscript编写,但是现在看来 Jscript市场很低,遇到的.net站基本都是C#.新建一个SHELL ...

  5. NodeJs - 序列化

    https://nodejs.org/dist/latest-v5.x/docs/api/querystring.html 序列化: querystring.stringify({name:'Lee' ...

  6. [转]Efficiently Paging Through Large Amounts of Data

    本文转自:http://msdn.microsoft.com/en-us/library/bb445504.aspx Scott Mitchell April 2007 Summary: This i ...

  7. 红,X-Japan

    ktv如果唱这首应该很爽,慢慢学. 红(くれない) 歌手:X JAPAN作词:YOSHIKI作曲:YOSHIKI I could not look back you'd gone away from ...

  8. 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 ...

  9. hadoop MapReduce 笔记

    1.        MapReduce程序开发步骤 编写map 和 reduce 程序–> 单元测试 -> 编写驱动程序进行验证-> 本地数据集调试 ->  部署到集群运行 用 ...

  10. maven资源文件的相关配置

    构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件. src/main/java和src/test/java  这两个目录中的所有*.java文件会 ...