使用python更新haproxy配置文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python更新haproxy配置文件相关的知识,希望对你有一定的参考价值。
老板现在给你任务,公司有haproxy配置文件,希望通过python程序可以对ha配置文件进行增删改,不再是以往的打开文件进行直接操作了。
现有ha配置文件如下:
1 global 2 log 127.0.0.1 local2 3 daemon 4 maxconn 256 5 log 127.0.0.1 local2 info 6 defaults 7 log global 8 mode http 9 timeout connect 5000ms 10 timeout client 50000ms 11 timeout server 50000ms 12 option dontlognull 13 14 listen stats :8888 15 stats enable 16 stats uri /admin 17 stats auth admin:1234 18 19 frontend oldboy.org 20 bind 0.0.0.0:80 21 option httplog 22 option httpclose 23 option forwardfor 24 log global 25 acl www hdr_reg(host) -i www.oldboy.org 26 use_backend www.oldboy.org if www 27 28 backend www.oldboy.org 29 server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000 30 31 backend buy.oldboy.org 32 server 100.1.7.90 100.1.7.90 weight 20 maxconn 3000 33 原配置文件
实现python代码如下,python3.X
1 # -*- coding:utf-8 -*- 2 def fetch(backend): 3 result = [] 4 with open(‘ha.conf‘, ‘r‘) as f: 5 flag = False 6 for line in f: 7 if line.strip().startswith(‘backend‘) and line.strip() == "backend " + backend: 8 flag = True 9 continue 10 if flag and line.strip().startswith(‘backend‘): 11 break 12 if flag and line.strip(): 13 result.append(line.strip()) 14 15 return result 16 def add(backend,record): 17 record_list = fetch(backend) 18 #print (type(record_list)) 19 if not record_list: 20 #1、无backend时,将旧文件全部复制到新文件中,再将查询的记录添加入新文件。 21 with open(‘ha.conf‘, ‘r‘) as old,open(‘newha.conf‘,‘w‘) as new: 22 for line in old: 23 new.write(line) 24 #复制 25 new.write(‘\\nbackend ‘ + backend + ‘\\n‘) 26 new.write(‘ ‘ * 8 + record + ‘\\n‘) 27 #此两行为添加新记录(未查找到的) 28 else: 29 if record in record_list: 30 #backend存在,record也存在 31 pass 32 else: 33 #backend存在,record不存在 34 record_list.append(record) 35 #将输入的不存在的record添加入record_list 36 with open(‘ha.conf‘, ‘r‘) as old, open(‘newha.conf‘, ‘w‘) as new: 37 flag = False 38 for line in old: 39 if line.strip().startswith(‘backend‘) and line.strip() == "backend " + backend: 40 flag = True 41 new.write(line) 42 #将查找到的backend写入新文件 43 for new_line in record_list: 44 new.write(‘ ‘ * 8 + new_line + ‘\\n‘) 45 #将新记录写入新文件 46 if flag and line.strip().startswith(‘backend‘): 47 #下一个backend,此时flas为True 48 flag = False 49 #将flag重置为False 50 new.write(line) 51 #仅为写入其他backend文件 52 continue 53 #防止重复写入 54 if line.strip() and not flag: 55 new.write(line) 56 ret = add("www.oldboy.org",‘server 222.2.2.2 222.2.2.2 weight 22 maxconn 2222‘)
以上是关于使用python更新haproxy配置文件的主要内容,如果未能解决你的问题,请参考以下文章