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

时间:2023-03-09 18:49:08
python编辑修改haproxy配置文件--文件基础操作

一.需求分析

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

二.流程图

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

三.代码实现

  本程序主要分成两部分,接口部分与主函数处理部分,接口部分主要是用于编写三个接口,添加、删除、查询接口,此部分程序存储在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
}
}