• python编辑修改haproxy配置文件--文件基础操作


    一.需求分析

    1. 有查询,删除,添加的功能
    2. 查询功能:查询则打印查询内容,如果不存在也要打印相应的信息
    3. 删除功能:查询到要删除内容则删除,打印信息。
    4. 添加功能:同上。

    二.流程图

    三.代码实现

      本程序主要分成两部分,接口部分与主函数处理部分,接口部分主要是用于编写三个接口,添加、删除、查询接口,此部分程序存储在Data_Deal.py函数中,主函数程序则执行系统的主循环逻辑,主要是上图流程图中的接口调用部分,此部分程序主要在Data_Change.py中实现,话不多说,上代码:

      Data_Deal.py函数程序代码如下:

    import  sys
    def Check_Backend():
        #数据查询接口
        Backend = str(input("输入要查询的Backend :"))
        Backend_split = 'backend '+Backend+'
    '#根据输入内容组成要查询的字符串
        T =True
        with open('song.txt','r') as f:#文件循环
            for line in f:
                if Backend_split in line :#条件判断
                    sys.stdout.write(line)
                    T= False
                    continue
                if T==False:
                    sys.stdout.write(line)
                    break
            if T ==True:
                print("文件不存在 !")
    
    
    def Add_Backend():
        #数据添加接口
        T =True
        msg =eval(input("输入要存入的数据 :"))#字符串转换成列表,这里注意eval函数,此函数可以将字符串转换成字典,前提是字符串内容是一个字典
        with open('song.txt','a+') as f:#文件循环
            f.seek(0)#移动文件指针
            for line in f:
                if "backend "+msg["backend"]+'
    '== line:
                    print("当前Backend已存在,存入失败 !")
                    T = False
                    break
            if T == True:
                stradd = '
    backend '+msg['backend']+'
    '+'	'.expandtabs()+'server '+
                     msg['record']['server']+' weight '+str(msg['record']['weight'])+' maxconn '+str(msg['record']['maxconn'])+'
    '#组帧,写入数据要按照一定格式转换成字符串
                f.write(stradd)
                print("添加成功 !")
    
    
    def Del_Backend():
        #数据删除接口
        local = 0
        T = False
        F = False
        Num=0
        msg =eval(input("输入要删除的数据 :"))#字符串转换成列表
        f = open('song.txt', 'r+')#读写模式打开文件
        lines = f.readlines()#一次读出所有行
        f.seek(0)#移动文件指针
        f.truncate()#清除文件内容
        for i,line in enumerate(lines):
            if T==True:
                Num+=1
                if Num>=2:
                    T=False
                    print("删除成功 !")
                    F =True
                else:
                    continue
            if line == 'backend '+msg['backend']+'
    ':
                T =True
                Num=0
                continue
            f.write(line)#逐行写入文件,如果遇到要删除的内容则不写入
        if F==False:
            print("数据库中没有此条数据,删除失败!")

      此文件的读写要特别读写后的读写指针的位置,文件的操作如果读写指针有误可能导致文件出错,删除接口要特别注意,本函数使用较为笨拙的方案,一次读出所有数据然后比对写入,这种方案的前提是文件相对较小,如果大文件的读写删除不建议使用此方法。

      Data_Change.py程序代码如下:

    while True:
        msg = input("1.查询
    2.删除
    3.添加
    ,输入q退出程序,请输入你的选择 :")
        if msg.isdigit():
            msg=int(msg)
            if msg==1:
                Check_Backend()
            elif msg==2:
                Del_Backend()
            elif msg==3:
                Add_Backend()
            else:
                pass
        elif msg=='q':
            break
        else:
            pass

      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 weight 20 maxconn 30

    backend www.koujie.org
        server 100.1.7.9 weight 2000 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
                    }
            }
            

      

  • 相关阅读:
    10,EasyNetQ-发布确认
    9,EasyNetQ-版本化消息
    一个小程序云开发的项目,图书借还系统
    利用canvas对图片进行切割
    微信小程序添加卡券到微信卡包,使用wx.addCard()方法传参及整体流程
    git合并时忽略某个文件
    小程序接入云通信IM
    小程序插件使用wx.createSelectorQuery()获取不到节点信息
    小程序插件开发流程及注意事项
    小米6使用charles抓包https
  • 原文地址:https://www.cnblogs.com/wangxingwei/p/9376219.html
Copyright © 2020-2023  润新知