zoukankan      html  css  js  c++  java
  • 修改ha_config配置文件

    脚本运行环境win7, python3.6, pycharm2017社区版

    ha_config配置文件如下:

    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 weight 20 maxconn 3000
    
    backend www.test.org
            server 100.1.7.3 weight 20 maxconn 3000
            server 100.1.7.6 weight 20 maxconn 3000
    

     需求: 

    HAproxy配置文件操作:
    1. 根据用户输入输出对应的backend下的server信息
    2. 可添加backend 和sever信息
    3. 可修改backend 和sever信息
    4. 可删除backend 和sever信息
    5. 操作配置文件前进行备份
    6. 添加server信息时,如果ip已经存在则修改;
    如果backend不存在则创建;若信息与已有信息重复则不操作

    无论添加还是删除,首先要先判断是否存在相应的backend以及是否存在backend的配置信息:

    如何取得的信息呢?

    备份ha_config配置文件:

    def backup():
        with open('ha_config','r') as f
        ,open('ha_config'+'.bak','w') as bak_f:
            for line in f:
                bak_f.write(line)
                bak_f.flush()

    获取backend 信息的程序:

    def get_backend(backend):
        backend_info = []
        with open('ha_config','r') as f:
            flag = False
            for line in f:
                if line.strip().startswith('backend') and line.strip() == 'backend ' + backend:
                    backend_info.append(line.strip())
                    flag = True
                    continue
                if line.strip().startswith('backend') and flag:
                    break
                if flag and line.strip():
                    backend_info.append(line.strip())
        # print(backend_info)
        return backend_info
    

    主程序代码如下:

    # -*- coding: utf-8 -*-
    
    def backup():
        #备份ha_config配置文件
        with open('ha_config','r') as f
        ,open('ha_config'+'.bak','w') as bak_f:
            for line in f:
                bak_f.write(line)
                bak_f.flush()
    
    def get_backend(backend):
        #输入backend,得到相应的backend 和 record
        with open('ha_config','r') as f:
            flag = False
            backend_info = []
            for line in f:
                if line.strip().startswith('backend') and line.strip() == 'backend ' + backend:
                    flag = True
                    backend_info.append(line.strip().split()[-1])
                    continue
                if line.strip().startswith('backend') and flag:
                    break
                if line.strip() and flag:
                    backend_info.append(line.strip())
            # print(backend_info)
            return backend_info
    
    def add_backend(backend,record):
        backend_info = get_backend(backend)
        print(backend_info)
        if backend  not in backend_info:#backend 不存在时
            backup()#备份-函数
            print('ha_config,备份为ha_config.bak!')
            with open('ha_config','r') as f
                ,open('add_config','w') as add_f:
                for line in f:
                    add_f.write(line)
                    add_f.flush()
                #把不存在的backend 和record添加到文件结尾
                add_f.write('
    ')
                add_f.write('backend '+backend+'
    ')
                add_f.write(' '*8 + record)
                add_f.flush()
                print('添加完成,请查看:add_config')
    
        # if backend in backend_info:
        else:
            # backend存在,但record 不存在时
            if record not in backend_info:
                backup()
                print('backend存在,record不存在,备份完成!')
                with open('ha_config','r') as f
                    ,open('add22_config','w') as add_f:
                    flag = True
                    for line in f:
                        if line.strip().startswith('backend') and line.strip() == 'backend ' + backend:
                            flag = False
                            continue
                        if line.strip().startswith('backend') and not flag:
                            flag = True
                        if flag:
                            add_f.write(line)
                            add_f.flush()
                    add_f.write('
    ')
                    add_f.write('backend ' + backend + '
    ')
                    add_f.write(' ' * 8 + record)
                    add_f.flush()
                    print('backend添加完成,请查看:add22_config')
            else:
                print('33[32mbackend 和 record 信息存在33[0m 无需修改!')
    
    
    def delete_backend(backend):
        record = get_backend(backend)
        print(record)
        if backend in record:
            backup()#调用-备份ha_config 函数
            print('删除backend前,备份,备份完成,备份名称为:ha_config.bak!')
            with open('ha_config','r') as f
                ,open('del_config','w') as del_f:
                flag = True
                for line in f:
                    if line.strip().startswith('backend') and line.strip() == 'backend ' + backend:
                        flag = False
                        continue
                    if line.strip().startswith('backend') and not flag:
                        flag = True
                    if flag:
                        del_f.write(line)
                        del_f.flush()
                print('文件删除完成,请查看新文件:del_config')
        else:
            print('不存在backend:%s'%backend)
    
    
    bk = input("33[31m请输入backend:33[0m")
    
    backend_info = get_backend(bk)
    if bk in backend_info:
        print(backend_info)
        your_select = input('you want to delete or modify?33[41m(del / mod)33[0m')
        if your_select == 'del':
            delete_backend(bk)
        elif your_select == 'mod':
            recd = input('请输入 record:')
            add_backend(bk,recd)
        else:
            print('不能识别,即将退出……')
            exit()
    else:
        print('没有backend,你想添加吗?')
        your_choice = input('yes or no ?("y" or "n")')
        if your_choice == 'y':
            recd = input('输入record:')
            add_backend(bk,recd)
        elif your_choice == 'n':
            exit()
        else:
            print('只能识别 y or n !')
            exit()
    

      

    运行主程序:

      提示输入backend:例如www.oldboy.org

      存在时,提示是否删除或修改,

      不存在backend时,提示是否添加,

    小小总结:

    1、用到的知识点:if-elif-else循环,打开文件 with open('文件名','r') as f:, for line in f:(逐行打印文件内容,效率高),

      字符串方法startswitch(‘XXX’) (以字符串‘XXX’开始);

    2、感觉自己现在还是命令的堆叠吧,仅仅是知识点掌握的太少???(自我安慰一下)

    继续加油吧,烧年!

  • 相关阅读:
    CCF-201803-3-URL映射(模拟)
    Problem UVA11134-Fabled Rooks(贪心)
    UVA1152-4 Values whose Sum is 0(分块)
    UVA1605-Building for UN(思维)
    基于XMPP的IOS聊天客户端程序(IOS端一)
    基于XMPP的IOS聊天客户端程序(XMPP服务器架构)
    正则表达式在iOS中的运用
    NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
    自动无限循环UIScrollView原理
    NSTimeZone
  • 原文地址:https://www.cnblogs.com/yes5144/p/6913454.html
Copyright © 2011-2022 走看看