zoukankan      html  css  js  c++  java
  • python操作haproxy.cfg文件

    需求
    1、查
        输入:www.oldboy.org
        获取当前backend下的所有记录
    
    2、新建
        输入:
            arg = {
                'bakend': 'www.oldboy.org',
                'record':{
                    'server': '100.1.7.9',
                    'weight': 20,
                    'maxconn': 30
                }
            }
    
    3、删除
        输入:
            arg = {
                'bakend': 'www.oldboy.org',
                'record':{
                    'server': '100.1.7.9',
                    'weight': 20,
                    'maxconn': 30
                }
            }

    操作haproxy.cfg的haproxy.py文件

    #!/usr/bin/evn python
    #-*- coding=utf-8 -*-
    import json
    import os
    
    # 根据backend名字查找backend信息
    def fetch(backend_name):
        line_list = []
        flag = False
        with open('D:/python/day03/haproxy.cfg','r') as ha:
            for line in ha:
                if line.startswith("backend %s" % backend_name):
                    flag = True
                    continue
                if flag and line.strip().startswith('server'):
                    line_list.append(line.strip())
                if line.startswith('backend'):
                    # flag = False
                    break
    
        return line_list
    
    # 添加backend信息
    def add(info_dict):
        current_title = info_dict['backend']
        current_list = 'server %s %s weight %d maxconn %d' % (info_dict['record']['server'],info_dict['record']['server'],info_dict['record']['weight'],info_dict['record']['maxconn'])
        fetch_list = fetch(current_title)
        # backend是否存在
        if fetch_list:
            if current_list in fetch_list:
                pass
            else:
                fetch_list.append(current_list)
            # 如果根据backend找到了这个backend说明有记录,继续添加server即可
    
            flag = False
            has_write = False
            with open('haproxy.cfg') as read_obj,open('haproxy.new','w') as write_obj:
                for read_line in read_obj:
                    # 将haproxy.cfg分为上、中、下三部分
                    # fetch_list为中间部分
    
                    # 读取配置文件,写信配置文件
                    # 读上-->写上
                    # 将处理完的配置文件fetch_list写入新的配置文件中
                    # 读下-->写下
                    if read_line.strip() == 'backend %s' % current_title:
                        write_obj.write(read_line)
                        flag = True
                        continue
                    if flag and read_line.startswith('backend'):
                        flag = False
                    if flag:
                        for i in fetch_list:
                            if not has_write:
                                write_obj.write('%s%s
    ' % (' '*8,i))
                        has_write = True
                    else:
                        write_obj.write(read_line)
        else:
            # 没有这条记录需要添加backend和server
            with open('haproxy.cfg') as read_obj,open('haproxy.new','w') as write_obj:
                for read_line in read_obj:
                    write_obj.write(read_line)
                write_obj.write('backend %s
    ' % current_title)
                write_obj.write(' '*8 + current_list)
        # 先将haproxy.cfg备份为haproxy.cfg.bak,将新的文件替换为haproxy.cfg
        os.rename('haproxy.cfg','haproxy.cfg.bak')
        os.rename('haproxy.new','haproxy.cfg')
    
    # 删除backend信息函数
    def del_backend(info_dict):
        current_title = info_dict.get('backend')
        fetch_list = fetch(current_title)
    
        current_record = 'server %s %s weight %d maxconn %d' % (info_dict['record']['server'],info_dict['record']['server'],info_dict['record']['weight'],info_dict['record']['maxconn'])
    
        # 判断是否有这条记录
        if fetch_list:
            if current_record in fetch_list:
                # 将该记录删掉
                fetch_list.remove(current_record)
                print fetch_list
                with open('haproxy.cfg') as read_obj,open('haproxy.new','w') as write_obj:
                    flag = False
                    has_write = False
                    for read_line in read_obj:
    
                        if read_line.strip() == 'backend %s' % current_title:
                            write_obj.write(read_line)
                            flag = True
                            continue
                        if flag and read_line.startswith('backend'):
                            flag = False
                        if flag:
                            if not has_write:
                                for line in fetch_list:
                                    write_obj.write('%s%s
    ' % (' '*8,line))
                            has_write = True
                        else:
                            write_obj.write(read_line)
            else:
                print('no this server record')
    
            if os.path.exists('D:/python/day03/haproxy.new'):
                os.rename('haproxy.cfg','haproxy.cfg.bak')
                os.rename('haproxy.new','haproxy.cfg')
        else:
            print('no this record')
    
    # 需要添加的记录
    data = '{"backend": "www.oldboy.org","record":{"server": "100.1.7.168","weight": 20,"maxconn": 30}}'
    # 转换为json格式
    info_dict = json.loads(data)
    
    input_num = raw_input('please input your select : ')
    if str.isdigit(input_num):
        input_num = int(input_num)
    # 1.查找记录 2.增加记录 3.删除记录
    if input_num == 1:
        pass
    elif input_num == 2:
        add(info_dict)
    elif input_num == 3:
        del_backend(info_dict)
    
    
    
    

    haproxy.cfg配置文件

    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
            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.10 100.1.7.10 weight 10 maxconn 2000
    backend mysqlserver
            server mysql1 10.1.1.110:3306 weight 20 maxconn 300
            server mysql2 10.1.1.120:3306 weight 10 maxconn 200
    frontend mysql
            bind *:3306
            mode tcp
            log global
            default_backend mysqlserver
    


  • 相关阅读:
    5.CSS的引入方式
    4 CSS文本属性
    3.CSS字体属性
    CSS基础选择器总结
    详细介绍jQuery.outerWidth() 函数具体用法
    highcharts x轴中文刻度太长换行
    css 兼容ie8 rgba()用法
    JavaScript常用定义和方法
    12 个 CSS 高级技巧汇总
    javascript 经典问题汇总
  • 原文地址:https://www.cnblogs.com/reblue520/p/6555911.html
Copyright © 2011-2022 走看看