用python修改haproxy配置文件


需求:

    當用戶輸入域名的時候,顯示出來下面的記錄

    當用戶需要輸入添加紀錄的時候,添加到你需要的那個域名下面

    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  
            server 100.1.7.92 100.1.7.93 weight 20 maxconn 3000  
            server 100.1.7.94 100.1.7.93 weight 20 maxconn 3000  
      
    backend buy.oldboy.org  
            server 100.1.7.90 100.1.7.90 weight 20 maxconn 3000  
配置文件
  1 # !/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 
  4 def select(arg):
  5     """
  6     要求用戶輸入域名,可以查看webserver的子作用域
  7     針對haproxy的配置文件
  8     思路:
  9     a.逐行讀取文件
 10     b.當我遇到backend + 域名的行的時候,將其子作用域放到一個空列表顯示給用戶看
 11     c.再當我遇到以backend開頭的時候就結束循環就ok了
 12     d.因為這個子作用域是需要顯示 的,就要拿出來,所以要特別顯示出來,要與眾不同,所以我們在這里定義標志位來顯示這個與眾不同
 13     :param arg:
 14     :return:
 15     """
 16     result = []
 17     flag = False
 18     with open("haproxy.txt", "r", encoding="utf-8") as f:
 19         for line in f :
 20             if line.strip() == "backend %s" % arg:
 21                 flag = True
 22                 continue
 23             if line.strip().startswith("backend"):
 24                 flag  = False
 25             if flag:
 26                 result.append(line)
 27     return result
 28 ret = select("www.oldboy.org")
 29 
 30 for i in ret :
 31     print(i)
 32 #++++++++++++++++++++++++++++
 33 def sele_add(yuming, record):
 34     """
 35     增加:
 36     a.先查看有沒有這個域名,如果沒有在最后添加就可以了
 37     b.如果有,在檢測有沒有要和你相同的那個子作用域,
 38     c.如果有,則pass,如果沒有就在最后一行添加
 39 
 40     方法一:
 41     a.查詢webserver域名是用戶要的那個域名
 42     b.把查詢到的結果添加新紀錄寫入到新的文件中
 43     c.在繼續把除了這個域名意外的作用域及其他內容寫入到新文件中
 44     方法二:
 45     a.就是在下一個新的域名之前加入用戶需要加入的新紀錄
 46     #也可以理解為先插入那行在寫backend
 47     b.在排除是否已經存在
 48     c.當偽代碼已經寫完的時候,肯定不能實現,所以我們得要修改代碼,那么就需要用到標志位 因為只在當前域名后第一個backend
 49     前添加紀錄,所以標志位在標記的時候需要 更改為數字
 50     :param arg:
 51     :return:
 52     """
 53 
 54     """
 55     biaozhiwei = False
 56     with open("haproxy.txt", "r", encoding="utf-8") as old, open("haproxy2.txt", "w", encoding="utf-8") as new:
 57         res_list = select(yuming)
 58         res_list.append(" "*8 + record + "\n")
 59         for line in old:
 60             if line.strip() == "backend %s" % yuming:
 61                 biaozhiwei = True#注意
 62                 new.write(line)
 63                 for i in res_list:
 64                     new.write(i )
 65 
 66                 continue
 67             if line.strip().startswith("backend"):
 68                 biaozhiwei = False
 69             if not biaozhiwei:
 70                 new.write(line)
 71     """
 72 #No.2
 73 # 方法二:
 74 # a.就是在下一個新的域名之前加入用戶需要加入的新紀錄
 75 #也可以理解為先插入那行在寫backend
 76 # b.在排除是否已經存在
 77 #----------------
 78 #判斷域名是否存在,如果存在再次判斷記錄是否存在,如果存在,就pass,如果不存在就添加
 79     bzw = 2
 80     result = []
 81     a = 0
 82     with open ("haproxy.txt", "r", encoding="utf-8") as old , open("haproxy2.txt", "w", encoding="utf-8") as new:
 83         if ("backend %s" % yuming ) in old:
 84             print("cunz")
 85 
 86             for line in old:
 87 
 88                 if line.strip() == "backend %s" % yuming:
 89                     bzw = 0
 90                     result.append(line)
 91                     new.write(line)
 92                     continue
 93                 if line.strip().startswith("backend"):
 94                     bzw += 1   #因為我們會遇到很多個backend,所以就自加1 了
 95                     if bzw == 1:
 96                         if (" "*8 + record + "\n") in result:
 97                             pass
 98                         else:
 99                             new.write(" "*8 + record + "\n")
100                 new.write(line)
101         else:
102             print("bucz")
103             with open("haproxy.txt", "r", encoding="utf-8") as old, open("haproxy2.txt", "w", encoding="utf-8") as new:
104                 for line in old:
105                     new.write(line)
106                 new.write("\nbackend %s\n" % yuming)
107                 new.write(" "*8 + record + "\n")
108 
109 sele_add("www.oldboy.orgt","1233446")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM