Python之路,Day28 - Python基础-修改haproxy配置文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sj349781478/article/details/82177909

小练习,python真的要多练习。

根据需求完成haproxy.conf配置文件的查询,新建,删除等操作。

需求:

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
            }
        }

配置文件:

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

 代码:

#!/usr/bin/env python
# _*_coding:utf-8_*_

'''
 * Created on 2018/8/27
 * @author: SJ
'''
import os

#查询
def select(domain):
    result_list = []     #存放查询的结果
    select_flag = False   #定义查询结果标志位False

    with open('haproxy.conf','r',encoding='utf-8') as f:
        for line in f:
            # if 语句顺序进行,当前条件判断完,进入下一判断
            if line.strip()=='backend %s' % domain:  #找到backend www.oldboy.org
                flag = True
                continue
            if line.strip().startswith('backend '): #找到下一个 backend www.xxx.com部分结束.截取其中部分
                flag = False
            if flag == True:     #截取其中部分
                result_list.append(line.strip())
        print(result_list)
    if result_list==[]:
        print('对不起,您查询的网址不存在!')
    else:
        return  result_list

#新增
def add(info):
    arg = eval(info)   #将输入的字符串转变为字典
    # 根据key值调用value,并赋值
    backend_title = arg.get('backend')
    context_title = 'backend %s' %(backend_title)
    record_title = arg['record']
    context_record = 'server %s %s weight %s maxconn %s' % (record_title['server'],record_title['server'],record_title['weight'],record_title['maxconn'])

    find_flag =False  #设置新增标志位
    with open('haproxy.conf','r',encoding='utf-8') as f:
        for line in f:
            if line.strip()=='backend %s' % backend_title:
                find_flag =True
                continue
            if find_flag == True:
                print('已经存在!')
            if line.strip().startswith('backend'):
                flag = False
            else:
                with open('haproxy.conf','r',encoding='utf-8') as f ,\
                      open('haproxy.conf_new','w+',encoding='utf-8') as f_new:
                    for line in f:
                        f_new.write(line)   #复制原始一份文件
                    f_new.write('\n'+context_title+'\n')
                    new_backend = ' '*8+context_record+'\n'   #赋值
                    f_new.write(new_backend)   #写入文件
                    print('新建成功!')
    #将原始文件删除
    os.rename('configuration','configuration.bak')
    os.rename('configuration.bak','configuration')
    os.remove('configuration.bak')

#删除
def delete(dict_info):
    del_backend = dict_info['backend']  #抓取value
    del_record= dict_info['record']   #抓取value
    context_title = 'backend %s' % (del_backend)
    context_record='server %s %s weight %s maxconn %s' %(del_record['server'],del_record['server'],del_record['weight'],del_record['maxconn'])

    fetch_list = select(del_backend)
    if not fetch_list:
        return
    else:
        if context_record not in fetch_list:
            print('你输入的信息不存在!')
            return
        else:
            fetch_list.remove(context_record)
        with open('haproxy.conf','r') as read_obj,\
              open('haproxy.conf.new','w') as write_obj:
            flag =False
            has_write = False
            for line in read_obj:
                if line.strip()==context_title:
                    flag = True
                    continue
                if flag and line.startswith('backend '):
                    flag=False
                if flag == True:
                    if not has_write:
                        print(fetch_list)
                        for new_line in fetch_list:
                            temp = '%s%s\n' % (' '*8,new_line)
                            write_obj.write(temp)
                    has_write = True
                else:
                    write_obj.write(line)
        os.rename('configuration','configuration.bak')
        os.rename('configuration.bak','configuration')
        os.remove('configuration.bak')
        print('已经删除!')

猜你喜欢

转载自blog.csdn.net/sj349781478/article/details/82177909