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+'\n'#根据输入内容组成要查询的字符串
    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"]+'\n'== line:
                print("当前Backend已存在,存入失败 !")
                T = False
                break
        if T == True:
            stradd = '\nbackend '+msg['backend']+'\n'+'\t'.expandtabs()+'server '+\
                 msg['record']['server']+' weight '+str(msg['record']['weight'])+' maxconn '+str(msg['record']['maxconn'])+'\n'#组帧,写入数据要按照一定格式转换成字符串
            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']+'\n':
            T =True
            Num=0
            continue
        f.write(line)#逐行写入文件,如果遇到要删除的内容则不写入
    if F==False:
        print("数据库中没有此条数据,删除失败!")

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

  Data_Change.py程序代码如下:

while True:
    msg = input("1.查询\n2.删除\n3.添加\n,输入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
                }
        }
        

  

猜你喜欢

转载自www.cnblogs.com/wangxingwei/p/9376219.html