修改haproxy配置文件

 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.baidu.org
29         server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
haproxy配置文件
  1 #!/usr/bin/env python
  2 #=*- coding:UTF-8 -*-
  3 
  4 #查找
  5 def search(website ):
  6     reault_list = []#存放查询结果
  7     search_flag = False #定义查询结果标志
  8 
  9     with open('haproxy','r',encoding= 'utf-8') as f:
 10         for line in f:#if语句顺序进行,当前条件判断完,进入下一判断
 11             if 'backend {}'.format(website) == line.strip():#找到backend www.oldboy.org 开始截取
 12                 search_flag = True
 13             if line.strip().startswith('backend') and 'backend {}'.format(website) != line.strip() :#找到下一个 backend www.xxx.com部分结束,截取其中部分
 14                  search_flag = False
 15             if search_flag:
 16                 reault_list.append(line .strip() )
 17         print(reault_list )
 18         f.close()
 19     if reault_list == []:
 20         print('对不起,您查询的网址不存在!')
 21     else:
 22         return reault_list
 23 
 24 #增加
 25 def add(website):
 26     arg = eval(website) #将输入的字符串转变为字典
 27     backend_title = 'backend {}'.format(arg['backend'])# 要插入backend的字段
 28     record_title = arg['record']
 29     context_record = 'server {0}{0} weight {1} maxconn {2}'.\
 30         format(record_title['server'],record_title['weight'],record_title['maxconn']   )
 31     add_flag = True#设置新增标志位
 32     with open('haproxy', 'r+', encoding='utf-8') as f:
 33         for line in f:
 34             if line.strip() == backend_title:
 35                 print("您新增的网址已经存在!")
 36                 add_flag = False
 37             if add_flag:
 38                 f.write('\n{}'.format(backend_title))
 39                 f.write('\n\t\t{}'.format(context_record))
 40         f.close()
 41 
 42 #删除
 43 def delete(website):
 44     delete_flag = False #设置删除标志位
 45     delete_result = True
 46     with open('haproxy', 'r', encoding='utf-8') as f,\
 47         open('haproxy_bak', 'w') as f1:
 48         for line in f:
 49             if 'backend {}'.format(website ) == line.strip():
 50                 delete_flag = True
 51                 delete_result = False
 52                 continue
 53             if line.strip().startswith('backend') and   line.strip() != website:
 54                 delete_flag = False
 55             if not delete_flag:
 56                 f1.write(line)
 57         if delete_result :
 58             print("您删除的网址不存在!")
 59     with open('haproxy', 'w') as f, \
 60         open('haproxy_bak', 'r', encoding='utf-8') as f1:
 61         for line in f1:
 62             f.write(line)
 63 
 64 #修改
 65 def update(website):
 66     arg = eval(website )
 67     #    print(arg)
 68     backend_title = "backend {}".format(arg['backend'])  # 要插入backend整个字段
 69     #    print(backend_title)
 70     record_title = arg["record"]
 71     context_record = "server {0} {0} weight {1} maxconn {2}". \
 72         format(record_title['server'], record_title['weight'], record_title['maxconn'])
 73     #    print(context_record)
 74 
 75     update_flag = False  #设置修改标志位
 76     update_re = False    #设置重复修改位
 77 
 78     with open('haproxy', 'r', encoding='utf-8') as f, \
 79             open('haproxy_bak', 'w') as f1:
 80         for line in f:
 81             if line.strip() == backend_title:
 82                update_flag = True
 83                continue                            #如果出现修改backend_title,设置修改标志位为True。
 84             if line.strip().startswith('backend') and line.strip() != backend_title :
 85                 update_flag = False                #捕捉到下一个backend_title,设置修改标志位为False。
 86             if not update_flag:
 87                 f1.write(line)
 88             if update_flag and  not update_re:    #修改标志位为True,并且没有被修改过
 89                 f1.write('\n{}'.format(backend_title))
 90                 f1.write('\n\t\t{}\n'.format(context_record))
 91                 update_re = True
 92 
 93     with open('haproxy', 'w') as f, \
 94             open('haproxy_bak', 'r', encoding='utf-8') as f1:
 95         for line in f1:
 96             f.write(line)
 97 
 98 
 99 
100 
101 while True:
102     print('欢迎进入haproxy配置程序'.center(50,'-') )
103     print(  '\n1 查询\n')
104     print(' 2 新增\n')
105     print(' 3 删除\n')
106     op_haproxy = input('选择要进入模式的ID-》:')
107     if op_haproxy == '1':
108         website = input('请输入要查询的网址:\n'
109                         '例如www.oldboy.org')
110         search(website )
111     elif op_haproxy == '2':
112         website = input("请输入要新增的网址配置:"
113                         "例如:{'backend': 'www.baidu.com','record': {'server': '100.1.7.8',"
114                "'weight': 20,'maxconn': 3000}}\n")
115         add(website)
116     elif op_haproxy == '3':
117         website = input("请输入要删除的网址配置:"
118                         "例如:www.baidu.com\n")
119 
120         delete(website)
121     elif op_haproxy == '4':
122         website = input("请输入要修改的网址配置:"
123                         "例如:{'backend': 'www.baidu.com','record': {'server': '100.1.7.8',"
124                         "'weight': 20,'maxconn': 3000}}\n")
125         update(website)
126     elif op_haproxy == 'q':
127         break
128     else:
129         print("请检查您的输入!")
View Code

猜你喜欢

转载自www.cnblogs.com/desire-desire/p/11106387.html