Python实现在线上环境优雅的修改配置文件

原配置文件:

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
需求:
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
            }
        }

实现:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json
import os

#根据标题获取配置信息
def fetch(backend):
    backend_title = 'backend %s' % backend
    record_list = []
    with open('ha') as obj:
        flag = False
        for line in obj:
            line = line.strip()
            if line == backend_title:
                flag = True
                continue
            if flag and line.startswith('backend'):
                flag = False
                break
            if flag and line:
                record_list.append(line)

    return record_list




    return record_list
#在指定标题下插入配置信息
def insert(dict_data):
    backend = dict_data.get('backend')
    backend_title = "backend %s" % backend
    content = "server %s %s weight %d maxconn %d" % (dict_data['record']['server'], dict_data['record']['server'], dict_data['record']['weight'], dict_data['record']['maxconn'])
    record_list = fetch(backend)
    flag = True
    count = 0
    if not record_list:
        record_list.append(backend_title)
        record_list.append(content)
        with open('conf.txt','r') as read_file, open('conf.txt.bak','w') as write_file:
            for line in read_file:
                write_file.write(line)
            for l in record_list:
                if l.startswith("backend"):
                    write_file.write(l+'\n')
                else:
                    write_file.write(" "*8 + l)
    else:
        record_list.append(content)
        with open('conf.txt','r') as read_file, open('conf.txt.bak','w') as write_file:
            for line in read_file:
                if flag:
                    write_file.write(line)
                    if line.startswith(backend_title):
                        for l in record_list:
                            write_file.write(" "*8 + l+'\n')
                        flag = False
                else:
                    count = count + 1
                    if(count == record_list.__len__() -1):
                        flag = True
    os.rename('conf.txt.bak','conf.bak')
    os.rename('conf.bak','conf.txt')
#删除指定标题的信息
def delete(dict_data):
        backend = dict_data.get('backend')
        backend_title = "backend %s" % backend
        content = "server %s %s weight %d maxconn %d" % (dict_data['record']['server'], dict_data['record']['server'], dict_data['record']['weight'], dict_data['record']['maxconn'])
        record_list = fetch(backend)
        content = content.strip()
        print(content)
        if not record_list:
            return
        else:
            if record_list.__contains__(content):
                return
            else:
                print(record_list)
                record_list.__delattr__(record_list.index(content))
                with open('conf.txt','r') as read_file, open('conf.txt.bak','w') as write_file:
                    for line in read_file:
                        if flag:
                            write_file.write(line)
                            if line.startswith(backend_title):
                                for l in record_list:
                                    write_file.write(" "*8 + l+'\n')
                                flag = False
                        else:
                            count = count + 1
                            if(count == record_list.__len__() +1):
                                flag = True
        os.rename('conf.txt.bak','conf.bak')
        os.rename('conf.bak','conf.txt')

if __name__ == '__main__':
    print '1、获取;2、添加;3、删除'
    num = raw_input('请输入序号:')
    data = raw_input('请输入内容:')
    if num == '1':
        print(fetch(data))
    else:
        dict_data = json.loads(data)
        if num == '2':
            insert(dict_data)
        elif num == '3':
            delete(dict_data)
        else:
            pass
    #data = "www.oldboy.org"
    #fetch(data)
    #data = '{"backend": "www.oldboy.com","record":{"server": "100.1.7.90","weight": 20,"maxconn": 31}}'
    #dict_data = json.loads(data)
    #add(dict_data)
    #remove(dict_data)


 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值