import json
import os
import sys
deflogin(func):
defloginning(*args,**kwargs):
# 验证用户帐号和密码函数# global name
lock = "lock.txt"
loginfile = "password.txt"
login_info = 0
i = 0while i < 3and login_info == 0:
name = input("Please input your name: ")
withopen(lock, "r") as f:
for line in f:
# if name in line:if name == line.strip():
sys.exit('\033[32:1m用户 %s 已经被锁定\033[0m' % name)
password = input("Please input password: ")
withopen(loginfile, "r") as f:
for line in f:
user_file, pass_file = line.split()
if user_file == name and pass_file == password:
# print("Bingo!")
login_info = 1continueelse:
if login_info != 1:
print("You name or password is error!")
i += 1else:
if i == 3and login_info == 0:
f = open(lock, "a")
f.write(name + "\n")
f.close()
print('\033[32:1m用户 %s 已经被锁定\033[0m' % name)
return func(*args, **kwargs)
return loginning
deffetch(backend):
backend_title = 'backend %s' % backend
record_list = []
withopen('ha') as obj:
flag = Falsefor line in obj:
line = line.strip()
if line == backend_title:
flag = Truecontinueif flag and line.startswith('backend'):
flag = Falsebreakif flag and line:
record_list.append(line)
return record_list
defadd(dict_info):
backend = dict_info.get('backend')
record_list = fetch(backend)
# print(record_list)
sign = 1
backend_title = "backend %s" % backend
current_record = "server %s %s weight %d maxconn %d" % (dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn'])
ifnot record_list:
record_list.append(backend_title)
record_list.append(current_record)
withopen('ha') as read_file, open('ha.new', 'w') as write_file:
flag = Falsefor line in read_file:
write_file.write(line)
for i in record_list:
if i.startswith('backend'):
write_file.write(i + '\n')
else:
write_file.write("%s%s\n" % (8 * " ", i))
else:
record_list.insert(0, backend_title)
# print(record_list)if current_record notin record_list:
record_list.append(current_record)
withopen('ha') as read_file, open('ha.new', 'w') as write_file:
flag = False
has_write = Falsefor line in read_file:
line_strip = line.strip()
if line_strip == backend_title:
flag = Truecontinueif flag and line_strip.startswith('backend'):
flag = Falseifnot flag:
write_file.write(line)
else:
ifnot has_write:
for i in record_list:
if i.startswith('backend'):
write_file.write(i + '\n')
else:
write_file.write("%s%s\n" % (8 * " ", i))
has_write = Trueelse:
sign = 0print("该IP记录已存在,请重新确认信息")
if sign == 1:
move_filename()
defremove(dict_info):
backend = dict_info.get('backend')
record_list = fetch(backend)
backend_title = "backend %s" % backend
current_record = "server %s %s weight %d maxconn %d" % (dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn'])
ifnot record_list:
print("该backend记录不在配置文件中,请检测后重新输入!")
returnelse:
if current_record notin record_list:
print("该主机配置记录不正确,请检测后重新输入!")
returnelse:
del record_list[record_list.index(current_record)]
iflen(record_list) > 0:
record_list.insert(0, backend_title)
withopen('ha') as read_file, open('ha.new', 'w') as write_file:
flag = False
has_write = Falsefor line in read_file:
line_strip = line.strip()
if line_strip == backend_title:
flag = Truecontinueif flag and line_strip.startswith('backend'):
flag = Falseifnot flag:
write_file.write(line)
else:
ifnot has_write:
for i in record_list:
if i.startswith('backend'):
write_file.write(i + '\n')
else:
write_file.write("%s%s\n" % (8 * " ", i))
has_write = True
move_filename()
defmove_filename():
for file in os.listdir('.'):
if file == "ha.bak":
os.remove(file)
os.rename('ha', 'ha.bak')
os.rename('ha.new', 'ha')
print("操作成功")
defshow():
# 显示信息函数print("*****************************")
print("1、获取ha记录")
print("2、增加ha记录")
print("3、删除ha记录")
print("4、退出系统")
print("*****************************")
return@logindefmain():
whileTrue:
# 输出显示信息
show()
num = input('请输入序号:')
if num == '1':
data = input('请输入内容:')
ret = fetch(data)
for i in ret:
print(i)
elif num == '4':
sys.exit("欢迎再次使用haproxy修改系统")
else:
data = input('请输入内容:')
dict_data = json.loads(data)
if num == '2':
add(dict_data)
elif num == '3':
remove(dict_data)
else:
print("你输入的操作系列号有误!请重新输入。")
if __name__ == '__main__':
main()
2、用户帐号密码文件
# password.txt
evescn gmkk
gmkk 12321
3、ha配置文件
# ha配置文件
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.119 100.1.7.119 weight 20 maxconn 30
server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
server 100.1.7.19 100.1.7.19 weight 20 maxconn 30
server 100.1.7.12 100.1.7.12 weight 20 maxconn 30
backend buy.oldboy.org
server 100.1.7.90 100.1.7.90 weight 20 maxconn 3000
运行结果
1、查询记录
Please input your name: evescn
Please input password: gmkk
*****************************
1、获取ha记录
2、增加ha记录
3、删除ha记录
4、退出系统
*****************************
请输入序号:1
请输入内容:www.oldboy.org
server 100.1.7.119100.1.7.119 weight 20 maxconn 30
server 100.1.7.9100.1.7.9 weight 20 maxconn 3000
server 100.1.7.19100.1.7.19 weight 20 maxconn 30
server 100.1.7.12100.1.7.12 weight 20 maxconn 30
*****************************
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2017-06-21 Linux基础命令-文本文件查看工具
2017-06-21 Linux基础命令-ls