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. Why NHibernate updates DB on commit of read-only transaction

    http://www.zvolkov.com/clog/2009/07/09/why-nhibernate-updates-db-on-commit-of-read-only-transaction/ ...

  2. jquery判断是否出现滚动条

    $(document).ready(function(){ var winH = $(window).height(); //页面可视区域高度 $(window).scroll(function () ...

  3. Nodejs - windows的系统变量(环境变量)

    我的电脑-属性-高级-环境变量-系统变量(s)-Path 将Node.exe所在的路径插入Path的变量值(V)中 如 ;E:\nodejs\ 最终效果 C:\Windows\system32;C:\ ...

  4. OpenStack手动从数据库中删除实例 - ugyn109的专栏 - 博客频道 - CSDN.NET

    由于某种原因我将OpenStack的一个计算节点移除了,但移除前并没有删除在其上运行的实例,后来想通过dash删除这些实例,于是N天过去了,我的dash还显示如下内容:很碍眼是不是?于是我打算手动从数 ...

  5. beta-2阶段组员贡献分分配

    组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 bera-2阶段各组员的贡献分分配如下: 姓名 个人工作量 组长评价 个人评价 团队贡献总分 胡丽娜 9 4 4 4.25 林莉 9 4 ...

  6. Java判断一个时间是否在另一个时间段内

    需求:当时间在凌晨0点至0点5分之间程序不执行. 也就是实现判断当前时间点是否在00:00:00至00:05:00之间 方法: Java代码 : /** * 判断时间是否在时间段内 * * @para ...

  7. Apache Spark源码走读之1 -- Spark论文阅读笔记

    欢迎转载,转载请注明出处,徽沪一郎. 楔子 源码阅读是一件非常容易的事,也是一件非常难的事.容易的是代码就在那里,一打开就可以看到.难的是要通过代码明白作者当初为什么要这样设计,设计之初要解决的主要问 ...

  8. Web 在线文件管理器学习笔记与总结(19)上传文件

    dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...

  9. PHP数组常用函数分类整理

    一.数组操作的基本函数数组的键名和值array_values($arr);  获得数组的值array_keys($arr);  获得数组的键名array_flip($arr);  数组中的值与键名互换 ...

  10. Operand forms

    Operand forms Computer Systems A Programmer's Perspective Second Edition