首页 > 代码库 > 作业:老板现在给你任务,公司有haproxy配置文件,希望通过python程序可以对ha配置文件进行增删改
作业:老板现在给你任务,公司有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 return101 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=False111 has_write=False112 for line in read_obj:113 if line.strip()==context_title:114 write_obj.write(line)115 flag=True116 continue117 if flag and line.startswith("backend"):118 flag=False119 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=True127 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("输入错误")
新手,编码有不成熟的地方,还望各位同道多多指正!
作业:老板现在给你任务,公司有haproxy配置文件,希望通过python程序可以对ha配置文件进行增删改
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。