作业:老板现在给你任务,公司有haproxy配置文件,希望通过python程序可以对ha配置文件进行增删改

  1 # 老板现在给你任务,公司有haproxy配置文件,希望通过python程序可以对ha配置文件进行增删改
  2 #分析:对文件进行增删改,首先需要找到需要修改文件的位置,即必须先把文件读取出来,找到对应
  3 #位置,进行内容的修改,增加和删除;
  4 import json,os  #json模块用于将用户输入的字符串转换为字典
  5
  6 #首先定义fetch函数,同时传入指定参数backend,用来将修改的地方找出来
  7 def fetch(backend):
  8     flag=False #定义flag,目的是为了判断后面是否有可取的backend
  9     fetch_list=[]  #定义空列表,用来存储读取的backend
 10
 11     #以读的形式打开"ha"文件,一行行的读,然后我们将满足我们要求的行存入到列表fetch_list中
 12     #最后返回装有我们指定backend信息的列表
 13     with open("ha.txt","r") as obj:
 14         for line in obj:
 15             if line.strip()=="backend %s" %(backend):
 16                 flag=True
 17                 continue
 18             if line.strip().startswith("backend"):
 19                 flag=False
 20             if flag and line.strip():
 21                 fetch_list.append(line.strip())
 22     return fetch_list
 23
 24 #定义add1函数,并同时传入参数dict_info ,此字典参数包含我们要传入的server信息
 25 def add1(dict_info):
 26     backend_title=dict_info.get("backend")  #首先获取要插入的backend的名称
 27     context_title="backend %s"%(backend_title)  #要插入的backend的整个字段
 28     record_title=dict_info["record"]
 29     #要插入的记录信息
 30     context_record="server %s %s weight %s maxconn %s" %(record_title["server"],record_title["server"],
 31                                                          record_title["weight"],record_title["maxconn"])
 32     #将backend获取,并存储在fetch_list列表中
 33     fetch_list=fetch(backend_title)
 34
 35      #如果要插入的backend存在
 36         #1.首先设定2个标志:flag和has_write
 37             #flag:用于找到要添加的backend下的内容
 38             #has_write:用于判断fetch_list中的内容是否重新写入到了文件
 39         #2.遍历源文件ha:
 40             #1首先逐行读取,并同时进行判断,
 41                 # 1.判断backend是否已经找到,先把backend写入文件,然后找到后将flag设置为True,最后跳出本次循环
 42                 # 2.判断找到的backend里面的record是否为空,若为空将flag设置为False
 43                 # 3.对flag进行判断
 44                     #1.将flag为True的record从fetch_list写入到文件中,在这里面同时要进行是否已经写入的判断,
 45                     # 即定义has_write的作用
 46                     #2.若flag为False,就直接写入新文件,即将非列表里的内容直接写入
 47     if fetch_list:
 48         flag=False
 49         has_write=False
 50         with open("ha.txt","r") as read_obj,open("ha.new","w") as write_obj:
 51             for line in read_obj:
 52                 if line.strip()==context_title:
 53                     write_obj.write("\n"+line)
 54                     flag=True
 55                     continue
 56                 if flag and line.startswith("backend"):
 57                     flag=False
 58                 if flag:
 59                     for new_line in fetch_list:
 60                         if not has_write:
 61                             temp="%s%s" % (" "*8,new_line)
 62                             write_obj.write(temp)
 63                             has_write=True
 64                 else:
 65                     write_obj.write(line)
 66     else:
 67          #如果要插入的backend不存在
 68         #分2部分写入:
 69             # 1部分.从ha文件里面直接读取,并同时将读取的内容写入新的文件ha.new
 70             # 2部分.将新的backend和context信息,直接写到新的文件ha.new的文件尾部
 71             with open("ha.txt","r") as read_obj,open("ha.new","w") as write_obj:
 72                 for line in read_obj:
 73                     write_obj.write(line)
 74                 write_obj.write("\n"+context_title+"\n")
 75                 temp=" "*8+context_record+"\n"
 76                 write_obj.write(temp)
 77     #将原文件ha改名备用文件为ha.bak,即将ha下线
 78     #将新文件ha.new改名为线上文件ha.txt,即将ha.new上线
 79     os.rename("ha.txt","ha.bak")
 80     os.rename("ha.new","ha.txt")
 81
 82 #删除函数
 83 def delete(dict_info):
 84     #1、首先获取用户的记录并以列表的形势存储,以便于我们调用
 85     del_backend=dict_info["backend"]
 86     del_record=dict_info["record"]
 87
 88     context_title="backend %s" %(del_backend)
 89     context_record="server %s %s weight %s maxconn %s" %(del_record["server"],del_record["server"],
 90                                                          del_record["weight"],del_record["maxconn"])
 91     #调用fetch函数,得到包含backend内容的列表
 92     fetch_list=fetch(del_backend)
 93     #判断1、若列表为空格,直接返回,即没有可以删除的对象
 94     if not fetch_list:
 95         return
 96     else:
 97         #判断1、若用户输入的server信息不在列表里面,直接返回
 98         if context_record not in fetch_list:
 99             print("服务器信息不存在")
100             return
101         else:
102             fetch_list.remove(context_record)  #若输入的server信息在列表中,则将此信息从列表中删除
103
104         #逐行从ha文件中读取,并同时进行判断
105         #核心思想:
106             #首先边读取、边判断、边写入,
107             # 判断其实就是我们自己输入的backend,找到后将列表fetch_list信息写入到新的文件里面。
108             # 其余的非列表的内容直接从源文件ha写到新文件ha.new即可
109         with open("ha.txt","r") as read_obj,open("ha.new","w") as write_obj:
110             flag=False
111             has_write=False
112             for line in read_obj:
113                 if line.strip()==context_title:
114                     write_obj.write(line)
115                     flag=True
116                     continue
117                 if flag and line.startswith("backend"):
118                     flag=False
119
120                 if flag:
121                     if not has_write:
122                         print(fetch_list)
123                         for new_line in fetch_list:
124                             temp="%s%s\n" %(" "*8,new_line)
125                             write_obj.write(temp)
126                         has_write=True
127                 else:
128                     write_obj.write(line)
129     #将原文件ha改名备用文件为ha.bak,即将ha下线
130     #将新文件ha.new改名为线上文件ha,即将ha.new上线
131     os.rename("ha.txt","ha.bak")
132     os.rename("ha.new","ha.txt")
133
134
135 if __name__=="__main__":
136     #获取用户的操作选择
137     print("1、获取记录\n2、添加记录\n3、删除记录\n")
138     select_num=input("请输入你的选择:")
139     #根据用户的选择,进行函数调用
140     if select_num=="1":
141         backend=input("请输入backend:")
142         fetch_list=fetch(backend)
143         for i in fetch_list:
144             print(i)
145     else:
146         print("请按如下例子输入:")
147         print(‘{"backend":"ttt.oldboy.org","record":{"server":"100.1.7.9","weight":"20","maxconn":"3000"}}‘)
148         data_str=input("请输入record:")
149         data_dict=json.loads(data_str)
150         if select_num=="2":
151             add1(data_dict)
152         elif select_num=="3":
153             delete(data_dict)
154         else:
155             print("输入错误")

新手,编码有不成熟的地方,还望各位同道多多指正!

时间: 2024-10-26 15:36:27

作业:老板现在给你任务,公司有haproxy配置文件,希望通过python程序可以对ha配置文件进行增删改的相关文章

第三课作业——set类型、sorted set类型的增删改查,redis的事务

第三课时作业 静哥 by 2016.2.23~2016.3.6   [作业描述] 1.总结什么是set以及什么是sorted set,并完成对set以及sorted set的增删改查(查需要至少4种方式,比如列表,单个节点等) 2.总结redis的事务特征,并且实际操作事务的提交  丢弃以及乐观锁 [作业一:总结什么是set以及什么是sorted set,并完成对set以及sorted set的增删改查] (1) set是字符串的无序集合,集合内的成员可以是重复: sorted set是有序集合

金华兰溪义乌永康东阳微信小程序开发公司 天玑一号旺铺微信小程序

小公司开发自己的微信小程序是非常有必要的,下面上海微信小程序开发公司天玑[一号旺铺]就给大家说说开发自己的微信小程序会给大家带来什么好处.天玑金华.兰溪.义乌.永康.东阳微信小程序开发公司 天玑一号旺铺微信小程序开发报价咨询:http://www.wangpu1.com/全国免费热线:15058525901(微信同号) 小程序一定是基于 Html5+微信原生能力 的产品形态无需下载安装说明跟 App Store 的 APP 是不一样的,小程序是嵌在微信 APP 内的,微信提供标准化入口,当用户订

(写给像我一样刚离开校园进入公司的小菜鸟)在领域架构下,如何实现简单的展示页面以及增删改查(第一步)

第一次到公司,现在进行的项目已经开始了有一段时间了,底层架构早已搭建好,经过一段时间熟悉,现在为自己记录一下 大致结构如此图所示,我们需要完成的任务只需要涉及三个类库Domain,Model,Web 流程如下: 1.Model: 1.1 Entities文件=>>新建实体模型 2.Domain: 2.0 Domain类库下有个模型工厂文件件ModelCreateFactory在里面添加实体模型与数据模型转换的TSETZAaaaModelFactory.cs 代码如下 1 using Syste

老板今天问我为什么公司的数据库这么烂,我是这样回答的......

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库团队发表于云+社区专栏 作者介绍:简怀兵,腾讯云数据库高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作8年,具有丰富的优化经验:在分布式存储等领域有较丰富经验. MYSQL数据库适用场景广泛,相较于Oracle.DB2性价比更高,Web网站.日志系统.数据仓库等场景都有MYSQL用武之地,但是也存在对于

第二周作业__增删改查

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

作业员工信息表实现增删改查操作

有以下员工信息表 当然此表你在文件存储时可以这样表示 1 1,Alex Li,22,13651054608,IT,2013-04-01 现需要对这个员工信息文件,实现增删改查操作 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 select  * from staff_table where dept = "IT" select  * from staff_table where enroll

Python3.5 day4作业:对员工信息文件,实现增删改查操作。

需求: 1.可进行模糊查询,语法至少支持下面3种: 1.select name,age from staff_table where age > 22 2.select  * from staff_table where dept = IT 3.查到的信息,打印后,最后面还要显示查到的条数 2.可创建新员工纪录,以phone做唯一键,staff_id需自增 3.可删除指定员工信息纪录,输入员工id,即可删除 4.可修改员工信息,语法如下: 1.UPDATE staff_table SET dep

周末作业:文件的增删改查

1 1,Alex Li,22,13651054608,IT,2013-04-01 2 2,Jack Wang,30,13304320533,HR,2015-05-03 3 3,Rain Liu,25,1383235322,Saies,2016-04-22 4 4,Mack Cao,40,1356145343,HR,2009-03-01 xinxi.txt 1 # _*_ coding:utf-8 _*_ 2 staff_table = [] 3 def file_to_date(file_pat

python ------- 文件处理之增删改查-------作业

有点小bug,还待改进,代码如下: 1.查询: 输入:www.ordboy1.org 1 list = [] #创建一个空列表 2 flag = False #设置一个开关 3 input1 = input("plesae your input "www.oldboy1.org" :") 4 with open("haproxy.conf",encoding="utf-8") as f_read: #把源文件以utf-8格式打